summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/libs/installer/packagemanagercore.cpp7
-rw-r--r--src/libs/installer/packagemanagercore.h4
-rw-r--r--src/libs/installer/packagemanagercore_p.cpp1
-rw-r--r--src/libs/installer/packagemanagercoredata.cpp7
-rw-r--r--src/sdk/sdkapp.h36
-rw-r--r--tests/auto/installer/packagemanagercore/installer-config/config.xml8
-rw-r--r--tests/auto/installer/packagemanagercore/packagemanagercore.pro2
-rw-r--r--tests/auto/installer/packagemanagercore/settings.qrc6
-rw-r--r--tests/auto/installer/packagemanagercore/tst_packagemanagercore.cpp39
9 files changed, 90 insertions, 20 deletions
diff --git a/src/libs/installer/packagemanagercore.cpp b/src/libs/installer/packagemanagercore.cpp
index 0a5eec513..02f12bd90 100644
--- a/src/libs/installer/packagemanagercore.cpp
+++ b/src/libs/installer/packagemanagercore.cpp
@@ -1027,14 +1027,17 @@ PackageManagerCore::PackageManagerCore()
and \a mode to set the server side authorization key.
*/
PackageManagerCore::PackageManagerCore(qint64 magicmaker, const QList<OperationBlob> &operations,
- const QString &socketName, const QString &key, Protocol::Mode mode)
+ const QString &socketName, const QString &key, Protocol::Mode mode,
+ const QHash<QString, QString> &params, const bool commandLineInstance)
: d(new PackageManagerCorePrivate(this, magicmaker, operations))
{
+ setCommandLineInstance(commandLineInstance);
Repository::registerMetaType(); // register, cause we stream the type as QVariant
qRegisterMetaType<QInstaller::PackageManagerCore::Status>("QInstaller::PackageManagerCore::Status");
qRegisterMetaType<QInstaller::PackageManagerCore::WizardPage>("QInstaller::PackageManagerCore::WizardPage");
- d->initialize(QHash<QString, QString>());
+ d->initialize(params);
+
// Creates and initializes a remote client, makes us get admin rights for QFile, QSettings
// and QProcess operations. Init needs to called to set the server side authorization key.
if (!d->isUpdater()) {
diff --git a/src/libs/installer/packagemanagercore.h b/src/libs/installer/packagemanagercore.h
index 979ff50e6..eb4220072 100644
--- a/src/libs/installer/packagemanagercore.h
+++ b/src/libs/installer/packagemanagercore.h
@@ -62,7 +62,9 @@ public:
PackageManagerCore(qint64 magicmaker, const QList<OperationBlob> &ops,
const QString &socketName = QString(),
const QString &key = QLatin1String(Protocol::DefaultAuthorizationKey),
- Protocol::Mode mode = Protocol::Mode::Production);
+ Protocol::Mode mode = Protocol::Mode::Production,
+ const QHash<QString, QString> &params = QHash<QString, QString>(),
+ const bool commandLineInstance = false);
~PackageManagerCore();
// status
diff --git a/src/libs/installer/packagemanagercore_p.cpp b/src/libs/installer/packagemanagercore_p.cpp
index 54eace77a..dba96c222 100644
--- a/src/libs/installer/packagemanagercore_p.cpp
+++ b/src/libs/installer/packagemanagercore_p.cpp
@@ -592,7 +592,6 @@ void PackageManagerCorePrivate::initialize(const QHash<QString, QString> &params
#endif
}
processFilesForDelayedDeletion();
- m_data.setDynamicPredefinedVariables();
disconnect(this, &PackageManagerCorePrivate::installationStarted,
ProgressCoordinator::instance(), &ProgressCoordinator::reset);
diff --git a/src/libs/installer/packagemanagercoredata.cpp b/src/libs/installer/packagemanagercoredata.cpp
index b985487c9..df6d96a55 100644
--- a/src/libs/installer/packagemanagercoredata.cpp
+++ b/src/libs/installer/packagemanagercoredata.cpp
@@ -46,7 +46,6 @@ namespace QInstaller
PackageManagerCoreData::PackageManagerCoreData(const QHash<QString, QString> &variables)
{
- m_variables = variables;
setDynamicPredefinedVariables();
// Set some common variables that may used e.g. as placeholder in some of the settings variables or
@@ -86,6 +85,12 @@ PackageManagerCoreData::PackageManagerCoreData(const QHash<QString, QString> &va
m_variables.insert(scTargetDir, replaceVariables(m_settings.targetDir()));
m_variables.insert(scRemoveTargetDir, replaceVariables(m_settings.removeTargetDir()));
+
+ // Iterate over user defined parameters. If those are found, add to table or
+ // replace existing values.
+ QHash<QString, QString>::const_iterator it;
+ for (it = variables.begin(); it != variables.end(); ++it)
+ m_variables.insert(it.key(), it.value());
}
void PackageManagerCoreData::clear()
diff --git a/src/sdk/sdkapp.h b/src/sdk/sdkapp.h
index d7905f1f0..ab0b9eb2f 100644
--- a/src/sdk/sdkapp.h
+++ b/src/sdk/sdkapp.h
@@ -132,10 +132,10 @@ public:
binary.close();
QString loggingRules(QLatin1String("ifw.* = false")); // disable all by default
- bool isCliInterface = false;
+ bool isCommandLineInterface = false;
foreach (const QString &option, CommandLineOptions::scCommandLineInterfaceOptions) {
if (m_parser.positionalArguments().contains(option)) {
- isCliInterface = true;
+ isCommandLineInterface = true;
break;
}
}
@@ -144,7 +144,7 @@ public:
loggingRules = m_parser.value(CommandLineOptions::scLoggingRulesLong)
.split(QLatin1Char(','), QString::SkipEmptyParts)
.join(QLatin1Char('\n')); // take rules from command line
- } else if (isCliInterface) {
+ } else if (isCommandLineInterface) {
loggingRules = QLatin1String("ifw.* = false\n"
"ifw.installer.* = true\n"
"ifw.server = true\n"
@@ -163,6 +163,8 @@ public:
QLoggingCategory::setFilterRules(loggingRules);
SDKApp::registerMetaResources(manager.collectionByName("QResources"));
+
+ const QHash<QString, QString> userArgs = userArguments();
if (m_parser.isSet(CommandLineOptions::scStartClientLong)) {
const QStringList arguments = m_parser.value(CommandLineOptions::scStartClientLong)
.split(QLatin1Char(','), QString::SkipEmptyParts);
@@ -170,11 +172,11 @@ public:
magicMarker, oldOperations,
arguments.value(0, QLatin1String(QInstaller::Protocol::DefaultSocket)),
arguments.value(1, QLatin1String(QInstaller::Protocol::DefaultAuthorizationKey)),
- QInstaller::Protocol::Mode::Debug);
+ QInstaller::Protocol::Mode::Debug, userArgs, isCommandLineInterface);
} else {
m_core = new QInstaller::PackageManagerCore(magicMarker, oldOperations,
- QUuid::createUuid().toString(), QUuid::createUuid().toString());
- m_core->setCommandLineInstance(isCliInterface);
+ QUuid::createUuid().toString(), QUuid::createUuid().toString(),
+ QInstaller::Protocol::Mode::Production, userArgs, isCommandLineInterface);
}
{
@@ -272,14 +274,6 @@ public:
.isSet(CommandLineOptions::scCreateLocalRepositoryLong)
|| m_core->settings().createLocalRepository());
- const QStringList positionalArguments = m_parser.positionalArguments();
- foreach (const QString &argument, positionalArguments) {
- if (argument.contains(QLatin1Char('='))) {
- const QString name = argument.section(QLatin1Char('='), 0, 0);
- const QString value = argument.section(QLatin1Char('='), 1, 1);
- m_core->setValue(name, value);
- }
- }
return true;
}
@@ -372,6 +366,20 @@ public:
return items;
}
+ QHash<QString, QString> userArguments()
+ {
+ QHash<QString, QString> params;
+ const QStringList positionalArguments = m_parser.positionalArguments();
+ foreach (const QString &argument, positionalArguments) {
+ if (argument.contains(QLatin1Char('='))) {
+ const QString name = argument.section(QLatin1Char('='), 0, 0);
+ const QString value = argument.section(QLatin1Char('='), 1, 1);
+ params.insert(name, value);
+ }
+ }
+ return params;
+ }
+
private:
QList<QByteArray> m_resourceMappings;
diff --git a/tests/auto/installer/packagemanagercore/installer-config/config.xml b/tests/auto/installer/packagemanagercore/installer-config/config.xml
new file mode 100644
index 000000000..5826308e1
--- /dev/null
+++ b/tests/auto/installer/packagemanagercore/installer-config/config.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Installer>
+ <Name>Unit Test Application</Name>
+ <Title>Unit Test Application Title</Title>
+ <Version>1.0.0</Version>
+ <Publisher>The Qt Company</Publisher>
+ <MaintenanceToolName>UnitTestMaintenancetool</MaintenanceToolName>
+</Installer>
diff --git a/tests/auto/installer/packagemanagercore/packagemanagercore.pro b/tests/auto/installer/packagemanagercore/packagemanagercore.pro
index 3dfefbab6..6e9e387fa 100644
--- a/tests/auto/installer/packagemanagercore/packagemanagercore.pro
+++ b/tests/auto/installer/packagemanagercore/packagemanagercore.pro
@@ -5,4 +5,4 @@ QT += qml
SOURCES += tst_packagemanagercore.cpp
RESOURCES += \
- ..\shared\config.qrc
+ settings.qrc
diff --git a/tests/auto/installer/packagemanagercore/settings.qrc b/tests/auto/installer/packagemanagercore/settings.qrc
new file mode 100644
index 000000000..d7dfb5ddd
--- /dev/null
+++ b/tests/auto/installer/packagemanagercore/settings.qrc
@@ -0,0 +1,6 @@
+<RCC>
+ <qresource prefix="/metadata">
+ <file>installer-config/config.xml</file>
+ </qresource>
+</RCC>
+
diff --git a/tests/auto/installer/packagemanagercore/tst_packagemanagercore.cpp b/tests/auto/installer/packagemanagercore/tst_packagemanagercore.cpp
index 40e8d5a1b..9a8c7c4b6 100644
--- a/tests/auto/installer/packagemanagercore/tst_packagemanagercore.cpp
+++ b/tests/auto/installer/packagemanagercore/tst_packagemanagercore.cpp
@@ -32,6 +32,8 @@
#include <fileutils.h>
#include <packagemanagercore.h>
#include <progresscoordinator.h>
+#include <init.h>
+#include <settings.h>
#include <QDir>
#include <QFile>
@@ -319,6 +321,43 @@ private slots:
QVERIFY(QDir().rmdir(testDirectory));
}
+
+ void testCoreDataValues()
+ {
+ QHash<QString, QString> userValues;
+
+ PackageManagerCore *core = new PackageManagerCore(BinaryContent::MagicInstallerMarker, QList<OperationBlob> (),
+ QString(), Protocol::DefaultAuthorizationKey, Protocol::Mode::Production,
+ userValues, true);
+ QCOMPARE(core->value("AllUsers"), "");
+ QCOMPARE(core->value("ProductName"), "Unit Test Application");
+ QCOMPARE(core->value("ProductVersion"), "1.0.0");
+ QCOMPARE(core->value("Title"), "Unit Test Application Title");
+ QCOMPARE(core->value("RootDir"), QDir::rootPath());
+
+ core->deleteLater();
+ core->deleteLater();
+ }
+
+ void testOverwrittenCoreDataValues()
+ {
+ QHash<QString, QString> userValues;
+ userValues.insert("AllUsers", "true");
+ userValues.insert("ProductName", "Overwritten ProductName");
+ userValues.insert("ProductVersion", "2.0.0");
+ userValues.insert("Title", "Overwritten Title");
+ userValues.insert("RootDir", "Overwritten RootDir");
+
+ PackageManagerCore *core = new PackageManagerCore(BinaryContent::MagicInstallerMarker, QList<OperationBlob> (),
+ QString(), Protocol::DefaultAuthorizationKey, Protocol::Mode::Production,
+ userValues, true);
+ QCOMPARE(core->value("AllUsers"), "true");
+ QCOMPARE(core->value("ProductName"), "Overwritten ProductName");
+ QCOMPARE(core->value("ProductVersion"), "2.0.0");
+ QCOMPARE(core->value("Title"), "Overwritten Title");
+ QCOMPARE(core->value("RootDir"), "Overwritten RootDir");
+ core->deleteLater();
+ }
};