From 7be83635627ca1384862a8826de2d85979cdfc8e Mon Sep 17 00:00:00 2001 From: Katja Marttila Date: Tue, 22 Dec 2020 09:53:36 +0200 Subject: Allow disabling undo of GlobalSettings during uninstall Task-number: QTIFW-1973 Change-Id: I89f15c8ed7d56c3e1bc72d3c740e9054363f9390 Reviewed-by: Arttu Tarkiainen --- src/libs/installer/globalsettingsoperation.cpp | 9 +++++-- src/libs/kdtools/updateoperation.cpp | 34 +++++++++++++++++++++++++- src/libs/kdtools/updateoperation.h | 2 ++ 3 files changed, 42 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/libs/installer/globalsettingsoperation.cpp b/src/libs/installer/globalsettingsoperation.cpp index f1f184ceb..dc085f4b6 100644 --- a/src/libs/installer/globalsettingsoperation.cpp +++ b/src/libs/installer/globalsettingsoperation.cpp @@ -49,8 +49,9 @@ void GlobalSettingsOperation::backup() bool GlobalSettingsOperation::performOperation() { + const QStringList args = parsePerformOperationArguments(); QString key, value; - QScopedPointer settings(setup(&key, &value, arguments())); + QScopedPointer settings(setup(&key, &value, args)); if (settings.isNull()) return false; @@ -76,8 +77,12 @@ bool GlobalSettingsOperation::performOperation() bool GlobalSettingsOperation::undoOperation() { + if (parseUndoOperationArguments().count() > 0) + return true; + + const QStringList args = parsePerformOperationArguments(); QString key, val; - QScopedPointer settings(setup(&key, &val, arguments())); + QScopedPointer settings(setup(&key, &val, args)); if (settings.isNull()) return false; 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; -- cgit v1.2.3