summaryrefslogtreecommitdiffstats
path: root/src/libs
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs')
-rw-r--r--src/libs/installer/component.cpp10
-rw-r--r--src/libs/installer/elevatedexecuteoperation.cpp13
-rw-r--r--src/libs/installer/packagemanagercore_p.cpp7
-rw-r--r--src/libs/kdtools/updateoperation.cpp20
-rw-r--r--src/libs/kdtools/updateoperation.h3
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