diff options
Diffstat (limited to 'src/libs')
-rw-r--r-- | src/libs/installer/component.cpp | 10 | ||||
-rw-r--r-- | src/libs/installer/elevatedexecuteoperation.cpp | 13 | ||||
-rw-r--r-- | src/libs/installer/packagemanagercore_p.cpp | 7 | ||||
-rw-r--r-- | src/libs/kdtools/updateoperation.cpp | 20 | ||||
-rw-r--r-- | src/libs/kdtools/updateoperation.h | 3 |
5 files changed, 47 insertions, 6 deletions
diff --git a/src/libs/installer/component.cpp b/src/libs/installer/component.cpp index 4d614d242..2e797944b 100644 --- a/src/libs/installer/component.cpp +++ b/src/libs/installer/component.cpp @@ -1,6 +1,6 @@ /************************************************************************** ** -** Copyright (C) 2020 The Qt Company Ltd. +** Copyright (C) 2021 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt Installer Framework. @@ -1096,7 +1096,13 @@ Operation *Component::createOperation(const QString &operationName, const QStrin if (operation->name() == QLatin1String("Delete")) operation->setValue(QLatin1String("performUndo"), false); - operation->setArguments(d->m_core->replaceVariables(parameters)); + // Operation can contain variables which are resolved when performing the operation + if (operation->requiresUnreplacedVariables()) + operation->setArguments(parameters); + else + operation->setArguments(d->m_core->replaceVariables(parameters)); + + operation->setValue(QLatin1String("component"), name()); return operation; } diff --git a/src/libs/installer/elevatedexecuteoperation.cpp b/src/libs/installer/elevatedexecuteoperation.cpp index f5640ef8d..39be98e6f 100644 --- a/src/libs/installer/elevatedexecuteoperation.cpp +++ b/src/libs/installer/elevatedexecuteoperation.cpp @@ -1,6 +1,6 @@ /************************************************************************** ** -** Copyright (C) 2017 The Qt Company Ltd. +** Copyright (C) 2021 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt Installer Framework. @@ -31,6 +31,7 @@ #include "environment.h" #include "qprocesswrapper.h" #include "globals.h" +#include "packagemanagercore.h" #include <QtCore/QDebug> #include <QtCore/QProcessEnvironment> @@ -72,6 +73,7 @@ ElevatedExecuteOperation::ElevatedExecuteOperation(PackageManagerCore *core) { // this operation has to "overwrite" the Execute operation from KDUpdater setName(QLatin1String("Execute")); + setRequiresUnreplacedVariables(true); } ElevatedExecuteOperation::~ElevatedExecuteOperation() @@ -94,6 +96,10 @@ bool ElevatedExecuteOperation::performOperation() break; //we don't need the UNDOEXECUTE args here } + if (requiresUnreplacedVariables()) { + PackageManagerCore *const core = packageManager(); + args = core->replaceVariables(args); + } return d->run(args); } @@ -262,7 +268,6 @@ void ElevatedExecuteOperation::Private::readProcessOutput() } } - bool ElevatedExecuteOperation::undoOperation() { QStringList args; @@ -276,6 +281,10 @@ bool ElevatedExecuteOperation::undoOperation() if (args.isEmpty()) return true; + if (requiresUnreplacedVariables()) { + PackageManagerCore *const core = packageManager(); + args = core->replaceVariables(args); + } return d->run(args); } diff --git a/src/libs/installer/packagemanagercore_p.cpp b/src/libs/installer/packagemanagercore_p.cpp index e3dfe7f4f..7f4330ca8 100644 --- a/src/libs/installer/packagemanagercore_p.cpp +++ b/src/libs/installer/packagemanagercore_p.cpp @@ -1,6 +1,6 @@ /************************************************************************** ** -** Copyright (C) 2020 The Qt Company Ltd. +** Copyright (C) 2021 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt Installer Framework. @@ -101,8 +101,11 @@ public: return; qCDebug(QInstaller::lcInstallerInstallLog).noquote() << QString::fromLatin1("%1 %2 operation: %3") .arg(state, m_operation->value(QLatin1String("component")).toString(), m_operation->name()); + QStringList args = m_operation->arguments(); + if (m_operation->requiresUnreplacedVariables()) + args = m_operation->packageManager()->replaceVariables(m_operation->arguments()); qCDebug(QInstaller::lcInstallerInstallLog).noquote() << QString::fromLatin1("\t- arguments: %1") - .arg(m_operation->arguments().join(QLatin1String(", "))); + .arg(args.join(QLatin1String(", "))); } ~OperationTracer() { if (!m_operation) diff --git a/src/libs/kdtools/updateoperation.cpp b/src/libs/kdtools/updateoperation.cpp index 267cd8a80..35c9dce2e 100644 --- a/src/libs/kdtools/updateoperation.cpp +++ b/src/libs/kdtools/updateoperation.cpp @@ -89,6 +89,7 @@ static QString backupFileName(const QString &templateName) UpdateOperation::UpdateOperation(QInstaller::PackageManagerCore *core) : m_error(0) , m_core(core) + , m_requiresUnreplacedVariables(false) { // Store the value for compatibility reasons. m_values[QLatin1String("installer")] = QVariant::fromValue(core); @@ -258,6 +259,16 @@ QStringList UpdateOperation::parseUndoOperationArguments() return args; } +/*! + Sets the requirement for unresolved variables to \a isRequired. + + \sa requiresUnreplacedVariables() +*/ +void UpdateOperation::setRequiresUnreplacedVariables(bool isRequired) +{ + m_requiresUnreplacedVariables = isRequired; +} + struct StartsWith { StartsWith(const QString &searchTerm) @@ -354,6 +365,15 @@ QStringList UpdateOperation::filesForDelayedDeletion() const } /*! + Returns true if installer saves the variables unresolved. + The variables are resolved right before operation is performed. +*/ +bool UpdateOperation::requiresUnreplacedVariables() const +{ + return m_requiresUnreplacedVariables; +} + +/*! Returns the package manager core this operation belongs to. */ QInstaller::PackageManagerCore *UpdateOperation::packageManager() const diff --git a/src/libs/kdtools/updateoperation.h b/src/libs/kdtools/updateoperation.h index b3642c78e..e05fc34d2 100644 --- a/src/libs/kdtools/updateoperation.h +++ b/src/libs/kdtools/updateoperation.h @@ -71,6 +71,7 @@ public: QString errorString() const; int error() const; QStringList filesForDelayedDeletion() const; + bool requiresUnreplacedVariables() const; QInstaller::PackageManagerCore *packageManager() const; @@ -93,6 +94,7 @@ protected: bool checkArgumentCount(int argCount); QStringList parsePerformOperationArguments(); QStringList parseUndoOperationArguments(); + void setRequiresUnreplacedVariables(bool isRequired); private: QString m_name; @@ -102,6 +104,7 @@ private: QVariantMap m_values; QStringList m_delayedDeletionFiles; QInstaller::PackageManagerCore *m_core; + bool m_requiresUnreplacedVariables; }; } // namespace KDUpdater |