diff options
Diffstat (limited to 'src/libs/kdtools')
-rw-r--r-- | src/libs/kdtools/updateoperation.cpp | 34 | ||||
-rw-r--r-- | src/libs/kdtools/updateoperation.h | 2 |
2 files changed, 35 insertions, 1 deletions
diff --git a/src/libs/kdtools/updateoperation.cpp b/src/libs/kdtools/updateoperation.cpp index b884fa9fa..267cd8a80 100644 --- a/src/libs/kdtools/updateoperation.cpp +++ b/src/libs/kdtools/updateoperation.cpp @@ -190,7 +190,7 @@ QStringList UpdateOperation::arguments() const bool UpdateOperation::checkArgumentCount(int minArgCount, int maxArgCount, const QString &argDescription) { - const int argCount = arguments().count(); + const int argCount = parsePerformOperationArguments().count(); if (argCount < minArgCount || argCount > maxArgCount) { setError(InvalidArguments); QString countRange; @@ -226,6 +226,38 @@ bool UpdateOperation::checkArgumentCount(int argCount) return checkArgumentCount(argCount, argCount); } +/*! + Returns operation argument list without + \c UNDOOOPERATION arguments. +*/ +QStringList UpdateOperation::parsePerformOperationArguments() +{ + QStringList args; + int index = arguments().indexOf(QLatin1String("UNDOOPERATION")); + args = arguments().mid(0, index); + return args; +} + +/*! + Returns undo operation argument list. If the installation is + cancelled or failed, returns an empty list so that full undo + operation can be performed. +*/ +QStringList UpdateOperation::parseUndoOperationArguments() +{ + //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 args; +} + struct StartsWith { StartsWith(const QString &searchTerm) diff --git a/src/libs/kdtools/updateoperation.h b/src/libs/kdtools/updateoperation.h index 45120ab95..b3642c78e 100644 --- a/src/libs/kdtools/updateoperation.h +++ b/src/libs/kdtools/updateoperation.h @@ -91,6 +91,8 @@ protected: bool deleteFileNowOrLater(const QString &file, QString *errorString = 0); bool checkArgumentCount(int minArgCount, int maxArgCount, const QString &argDescription = QString()); bool checkArgumentCount(int argCount); + QStringList parsePerformOperationArguments(); + QStringList parseUndoOperationArguments(); private: QString m_name; |