summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKatja Marttila <katja.marttila@qt.io>2016-11-10 12:04:17 +0200
committerKatja Marttila <katja.marttila@qt.io>2016-11-15 06:43:54 +0000
commitb5b0a8d2657f874f09f157246a592a270ea78d87 (patch)
tree457e2a0656eee2c40db6da53f63e3810f6a0a9c1 /src
parente7f93217182233383851a25ae21bd950d05b408a (diff)
Introduces new --silentUpdate command line option
With this feature one can update all installed components silently with maintenancetool by passing --silentUpdate parameter Change-Id: If31d37ce24e794775c2fe47b603259da133c9ee7 Task-number: QTIFW-906 Reviewed-by: Iikka Eklund <iikka.eklund@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/libs/installer/packagemanagercore.cpp68
-rw-r--r--src/libs/installer/packagemanagercore.h2
-rw-r--r--src/libs/installer/packagemanagergui.cpp46
-rw-r--r--src/libs/installer/packagemanagergui.h3
-rw-r--r--src/sdk/commandlineparser.cpp2
-rw-r--r--src/sdk/constants.h1
-rw-r--r--src/sdk/installerbase.cpp72
7 files changed, 115 insertions, 79 deletions
diff --git a/src/libs/installer/packagemanagercore.cpp b/src/libs/installer/packagemanagercore.cpp
index 971ca694d..e02bc0add 100644
--- a/src/libs/installer/packagemanagercore.cpp
+++ b/src/libs/installer/packagemanagercore.cpp
@@ -1632,6 +1632,52 @@ QList<Component*> PackageManagerCore::orderedComponentsToInstall() const
return d->installerCalculator()->orderedComponentsToInstall();
}
+bool PackageManagerCore::calculateComponents(QString *displayString)
+{
+ QString htmlOutput;
+ QString lastInstallReason;
+ if (!calculateComponentsToUninstall() ||
+ !calculateComponentsToInstall()) {
+ htmlOutput.append(QString::fromLatin1("<h2><font color=\"red\">%1</font></h2><ul>")
+ .arg(tr("Cannot resolve all dependencies.")));
+ //if we have a missing dependency or a recursion we can display it
+ if (!componentsToInstallError().isEmpty()) {
+ htmlOutput.append(QString::fromLatin1("<li> %1 </li>").arg(
+ componentsToInstallError()));
+ }
+ htmlOutput.append(QLatin1String("</ul>"));
+ if (displayString)
+ *displayString = htmlOutput;
+ return false;
+ }
+
+ // In case of updater mode we don't uninstall components.
+ if (!isUpdater()) {
+ QList<Component*> componentsToRemove = componentsToUninstall();
+ if (!componentsToRemove.isEmpty()) {
+ htmlOutput.append(QString::fromLatin1("<h3>%1</h3><ul>").arg(tr("Components about to "
+ "be removed.")));
+ foreach (Component *component, componentsToRemove)
+ htmlOutput.append(QString::fromLatin1("<li> %1 </li>").arg(component->name()));
+ htmlOutput.append(QLatin1String("</ul>"));
+ }
+ }
+
+ foreach (Component *component, orderedComponentsToInstall()) {
+ const QString reason = installReason(component);
+ if (lastInstallReason != reason) {
+ if (!lastInstallReason.isEmpty()) // means we had to close the previous list
+ htmlOutput.append(QLatin1String("</ul>"));
+ htmlOutput.append(QString::fromLatin1("<h3>%1</h3><ul>").arg(reason));
+ lastInstallReason = reason;
+ }
+ htmlOutput.append(QString::fromLatin1("<li> %1 </li>").arg(component->name()));
+ }
+ if (displayString)
+ *displayString = htmlOutput;
+ return true;
+}
+
/*!
Calculates a list of components to uninstall based on the current run mode.
The aboutCalculateComponentsToUninstall() signal is emitted
@@ -1755,6 +1801,28 @@ ComponentModel *PackageManagerCore::updaterComponentModel() const
return d->m_updaterModel;
}
+void PackageManagerCore::updateComponentsSilently()
+{
+ autoAcceptMessageBoxes();
+ fetchRemotePackagesTree();
+ //Mark all components to be installed
+ const QList<QInstaller::Component*> componentList = components(
+ ComponentType::Root | ComponentType::Descendants);
+
+ foreach (Component *comp, componentList) {
+ comp->setCheckState(Qt::Checked);
+ }
+ QString htmlOutput;
+ bool componentsOk = calculateComponents(&htmlOutput);
+ if (componentsOk) {
+ if (runPackageUpdater())
+ qDebug() << "Components updated successfully.";
+ }
+ else {
+ qDebug() << htmlOutput;
+ }
+}
+
/*!
Returns the settings for the package manager.
*/
diff --git a/src/libs/installer/packagemanagercore.h b/src/libs/installer/packagemanagercore.h
index 6b2a42ace..ee76b9203 100644
--- a/src/libs/installer/packagemanagercore.h
+++ b/src/libs/installer/packagemanagercore.h
@@ -208,6 +208,7 @@ public:
Q_INVOKABLE bool calculateComponentsToInstall() const;
QList<Component*> orderedComponentsToInstall() const;
+ bool calculateComponents(QString *displayString);
Q_INVOKABLE bool calculateComponentsToUninstall() const;
QList<Component*> componentsToUninstall() const;
@@ -219,6 +220,7 @@ public:
ComponentModel *defaultComponentModel() const;
ComponentModel *updaterComponentModel() const;
+ void updateComponentsSilently();
// convenience
Q_INVOKABLE bool isInstaller() const;
diff --git a/src/libs/installer/packagemanagergui.cpp b/src/libs/installer/packagemanagergui.cpp
index 18f8849f9..789a38b40 100644
--- a/src/libs/installer/packagemanagergui.cpp
+++ b/src/libs/installer/packagemanagergui.cpp
@@ -2773,7 +2773,7 @@ void ReadyForInstallationPage::entering()
}
QString htmlOutput;
- bool componentsOk = calculateComponents(&htmlOutput);
+ bool componentsOk = packageManagerCore()->calculateComponents(&htmlOutput);
m_taskDetailsBrowser->setHtml(htmlOutput);
m_taskDetailsBrowser->setVisible(!componentsOk || isVerbose());
setComplete(componentsOk);
@@ -2870,51 +2870,7 @@ void ReadyForInstallationPage::entering()
.arg(humanReadableSize(packageManagerCore()->requiredDiskSpace()))));
}
-bool ReadyForInstallationPage::calculateComponents(QString *displayString)
-{
- QString htmlOutput;
- QString lastInstallReason;
- if (!packageManagerCore()->calculateComponentsToUninstall() ||
- !packageManagerCore()->calculateComponentsToInstall()) {
- htmlOutput.append(QString::fromLatin1("<h2><font color=\"red\">%1</font></h2><ul>")
- .arg(tr("Cannot resolve all dependencies.")));
- //if we have a missing dependency or a recursion we can display it
- if (!packageManagerCore()->componentsToInstallError().isEmpty()) {
- htmlOutput.append(QString::fromLatin1("<li> %1 </li>").arg(
- packageManagerCore()->componentsToInstallError()));
- }
- htmlOutput.append(QLatin1String("</ul>"));
- if (displayString)
- *displayString = htmlOutput;
- return false;
- }
-
- // In case of updater mode we don't uninstall components.
- if (!packageManagerCore()->isUpdater()) {
- QList<Component*> componentsToRemove = packageManagerCore()->componentsToUninstall();
- if (!componentsToRemove.isEmpty()) {
- htmlOutput.append(QString::fromLatin1("<h3>%1</h3><ul>").arg(tr("Components about to "
- "be removed.")));
- foreach (Component *component, componentsToRemove)
- htmlOutput.append(QString::fromLatin1("<li> %1 </li>").arg(component->name()));
- htmlOutput.append(QLatin1String("</ul>"));
- }
- }
- foreach (Component *component, packageManagerCore()->orderedComponentsToInstall()) {
- const QString installReason = packageManagerCore()->installReason(component);
- if (lastInstallReason != installReason) {
- if (!lastInstallReason.isEmpty()) // means we had to close the previous list
- htmlOutput.append(QLatin1String("</ul>"));
- htmlOutput.append(QString::fromLatin1("<h3>%1</h3><ul>").arg(installReason));
- lastInstallReason = installReason;
- }
- htmlOutput.append(QString::fromLatin1("<li> %1 </li>").arg(component->name()));
- }
- if (displayString)
- *displayString = htmlOutput;
- return true;
-}
/*!
Called when end users leave the page and the PackageManagerGui:currentPageChanged()
diff --git a/src/libs/installer/packagemanagergui.h b/src/libs/installer/packagemanagergui.h
index 63d00b941..f7b7d9293 100644
--- a/src/libs/installer/packagemanagergui.h
+++ b/src/libs/installer/packagemanagergui.h
@@ -402,9 +402,6 @@ protected:
void leaving();
private:
- bool calculateComponents(QString *displayString);
-
-private:
QLabel *m_msgLabel;
QTextBrowser* m_taskDetailsBrowser;
};
diff --git a/src/sdk/commandlineparser.cpp b/src/sdk/commandlineparser.cpp
index 1dc7ca168..7efdc77c6 100644
--- a/src/sdk/commandlineparser.cpp
+++ b/src/sdk/commandlineparser.cpp
@@ -118,6 +118,8 @@ CommandLineParser::CommandLineParser()
QLatin1String("Installs QtBSP or 7z file. The QtBSP (Board Support Package) file must be a .7z "
"file which contains a valid repository."),
QLatin1String("URI,...")));
+ m_parser.addOption(QCommandLineOption(QLatin1String(CommandLineOptions::SilentUpdate),
+ QLatin1String("Updates all packages silently.")));
m_parser.addPositionalArgument(QLatin1String(CommandLineOptions::KeyValue),
QLatin1String("Key Value pair to be set."));
}
diff --git a/src/sdk/constants.h b/src/sdk/constants.h
index 763377a08..7c849135c 100644
--- a/src/sdk/constants.h
+++ b/src/sdk/constants.h
@@ -57,6 +57,7 @@ const char SetTmpRepository[] = "setTempRepository";
const char StartServer[] = "startserver";
const char StartClient[] = "startclient";
const char InstallCompressedRepository[] = "installCompressedRepository";
+const char SilentUpdate[] = "silentUpdate";
} // namespace CommandLineOptions
diff --git a/src/sdk/installerbase.cpp b/src/sdk/installerbase.cpp
index ec3a87a8d..e568ad3fa 100644
--- a/src/sdk/installerbase.cpp
+++ b/src/sdk/installerbase.cpp
@@ -282,45 +282,55 @@ int InstallerBase::run()
}
}
- //create the wizard GUI
- TabController controller(0);
- controller.setManager(m_core);
- controller.setManagerParams(params);
- controller.setControlScript(controlScript);
-
- if (m_core->isInstaller()) {
- controller.setGui(new InstallerGui(m_core));
+ //Do not show gui with --silentUpdate, instead update components silently
+ if (parser.isSet(QLatin1String(CommandLineOptions::SilentUpdate))) {
+ if (m_core->isInstaller())
+ throw QInstaller::Error(QLatin1String("Cannot start installer binary as updater."));
+ m_core->setUpdater();
+ m_core->updateComponentsSilently();
}
else {
- controller.setGui(new MaintenanceGui(m_core));
- //Start listening to setValue changes that newly installed components might have
- connect(m_core, &QInstaller::PackageManagerCore::valueChanged, &controller,
- &TabController::updateManagerParams);
- }
- QInstaller::PackageManagerCore::Status status =
- QInstaller::PackageManagerCore::Status(controller.init());
- if (status != QInstaller::PackageManagerCore::Success)
- return status;
+ //create the wizard GUI
+ TabController controller(0);
+ controller.setManager(m_core);
+ controller.setManagerParams(params);
+ controller.setControlScript(controlScript);
+ if (m_core->isInstaller()) {
+ controller.setGui(new InstallerGui(m_core));
+ }
+ else {
+ controller.setGui(new MaintenanceGui(m_core));
+ //Start listening to setValue changes that newly installed components might have
+ connect(m_core, &QInstaller::PackageManagerCore::valueChanged, &controller,
+ &TabController::updateManagerParams);
+ }
- const int result = QCoreApplication::instance()->exec();
- if (result != 0)
- return result;
+ QInstaller::PackageManagerCore::Status status =
+ QInstaller::PackageManagerCore::Status(controller.init());
+ if (status != QInstaller::PackageManagerCore::Success)
+ return status;
- if (m_core->finishedWithSuccess())
- return QInstaller::PackageManagerCore::Success;
+ const int result = QCoreApplication::instance()->exec();
+ if (result != 0)
+ return result;
- status = m_core->status();
- switch (status) {
- case QInstaller::PackageManagerCore::Success:
- return status;
+ if (m_core->finishedWithSuccess())
+ return QInstaller::PackageManagerCore::Success;
- case QInstaller::PackageManagerCore::Canceled:
- return status;
+ status = m_core->status();
+ switch (status) {
+ case QInstaller::PackageManagerCore::Success:
+ return status;
- default:
- break;
+ case QInstaller::PackageManagerCore::Canceled:
+ return status;
+
+ default:
+ break;
+ }
+ return QInstaller::PackageManagerCore::Failure;
}
- return QInstaller::PackageManagerCore::Failure;
+ return QInstaller::PackageManagerCore::Success;
}