diff options
Diffstat (limited to 'src/libs')
-rw-r--r-- | src/libs/installer/copydirectoryoperation.cpp | 2 | ||||
-rw-r--r-- | src/libs/installer/createlocalrepositoryoperation.cpp | 2 | ||||
-rw-r--r-- | src/libs/installer/globalsettingsoperation.cpp | 2 | ||||
-rw-r--r-- | src/libs/installer/registerfiletypeoperation.cpp | 2 | ||||
-rw-r--r-- | src/libs/installer/simplemovefileoperation.cpp | 2 | ||||
-rw-r--r-- | src/libs/kdtools/updateoperation.cpp | 17 | ||||
-rw-r--r-- | src/libs/kdtools/updateoperation.h | 2 | ||||
-rw-r--r-- | src/libs/kdtools/updateoperations.cpp | 65 | ||||
-rw-r--r-- | src/libs/kdtools/updateoperations.h | 2 |
9 files changed, 59 insertions, 37 deletions
diff --git a/src/libs/installer/copydirectoryoperation.cpp b/src/libs/installer/copydirectoryoperation.cpp index a2ef2cf5a..c0fec0649 100644 --- a/src/libs/installer/copydirectoryoperation.cpp +++ b/src/libs/installer/copydirectoryoperation.cpp @@ -153,7 +153,7 @@ bool CopyDirectoryOperation::performOperation() bool CopyDirectoryOperation::undoOperation() { - if (parseUndoOperationArguments().count() > 0) + if (skipUndoOperation()) return true; if (!checkArgumentCount(2)) diff --git a/src/libs/installer/createlocalrepositoryoperation.cpp b/src/libs/installer/createlocalrepositoryoperation.cpp index 7090f9a8b..286cc9b5b 100644 --- a/src/libs/installer/createlocalrepositoryoperation.cpp +++ b/src/libs/installer/createlocalrepositoryoperation.cpp @@ -378,7 +378,7 @@ bool CreateLocalRepositoryOperation::performOperation() bool CreateLocalRepositoryOperation::undoOperation() { - if (parseUndoOperationArguments().count() > 0) + if (skipUndoOperation()) return true; if (!checkArgumentCount(2)) diff --git a/src/libs/installer/globalsettingsoperation.cpp b/src/libs/installer/globalsettingsoperation.cpp index 9608bba66..6ca50f96f 100644 --- a/src/libs/installer/globalsettingsoperation.cpp +++ b/src/libs/installer/globalsettingsoperation.cpp @@ -77,7 +77,7 @@ bool GlobalSettingsOperation::performOperation() bool GlobalSettingsOperation::undoOperation() { - if (parseUndoOperationArguments().count() > 0) + if (skipUndoOperation()) return true; const QStringList args = parsePerformOperationArguments(); diff --git a/src/libs/installer/registerfiletypeoperation.cpp b/src/libs/installer/registerfiletypeoperation.cpp index 1754b664d..852714dfb 100644 --- a/src/libs/installer/registerfiletypeoperation.cpp +++ b/src/libs/installer/registerfiletypeoperation.cpp @@ -153,7 +153,7 @@ bool RegisterFileTypeOperation::undoOperation() { #ifdef Q_OS_WIN ensureOptionalArgumentsRead(); - if (parseUndoOperationArguments().count() > 0) + if (skipUndoOperation()) return true; QStringList args = arguments(); diff --git a/src/libs/installer/simplemovefileoperation.cpp b/src/libs/installer/simplemovefileoperation.cpp index 5f3000be0..5bbbdabb4 100644 --- a/src/libs/installer/simplemovefileoperation.cpp +++ b/src/libs/installer/simplemovefileoperation.cpp @@ -93,7 +93,7 @@ bool SimpleMoveFileOperation::performOperation() bool SimpleMoveFileOperation::undoOperation() { - if (parseUndoOperationArguments().count() > 0) + if (skipUndoOperation()) return true; const QString source = arguments().at(0); const QString target = arguments().at(1); diff --git a/src/libs/kdtools/updateoperation.cpp b/src/libs/kdtools/updateoperation.cpp index e9e69fc13..af89382a8 100644 --- a/src/libs/kdtools/updateoperation.cpp +++ b/src/libs/kdtools/updateoperation.cpp @@ -292,23 +292,18 @@ QStringList UpdateOperation::parsePerformOperationArguments() } /*! - Returns undo operation argument list. If the installation is - cancelled or failed, returns an empty list so that full undo - operation can be performed. + Returns \c true if operation undo should not be performed. + Returns \c false if the installation is cancelled or failed, or + \c UNDOOPERATION is not set in operation call. */ -QStringList UpdateOperation::parseUndoOperationArguments() +bool UpdateOperation::skipUndoOperation() { //Install has failed, allow a normal undo if (m_core && (m_core->status() == QInstaller::PackageManagerCore::Canceled || m_core->status() == QInstaller::PackageManagerCore::Failure)) { - return QStringList(); - } - int index = arguments().indexOf(QLatin1String("UNDOOPERATION")); - QStringList args; - if ((index != -1) && (arguments().length() > index + 1)) { - args = arguments().mid(index + 1); + return false; } - return args; + return arguments().contains(QLatin1String("UNDOOPERATION")); } /*! diff --git a/src/libs/kdtools/updateoperation.h b/src/libs/kdtools/updateoperation.h index 4a431f107..e25846cd3 100644 --- a/src/libs/kdtools/updateoperation.h +++ b/src/libs/kdtools/updateoperation.h @@ -112,7 +112,7 @@ protected: bool checkArgumentCount(int minArgCount, int maxArgCount, const QString &argDescription = QString()); bool checkArgumentCount(int argCount); QStringList parsePerformOperationArguments(); - QStringList parseUndoOperationArguments(); + bool skipUndoOperation(); void setRequiresUnreplacedVariables(bool isRequired); bool variableReplacement(QString *variableValue); diff --git a/src/libs/kdtools/updateoperations.cpp b/src/libs/kdtools/updateoperations.cpp index 9301d4f13..5f6135103 100644 --- a/src/libs/kdtools/updateoperations.cpp +++ b/src/libs/kdtools/updateoperations.cpp @@ -127,7 +127,7 @@ QString CopyOperation::sourcePath() QString CopyOperation::destinationPath() { - QString destination = arguments().last(); + QString destination = arguments().at(1); // if the target is a directory use the source filename to complete the destination path if (QFileInfo(destination).isDir()) @@ -135,7 +135,6 @@ QString CopyOperation::destinationPath() return destination; } - void CopyOperation::backup() { QString destination = destinationPath(); @@ -156,8 +155,8 @@ void CopyOperation::backup() bool CopyOperation::performOperation() { // We need two args to complete the copy operation. First arg provides the complete file name of source - // Second arg provides the complete file name of dest - if (!checkArgumentCount(2)) + // Second arg provides the complete file name of dest. Optionally UNDOOPERATION can be added as well + if (!checkArgumentCount(2, 4, QLatin1String("<source filename> <destination filename> [UNDOOPERATION, \"\"]"))) return false; QString source = sourcePath(); @@ -193,6 +192,8 @@ bool CopyOperation::performOperation() bool CopyOperation::undoOperation() { + if (skipUndoOperation()) + return true; QString source = sourcePath(); QString destination = destinationPath(); @@ -270,7 +271,7 @@ MoveOperation::~MoveOperation() void MoveOperation::backup() { - const QString dest = arguments().last(); + const QString dest = arguments().at(1); if (!QFile::exists(dest)) { clearValue(QLatin1String("backupOfExistingDestination")); return; @@ -286,9 +287,10 @@ void MoveOperation::backup() bool MoveOperation::performOperation() { - // We need two args to complete the copy operation. // First arg provides the complete file name of - // source, second arg provides the complete file name of dest - if (!checkArgumentCount(2)) + // We need two args to complete the copy operation. First arg provides the complete file name of + // source, second arg provides the complete file name of dest. Optionally UNDOOPERATION can be added as well + if (!checkArgumentCount(2, 4, QLatin1String("<complete source file name> <complete destination " + "file name> [UNDOOPERATION, \"\"]"))) return false; const QStringList args = arguments(); @@ -318,8 +320,10 @@ bool MoveOperation::performOperation() bool MoveOperation::undoOperation() { + if (skipUndoOperation()) + return true; const QStringList args = arguments(); - const QString dest = args.last(); + const QString dest = args.at(1); // first: copy back the destination to source QFile destF(dest); if (!destF.copy(args.first())) { @@ -391,7 +395,8 @@ void DeleteOperation::backup() bool DeleteOperation::performOperation() { // Requires only one parameter. That is the name of the file to remove. - if (!checkArgumentCount(1)) + // Optionally UNDOOPERATION can be added as well + if (!checkArgumentCount(1, 3, QLatin1String("<file to remove> [UNDOOPERATION, \"\"]"))) return false; return deleteFileNowOrLater(arguments().at(0)); @@ -399,7 +404,7 @@ bool DeleteOperation::performOperation() bool DeleteOperation::undoOperation() { - if (!hasValue(QLatin1String("backupOfExistingFile"))) + if (skipUndoOperation()) return true; const QString fileName = arguments().first(); @@ -478,7 +483,8 @@ void MkdirOperation::backup() bool MkdirOperation::performOperation() { // Requires only one parameter. That is the path which should be created - if (!checkArgumentCount(1)) + // Optionally UNDOOPERATION can be added as well + if (!checkArgumentCount(1, 3, QLatin1String("<file to remove> [UNDOOPERATION, \"\"]"))) return false; const QString dirName = arguments().at(0); @@ -493,7 +499,8 @@ bool MkdirOperation::performOperation() bool MkdirOperation::undoOperation() { - Q_ASSERT(arguments().count() == 1); + if (skipUndoOperation()) + return true; QString createdDirValue = value(QLatin1String("createddir")).toString(); if (packageManager()) { @@ -572,7 +579,8 @@ void RmdirOperation::backup() bool RmdirOperation::performOperation() { // Requires only one parameter. That is the name of the file to remove. - if (!checkArgumentCount(1)) + // Optionally UNDOOPERATION can be added as well + if (!checkArgumentCount(1, 3, QLatin1String("<file to remove> [UNDOOPERATION, \"\"]"))) return false; const QString firstArg = arguments().at(0); @@ -597,7 +605,7 @@ bool RmdirOperation::performOperation() bool RmdirOperation::undoOperation() { - if (!value(QLatin1String("removed")).toBool()) + if (!value(QLatin1String("removed")).toBool() || skipUndoOperation()) return true; errno = 0; @@ -633,6 +641,12 @@ AppendFileOperation::AppendFileOperation(QInstaller::PackageManagerCore *core) setName(QLatin1String("AppendFile")); } +AppendFileOperation::~AppendFileOperation() +{ + if (skipUndoOperation()) + deleteFileNowOrLater(value(QLatin1String("backupOfFile")).toString()); +} + void AppendFileOperation::backup() { const QString filename = arguments().first(); @@ -653,10 +667,10 @@ bool AppendFileOperation::performOperation() { // This operation takes two arguments. First argument is the name of the file into which a text has to be // appended. Second argument is the text to append. - if (!checkArgumentCount(2)) + if (!checkArgumentCount(2, 4, QLatin1String("<filename> <text to apply> [UNDOOPERATION, \"\"]"))) return false; - const QStringList args = this->arguments(); + const QStringList args = arguments(); const QString fName = args.at(0); QFile file(fName); if (!file.open(QFile::Append)) { @@ -695,6 +709,9 @@ bool AppendFileOperation::performOperation() bool AppendFileOperation::undoOperation() { + if (skipUndoOperation()) + return true; + // backupOfFile being empty -> file didn't exist before -> no error const QString filename = arguments().first(); const QString backupOfFile = value(QLatin1String("backupOfFile")).toString(); @@ -746,6 +763,12 @@ PrependFileOperation::PrependFileOperation(QInstaller::PackageManagerCore *core) setName(QLatin1String("PrependFile")); } +PrependFileOperation::~PrependFileOperation() +{ + if (skipUndoOperation()) + deleteFileNowOrLater(value(QLatin1String("backupOfFile")).toString()); +} + void PrependFileOperation::backup() { const QString filename = arguments().first(); @@ -767,10 +790,10 @@ bool PrependFileOperation::performOperation() // This operation takes two arguments. First argument is the name // of the file into which a text has to be appended. Second argument // is the text to append. - if (!checkArgumentCount(2)) + if (!checkArgumentCount(2, 4, QLatin1String("<filename> <text to prepend> [UNDOOPERATION, \"\"]"))) return false; - const QStringList args = this->arguments(); + const QStringList args = arguments(); const QString fName = args.at(0); // Load the file first. QFile file(fName); @@ -810,7 +833,9 @@ bool PrependFileOperation::performOperation() bool PrependFileOperation::undoOperation() { - // bockupOfFile being empty -> file didn't exist before -> no error + if (skipUndoOperation()) + return true; + const QString filename = arguments().first(); const QString backupOfFile = value(QLatin1String("backupOfFile")).toString(); if (!backupOfFile.isEmpty() && !QFile::exists(backupOfFile)) { diff --git a/src/libs/kdtools/updateoperations.h b/src/libs/kdtools/updateoperations.h index c789975e2..adbfc7de1 100644 --- a/src/libs/kdtools/updateoperations.h +++ b/src/libs/kdtools/updateoperations.h @@ -109,6 +109,7 @@ class KDTOOLS_EXPORT AppendFileOperation : public UpdateOperation Q_DECLARE_TR_FUNCTIONS(KDUpdater::AppendFileOperation) public: explicit AppendFileOperation(QInstaller::PackageManagerCore *core = 0); + ~AppendFileOperation(); void backup() override; bool performOperation() override; @@ -121,6 +122,7 @@ class KDTOOLS_EXPORT PrependFileOperation : public UpdateOperation Q_DECLARE_TR_FUNCTIONS(KDUpdater::PrependFileOperation) public: explicit PrependFileOperation(QInstaller::PackageManagerCore *core = 0); + ~PrependFileOperation(); void backup() override; bool performOperation() override; |