summaryrefslogtreecommitdiffstats
path: root/src/libs
diff options
context:
space:
mode:
authorArttu Tarkiainen <arttu.tarkiainen@qt.io>2020-02-24 11:49:17 +0200
committerArttu Tarkiainen <arttu.tarkiainen@qt.io>2020-03-02 08:11:55 +0000
commit76e113b90afe5555f39b2aa37edc8137d661a1ac (patch)
treee7f4cd4ecd684b0992d9f29fe160258e156bf9e3 /src/libs
parent187239ddbc37b7d98a825c5fff44e29c8561270d (diff)
Add command line option to start the installer binary as uninstaller
Add option "--uninstaller" to start the installer binary explicitly as uninstaller. This complements options "--updater" and "--manage-packages". Add convenience functions for setting and checking if the magic binary marker has been set by the user. Task-number: QTIFW-1639 Change-Id: Ie40ba9c56e09be079e309bca985b19a8a7bef7ef Reviewed-by: Iikka Eklund <iikka.eklund@qt.io> Reviewed-by: Katja Marttila <katja.marttila@qt.io>
Diffstat (limited to 'src/libs')
-rw-r--r--src/libs/installer/constants.h1
-rw-r--r--src/libs/installer/packagemanagercore.cpp21
-rw-r--r--src/libs/installer/packagemanagercore.h3
-rw-r--r--src/libs/installer/packagemanagercore_p.cpp2
-rw-r--r--src/libs/installer/packagemanagercore_p.h1
-rw-r--r--src/libs/installer/packagemanagergui.cpp2
6 files changed, 29 insertions, 1 deletions
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.