diff options
-rw-r--r-- | doc/scripting-api/packagemanagercore.qdoc | 6 | ||||
-rw-r--r-- | src/libs/installer/constants.h | 1 | ||||
-rw-r--r-- | src/libs/installer/packagemanagercore.cpp | 21 | ||||
-rw-r--r-- | src/libs/installer/packagemanagercore.h | 3 | ||||
-rw-r--r-- | src/libs/installer/packagemanagercore_p.cpp | 2 | ||||
-rw-r--r-- | src/libs/installer/packagemanagercore_p.h | 1 | ||||
-rw-r--r-- | src/libs/installer/packagemanagergui.cpp | 2 | ||||
-rw-r--r-- | src/sdk/commandlineparser.cpp | 3 | ||||
-rw-r--r-- | src/sdk/installerbase.cpp | 10 | ||||
-rw-r--r-- | src/sdk/main.cpp | 2 |
10 files changed, 48 insertions, 3 deletions
diff --git a/doc/scripting-api/packagemanagercore.qdoc b/doc/scripting-api/packagemanagercore.qdoc index d09234ff8..e8191d99e 100644 --- a/doc/scripting-api/packagemanagercore.qdoc +++ b/doc/scripting-api/packagemanagercore.qdoc @@ -746,6 +746,12 @@ */ /*! + \qmlmethod boolean installer::isUserSetBinaryMarker() + + Returns \c true if the magic binary marker has been set by user. +*/ + +/*! \qmlmethod boolean installer::runInstaller() Runs the installer. Returns \c true on success, \c false otherwise. diff --git a/src/libs/installer/constants.h b/src/libs/installer/constants.h index cafb10175..7fd2a0eef 100644 --- a/src/libs/installer/constants.h +++ b/src/libs/installer/constants.h @@ -111,6 +111,7 @@ const char Script[] = "script"; const char CheckUpdates[] = "checkupdates"; const char Updater[] = "updater"; const char ManagePackages[] = "manage-packages"; +const char Uninstaller[] = "uninstaller"; const char NoForceInstallation[] = "no-force-installations"; const char ShowVirtualComponents[] = "show-virtual-components"; const char LoggingRules[] = "logging-rules"; diff --git a/src/libs/installer/packagemanagercore.cpp b/src/libs/installer/packagemanagercore.cpp index 94bb4cd78..5cf251ec3 100644 --- a/src/libs/installer/packagemanagercore.cpp +++ b/src/libs/installer/packagemanagercore.cpp @@ -2828,6 +2828,27 @@ bool PackageManagerCore::isPackageManager() const } /*! + Sets the installer magic binary marker based on \a magicMarker and + userSetBinaryMarker to \c true. +*/ +void PackageManagerCore::setUserSetBinaryMarker(qint64 magicMarker) +{ + d->m_magicBinaryMarker = magicMarker; + d->m_userSetBinaryMarker = true; +} + +/*! + Returns \c true if the magic binary marker has been set by user, + for example from a command line argument. + + \sa {installer::isUserSetBinaryMarker}{installer.isUserSetBinaryMarker} +*/ +bool PackageManagerCore::isUserSetBinaryMarker() const +{ + return d->m_userSetBinaryMarker; +} + +/*! Set to use command line instance based on \a commandLineInstance. */ void PackageManagerCore::setCommandLineInstance(bool commandLineInstance) diff --git a/src/libs/installer/packagemanagercore.h b/src/libs/installer/packagemanagercore.h index 5e1c40ca5..9d4cceaea 100644 --- a/src/libs/installer/packagemanagercore.h +++ b/src/libs/installer/packagemanagercore.h @@ -235,6 +235,9 @@ public: Q_INVOKABLE void setPackageManager(); Q_INVOKABLE bool isPackageManager() const; + void setUserSetBinaryMarker(qint64 magicMarker); + Q_INVOKABLE bool isUserSetBinaryMarker() const; + void setCommandLineInstance(bool commandLineInstance); Q_INVOKABLE bool isCommandLineInstance() const; diff --git a/src/libs/installer/packagemanagercore_p.cpp b/src/libs/installer/packagemanagercore_p.cpp index 1e18daf66..b7c03c21a 100644 --- a/src/libs/installer/packagemanagercore_p.cpp +++ b/src/libs/installer/packagemanagercore_p.cpp @@ -217,6 +217,7 @@ PackageManagerCorePrivate::PackageManagerCorePrivate(PackageManagerCore *core) , m_remoteFileEngineHandler(nullptr) , m_foundEssentialUpdate(false) , m_commandLineInstance(false) + , m_userSetBinaryMarker(false) { } @@ -249,6 +250,7 @@ PackageManagerCorePrivate::PackageManagerCorePrivate(PackageManagerCore *core, q , m_remoteFileEngineHandler(new RemoteFileEngineHandler) , m_foundEssentialUpdate(false) , m_commandLineInstance(false) + , m_userSetBinaryMarker(false) { foreach (const OperationBlob &operation, performedOperations) { QScopedPointer<QInstaller::Operation> op(KDUpdater::UpdateOperationFactory::instance() diff --git a/src/libs/installer/packagemanagercore_p.h b/src/libs/installer/packagemanagercore_p.h index c9dfde242..961822994 100644 --- a/src/libs/installer/packagemanagercore_p.h +++ b/src/libs/installer/packagemanagercore_p.h @@ -187,6 +187,7 @@ public: bool m_testChecksum; bool m_launchedAsRoot; bool m_commandLineInstance; + bool m_userSetBinaryMarker; bool m_completeUninstall; bool m_needToWriteMaintenanceTool; PackageManagerCoreData m_data; diff --git a/src/libs/installer/packagemanagergui.cpp b/src/libs/installer/packagemanagergui.cpp index 797b5bc7d..05f61ae18 100644 --- a/src/libs/installer/packagemanagergui.cpp +++ b/src/libs/installer/packagemanagergui.cpp @@ -1626,7 +1626,7 @@ void IntroductionPage::initializePage() // If we are running maintenance tool and the default uninstaller // marker is not overridden, set the default checked radio button // based on if we have valid repositories available. - if (validRepositoriesAvailable()) { + if (!core->isUserSetBinaryMarker() && validRepositoriesAvailable()) { m_packageManager->setChecked(true); } else { // No repositories available, default to complete uninstallation. diff --git a/src/sdk/commandlineparser.cpp b/src/sdk/commandlineparser.cpp index f59a6e69f..f39650872 100644 --- a/src/sdk/commandlineparser.cpp +++ b/src/sdk/commandlineparser.cpp @@ -68,6 +68,9 @@ CommandLineParser::CommandLineParser() m_parser.addOption(QCommandLineOption(QLatin1String(CommandLineOptions::ManagePackages), QLatin1String("Start application in package manager mode."))); + m_parser.addOption(QCommandLineOption(QLatin1String(CommandLineOptions::Uninstaller), + QLatin1String("Start application in uninstaller mode."))); + m_parser.addOption(QCommandLineOption(QLatin1String(CommandLineOptions::NoForceInstallation), QLatin1String("Allow deselecting components that are marked as forced."))); diff --git a/src/sdk/installerbase.cpp b/src/sdk/installerbase.cpp index 091053e30..e1b553b83 100644 --- a/src/sdk/installerbase.cpp +++ b/src/sdk/installerbase.cpp @@ -227,13 +227,19 @@ int InstallerBase::run() if (parser.isSet(QLatin1String(CommandLineOptions::Updater))) { if (m_core->isInstaller()) throw QInstaller::Error(QLatin1String("Cannot start installer binary as updater.")); - m_core->setUpdater(); + m_core->setUserSetBinaryMarker(QInstaller::BinaryContent::MagicUpdaterMarker); } if (parser.isSet(QLatin1String(CommandLineOptions::ManagePackages))) { if (m_core->isInstaller()) throw QInstaller::Error(QLatin1String("Cannot start installer binary as package manager.")); - m_core->setPackageManager(); + m_core->setUserSetBinaryMarker(QInstaller::BinaryContent::MagicPackageManagerMarker); + } + + if (parser.isSet(QLatin1String(CommandLineOptions::Uninstaller))) { + if (m_core->isInstaller()) + throw QInstaller::Error(QLatin1String("Cannot start installer binary as uninstaller.")); + m_core->setUserSetBinaryMarker(QInstaller::BinaryContent::MagicUninstallerMarker); } if (parser.isSet(QLatin1String(CommandLineOptions::AddRepository))) { diff --git a/src/sdk/main.cpp b/src/sdk/main.cpp index 5c8d96a1d..c2b5c9f01 100644 --- a/src/sdk/main.cpp +++ b/src/sdk/main.cpp @@ -89,6 +89,8 @@ int main(int argc, char *argv[]) mutually << QLatin1String(CommandLineOptions::Updater); if (parser.isSet(QLatin1String(CommandLineOptions::ManagePackages))) mutually << QLatin1String(CommandLineOptions::ManagePackages); + if (parser.isSet(QLatin1String(CommandLineOptions::Uninstaller))) + mutually << QLatin1String(CommandLineOptions::Uninstaller); const bool help = parser.isSet(QLatin1String(CommandLineOptions::HelpShort)) || parser.isSet(QLatin1String(CommandLineOptions::HelpLong)); |