diff options
author | Katja Marttila <katja.marttila@qt.io> | 2016-11-10 12:04:17 +0200 |
---|---|---|
committer | Katja Marttila <katja.marttila@qt.io> | 2016-11-15 06:43:54 +0000 |
commit | b5b0a8d2657f874f09f157246a592a270ea78d87 (patch) | |
tree | 457e2a0656eee2c40db6da53f63e3810f6a0a9c1 /src | |
parent | e7f93217182233383851a25ae21bd950d05b408a (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.cpp | 68 | ||||
-rw-r--r-- | src/libs/installer/packagemanagercore.h | 2 | ||||
-rw-r--r-- | src/libs/installer/packagemanagergui.cpp | 46 | ||||
-rw-r--r-- | src/libs/installer/packagemanagergui.h | 3 | ||||
-rw-r--r-- | src/sdk/commandlineparser.cpp | 2 | ||||
-rw-r--r-- | src/sdk/constants.h | 1 | ||||
-rw-r--r-- | src/sdk/installerbase.cpp | 72 |
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; } |