diff options
-rw-r--r-- | src/libs/installer/packagemanagercore.cpp | 7 | ||||
-rw-r--r-- | src/libs/installer/packagemanagercore.h | 4 | ||||
-rw-r--r-- | src/libs/installer/packagemanagercore_p.cpp | 1 | ||||
-rw-r--r-- | src/libs/installer/packagemanagercoredata.cpp | 7 | ||||
-rw-r--r-- | src/sdk/sdkapp.h | 36 | ||||
-rw-r--r-- | tests/auto/installer/packagemanagercore/installer-config/config.xml | 8 | ||||
-rw-r--r-- | tests/auto/installer/packagemanagercore/packagemanagercore.pro | 2 | ||||
-rw-r--r-- | tests/auto/installer/packagemanagercore/settings.qrc | 6 | ||||
-rw-r--r-- | tests/auto/installer/packagemanagercore/tst_packagemanagercore.cpp | 39 |
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> ¶ms, 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> ¶ms = 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> ¶ms #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(); + } }; |