summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--doc/scripting-api/packagemanagercore.qdoc6
-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
-rw-r--r--src/sdk/commandlineparser.cpp3
-rw-r--r--src/sdk/installerbase.cpp10
-rw-r--r--src/sdk/main.cpp2
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));