diff options
author | Katja Marttila <katja.marttila@qt.io> | 2018-12-18 07:44:20 +0000 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2018-12-18 07:44:20 +0000 |
commit | 72d55882da62de7f10b8cbca19281824fff9ebe4 (patch) | |
tree | 4817a8e7e9766e877cb54be216359c0b9509d056 | |
parent | 9215e91d7a0701d63e28e04d5f0984bfebd81dc0 (diff) | |
parent | b4772841a90f8d9cf48416552703ba2b6a7c577b (diff) |
Merge "Merge remote-tracking branch 'origin/3.0' into master"
30 files changed, 138 insertions, 62 deletions
@@ -1,3 +1,15 @@ +3.0.6 +- Remove 'Your install seems to be corrupted' messagebox (QTIFW-1003) +- Register virtual component for uninstall (QTIFW-1102) +- Optimize ExctractArchiveOperation::fileFinished() (QTBUG-51337) +- Do not reset core data values in restart (QTIFW-504) +- Fix maintenancetool writing in Windows (QTIFW-1096) +- Fix environment variables for XDG paths not being recognized (QTIFW-1043) +- Update german translation file (QTIFW-1084) +- Fix admin query retry (QTIFW-988, QTIFW-1173) +- Fix install fail if there is no metadata (QTIFW-1150) +- Reset meta information download result (QTIFW-1137) + 3.0.5 - Decrease metadata dowload amount (QTIFW-975) - Print component warnings only in verbose mode (QTIFW-975) diff --git a/doc/installerfw-online.qdocconf b/doc/installerfw-online.qdocconf index a13ad9df2..b93b52ef2 100644 --- a/doc/installerfw-online.qdocconf +++ b/doc/installerfw-online.qdocconf @@ -4,7 +4,7 @@ include(config/ifw.qdocconf) HTML.footer = \ " </div>\n" \ " <p class=\"copy-notice\">\n" \ - " <acronym title=\"Copyright\">©</acronym> 2017 The Qt Company Ltd.\n" \ + " <acronym title=\"Copyright\">©</acronym> 2018 The Qt Company Ltd.\n" \ " Documentation contributions included herein are the copyrights of\n" \ " their respective owners. " \ " The documentation provided herein is licensed under the terms of the" \ diff --git a/examples/registervirtualcomponentforuninstall/README b/examples/registervirtualcomponentforuninstall/README new file mode 100644 index 000000000..930efa5ed --- /dev/null +++ b/examples/registervirtualcomponentforuninstall/README @@ -0,0 +1,6 @@ +Shows how to register virtual component to uninstall in component script. + +Generate installer with + +binarycreator --offline-only -c config/config.xml -p packages installer + diff --git a/examples/registervirtualcomponentforuninstall/config/config.xml b/examples/registervirtualcomponentforuninstall/config/config.xml new file mode 100644 index 000000000..48b5c7438 --- /dev/null +++ b/examples/registervirtualcomponentforuninstall/config/config.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Installer> + <Name>Register Component to Uninstall Example</Name> + <Version>1.0.0</Version> + <Title>Register Component to Uninstall Example</Title> + <Publisher>Qt-Project</Publisher> + <StartMenuDir>Qt IFW Examples</StartMenuDir> + <TargetDir>@HomeDir@/IfwExamples/registercomponenttouninstall</TargetDir> + <ControlScript>controller.qs</ControlScript> +</Installer> diff --git a/examples/registervirtualcomponentforuninstall/config/controller.qs b/examples/registervirtualcomponentforuninstall/config/controller.qs new file mode 100644 index 000000000..ba1e74651 --- /dev/null +++ b/examples/registervirtualcomponentforuninstall/config/controller.qs @@ -0,0 +1,9 @@ +function Controller() { + +} + +Controller.prototype.ComponentSelectionPageCallback = function() { + + var page = gui.pageWidgetByObjectName("ComponentSelectionPage"); + page.addVirtualComponentToUninstall("component") +} diff --git a/examples/registervirtualcomponentforuninstall/packages/component/data/selectedcomponent b/examples/registervirtualcomponentforuninstall/packages/component/data/selectedcomponent new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/examples/registervirtualcomponentforuninstall/packages/component/data/selectedcomponent diff --git a/examples/registervirtualcomponentforuninstall/packages/component/meta/package.xml b/examples/registervirtualcomponentforuninstall/packages/component/meta/package.xml new file mode 100644 index 000000000..9e02c2885 --- /dev/null +++ b/examples/registervirtualcomponentforuninstall/packages/component/meta/package.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Package> + <DisplayName>Component selected from script</DisplayName> + <Description>This component is selected to uninstall in script</Description> + <Version>1.0.0-1</Version> + <ReleaseDate>2018-02-02</ReleaseDate> + <Virtual>true</Virtual> +</Package> diff --git a/examples/registervirtualcomponentforuninstall/packages/org.qtproject.ifw.example.registercomponent/data/registercomponent b/examples/registervirtualcomponentforuninstall/packages/org.qtproject.ifw.example.registercomponent/data/registercomponent new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/examples/registervirtualcomponentforuninstall/packages/org.qtproject.ifw.example.registercomponent/data/registercomponent diff --git a/examples/registervirtualcomponentforuninstall/packages/org.qtproject.ifw.example.registercomponent/meta/package.xml b/examples/registervirtualcomponentforuninstall/packages/org.qtproject.ifw.example.registercomponent/meta/package.xml new file mode 100644 index 000000000..431ff2441 --- /dev/null +++ b/examples/registervirtualcomponentforuninstall/packages/org.qtproject.ifw.example.registercomponent/meta/package.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Package> + <DisplayName>Registers component for install</DisplayName> + <Description>Register a component for installation</Description> + <Version>1.0.0-1</Version> + <ReleaseDate>2013-01-01</ReleaseDate> + <Default>true</Default> + <Dependencies>component</Dependencies> +</Package> diff --git a/examples/registervirtualcomponentforuninstall/registercomponentforinstall.pro b/examples/registervirtualcomponentforuninstall/registercomponentforinstall.pro new file mode 100644 index 000000000..415df49d5 --- /dev/null +++ b/examples/registervirtualcomponentforuninstall/registercomponentforinstall.pro @@ -0,0 +1,13 @@ +TEMPLATE = aux + +INSTALLER = installer + +INPUT = $$PWD/config/config.xml $$PWD/packages +example.input = INPUT +example.output = $$INSTALLER +example.commands = ../../bin/binarycreator -c $$PWD/config/config.xml -p $$PWD/packages ${QMAKE_FILE_OUT} +example.CONFIG += target_predeps no_link combine + +QMAKE_EXTRA_COMPILERS += example + +OTHER_FILES = README diff --git a/src/libs/installer/extractarchiveoperation.cpp b/src/libs/installer/extractarchiveoperation.cpp index c41f029e3..12608a0d1 100644 --- a/src/libs/installer/extractarchiveoperation.cpp +++ b/src/libs/installer/extractarchiveoperation.cpp @@ -30,6 +30,7 @@ #include <QEventLoop> #include <QThreadPool> +#include <QFileInfo> namespace QInstaller { @@ -67,6 +68,11 @@ bool ExtractArchiveOperation::performOperation() connect(runnable, &Runnable::finished, &receiver, &Receiver::runnableFinished, Qt::QueuedConnection); + m_files.clear(); + + QFileInfo fileInfo(archivePath); + emit outputTextChanged(tr("Extracting \"%1\"").arg(fileInfo.fileName())); + QEventLoop loop; connect(&receiver, &Receiver::finished, &loop, &QEventLoop::quit); if (QThreadPool::globalInstance()->tryStart(runnable)) { @@ -77,6 +83,8 @@ bool ExtractArchiveOperation::performOperation() receiver.runnableFinished(true, QString()); } + setValue(QLatin1String("files"), m_files); + // TODO: Use backups for rollback, too? Doesn't work for uninstallation though. // delete all backups we can delete right now, remember the rest @@ -121,10 +129,7 @@ bool ExtractArchiveOperation::testOperation() */ void ExtractArchiveOperation::fileFinished(const QString &filename) { - QStringList files = value(QLatin1String("files")).toStringList(); - files.prepend(filename); - setValue(QLatin1String("files"), files); - emit outputTextChanged(QDir::toNativeSeparators(filename)); + m_files.prepend(filename); } } // namespace QInstaller diff --git a/src/libs/installer/extractarchiveoperation.h b/src/libs/installer/extractarchiveoperation.h index 45c67a9cb..3e75a9bb9 100644 --- a/src/libs/installer/extractarchiveoperation.h +++ b/src/libs/installer/extractarchiveoperation.h @@ -56,6 +56,7 @@ private Q_SLOTS: void fileFinished(const QString &progress); private: + QStringList m_files; class Callback; class Runnable; class Receiver; diff --git a/src/libs/installer/packagemanagercore.cpp b/src/libs/installer/packagemanagercore.cpp index 0e20ff8e9..0c814288e 100644 --- a/src/libs/installer/packagemanagercore.cpp +++ b/src/libs/installer/packagemanagercore.cpp @@ -433,6 +433,7 @@ void PackageManagerCore::writeMaintenanceTool() dropAdminRights(); d->m_needToWriteMaintenanceTool = false; } catch (const Error &error) { + qCritical() << "Error writing Maintenance Tool: " << error.message(); MessageBoxHandler::critical(MessageBoxHandler::currentBestSuitParent(), QLatin1String("WriteError"), tr("Error writing Maintenance Tool"), error.message(), QMessageBox::Ok, QMessageBox::Ok); @@ -449,17 +450,16 @@ void PackageManagerCore::writeMaintenanceConfigFiles() } /*! - Resets the class to its initial state and applies the values of the - parameters specified by \a params. + Resets the class to its initial state. */ -void PackageManagerCore::reset(const QHash<QString, QString> ¶ms) +void PackageManagerCore::reset() { d->m_completeUninstall = false; d->m_needsHardRestart = false; d->m_status = PackageManagerCore::Unfinished; d->m_installerBaseBinaryUnreplaced.clear(); - - d->initialize(params); + d->m_coreCheckedHash.clear(); + d->m_componentsToInstallCalculated = false; } /*! @@ -868,14 +868,9 @@ PackageManagerCore::PackageManagerCore(qint64 magicmaker, const QList<OperationB if (!packagesWithoutOperation.isEmpty() || !orphanedOperations.isEmpty()) { qCritical() << "Operations missing for installed packages" << packagesWithoutOperation.toList(); qCritical() << "Orphaned operations" << orphanedOperations.toList(); - MessageBoxHandler::critical( - MessageBoxHandler::currentBestSuitParent(), - QLatin1String("Corrupt_Installation_Error"), - QCoreApplication::translate("QInstaller", "Corrupt installation"), - QCoreApplication::translate("QInstaller", - "Your installation seems to be corrupted. " - "Please consider re-installing from scratch." - )); + qCritical() << "Your installation seems to be corrupted. Please consider re-installing from scratch, " + "remove the packages from components.xml which operations are missing, " + "or reinstall the packages."; } else { qDebug() << "Operations sanity check succeeded."; } diff --git a/src/libs/installer/packagemanagercore.h b/src/libs/installer/packagemanagercore.h index c05374ce9..9f8d1a304 100644 --- a/src/libs/installer/packagemanagercore.h +++ b/src/libs/installer/packagemanagercore.h @@ -133,7 +133,7 @@ public: bool fetchCompressedPackagesTree(); bool run(); - void reset(const QHash<QString, QString> ¶ms); + void reset(); void setGuiObject(QObject *gui); QObject *guiObject() const; diff --git a/src/libs/installer/packagemanagercore_p.cpp b/src/libs/installer/packagemanagercore_p.cpp index 3869711af..ccb80306e 100644 --- a/src/libs/installer/packagemanagercore_p.cpp +++ b/src/libs/installer/packagemanagercore_p.cpp @@ -1854,9 +1854,11 @@ void PackageManagerCorePrivate::installComponent(Component *component, double pr const int opCount = operations.count(); // show only components which do something, MinimumProgress is only for progress calculation safeness + bool showDetailsLog = false; if (opCount > 1 || (opCount == 1 && operations.at(0)->name() != QLatin1String("MinimumProgress"))) { - ProgressCoordinator::instance()->emitLabelAndDetailTextChanged(tr("\nInstalling component %1") - .arg(component->displayName())); + ProgressCoordinator::instance()->emitLabelAndDetailTextChanged(tr("\nInstalling component %1...") + .arg(component->displayName())); + showDetailsLog = true; } foreach (Operation *operation, operations) { @@ -1941,6 +1943,9 @@ void PackageManagerCorePrivate::installComponent(Component *component, double pr component->setInstalled(); component->markAsPerformedInstallation(); + + if (showDetailsLog) + ProgressCoordinator::instance()->emitDetailTextChanged(tr("Done")); } // -- private diff --git a/src/libs/installer/packagemanagergui.cpp b/src/libs/installer/packagemanagergui.cpp index 39235317d..0e2577850 100644 --- a/src/libs/installer/packagemanagergui.cpp +++ b/src/libs/installer/packagemanagergui.cpp @@ -1988,6 +1988,21 @@ void ComponentSelectionPage::allowCompressedRepositoryInstall() d->allowCompressedRepositoryInstall(); } +bool ComponentSelectionPage::addVirtualComponentToUninstall(const QString &name) +{ + PackageManagerCore *core = packageManagerCore(); + const QList<Component *> allComponents = core->components(PackageManagerCore::ComponentType::All); + Component *component = PackageManagerCore::componentByName( + name, allComponents); + if (component && component->isInstalled() && component->isVirtual()) { + component->setCheckState(Qt::Unchecked); + core->componentsToInstallNeedsRecalculation(); + qDebug() << "Virtual component " << name << " was selected for uninstall by script."; + return true; + } + return false; +} + void ComponentSelectionPage::setModified(bool modified) { setComplete(modified); diff --git a/src/libs/installer/packagemanagergui.h b/src/libs/installer/packagemanagergui.h index 48f5089c0..b233086c3 100644 --- a/src/libs/installer/packagemanagergui.h +++ b/src/libs/installer/packagemanagergui.h @@ -312,6 +312,7 @@ public: Q_INVOKABLE void selectComponent(const QString &id); Q_INVOKABLE void deselectComponent(const QString &id); Q_INVOKABLE void allowCompressedRepositoryInstall(); + Q_INVOKABLE bool addVirtualComponentToUninstall(const QString &name); protected: void entering(); diff --git a/src/sdk/installerbase.cpp b/src/sdk/installerbase.cpp index 5d5028be1..872600f19 100644 --- a/src/sdk/installerbase.cpp +++ b/src/sdk/installerbase.cpp @@ -243,13 +243,11 @@ int InstallerBase::run() .isSet(QLatin1String(CommandLineOptions::CreateLocalRepository)) || m_core->settings().createLocalRepository()); - QHash<QString, QString> params; const QStringList positionalArguments = parser.positionalArguments(); foreach (const QString &argument, positionalArguments) { if (argument.contains(QLatin1Char('='))) { const QString name = argument.section(QLatin1Char('='), 0, 0); const QString value = argument.section(QLatin1Char('='), 1, 1); - params.insert(name, value); m_core->setValue(name, value); } } @@ -308,17 +306,11 @@ int InstallerBase::run() //create the wizard GUI TabController controller(0); controller.setManager(m_core); - controller.setManagerParams(params); controller.setControlScript(controlScript); - if (m_core->isInstaller()) { + if (m_core->isInstaller()) controller.setGui(new InstallerGui(m_core)); - } - else { + 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()); diff --git a/src/sdk/tabcontroller.cpp b/src/sdk/tabcontroller.cpp index 760e7dc38..dc4549d50 100644 --- a/src/sdk/tabcontroller.cpp +++ b/src/sdk/tabcontroller.cpp @@ -102,11 +102,6 @@ void TabController::setManager(QInstaller::PackageManagerCore *core) d->m_core = core; } -void TabController::setManagerParams(const QHash<QString, QString> ¶ms) -{ - d->m_params = params; -} - // -- public slots int TabController::init() @@ -143,8 +138,8 @@ int TabController::init() void TabController::restartWizard() { + d->m_core->reset(); if (d->m_networkSettingsChanged) { - d->m_core->reset(d->m_params); d->m_networkSettingsChanged = false; d->m_core->settings().setFtpProxy(d->m_settings.ftpProxy()); @@ -199,8 +194,3 @@ void TabController::onNetworkSettingsChanged(const QInstaller::Settings &setting d->m_settings = settings; d->m_networkSettingsChanged = true; } - -void TabController::updateManagerParams(const QString &key, const QString &value) -{ - d->m_params.insert(key, value); -} diff --git a/src/sdk/tabcontroller.h b/src/sdk/tabcontroller.h index a314cb15b..5fc63aff3 100644 --- a/src/sdk/tabcontroller.h +++ b/src/sdk/tabcontroller.h @@ -51,13 +51,11 @@ public: void setGui(QInstaller::PackageManagerGui *gui); void setManager(QInstaller::PackageManagerCore *core); - void setManagerParams(const QHash<QString, QString> ¶ms); void setControlScript(const QString &script); public Q_SLOTS: int init(); - void updateManagerParams(const QString &key, const QString &value); private Q_SLOTS: void restartWizard(); diff --git a/src/sdk/translations/ifw_da.ts b/src/sdk/translations/ifw_da.ts index b78bb380c..57540b788 100644 --- a/src/sdk/translations/ifw_da.ts +++ b/src/sdk/translations/ifw_da.ts @@ -1715,9 +1715,9 @@ Opdatering afbrudt!</translation> </message> <message> <source> -Installing component %1</source> +Installing component %1...</source> <translation> -Installerer komponenten %1</translation> +Installerer komponenten %1...</translation> </message> <message> <source>Installer Error</source> diff --git a/src/sdk/translations/ifw_de.ts b/src/sdk/translations/ifw_de.ts index 1b0fdf8d5..347b17cec 100644 --- a/src/sdk/translations/ifw_de.ts +++ b/src/sdk/translations/ifw_de.ts @@ -1739,9 +1739,9 @@ Aktualisierung abgebrochen!</translation> </message> <message> <source> -Installing component %1</source> +Installing component %1...</source> <translation> -Komponente %1 wird installiert</translation> +Komponente %1 wird installiert...</translation> </message> <message> <source>Installer Error</source> diff --git a/src/sdk/translations/ifw_es.ts b/src/sdk/translations/ifw_es.ts index 1ce64b86e..5ad785ade 100644 --- a/src/sdk/translations/ifw_es.ts +++ b/src/sdk/translations/ifw_es.ts @@ -1422,9 +1422,9 @@ Uninstallation aborted!</source> </message> <message> <source> -Installing component %1</source> +Installing component %1...</source> <translation> -Instalando componente %1</translation> +Instalando componente %1...</translation> </message> <message> <source>Installer Error</source> diff --git a/src/sdk/translations/ifw_fr.ts b/src/sdk/translations/ifw_fr.ts index 905f090cf..c79aa1308 100644 --- a/src/sdk/translations/ifw_fr.ts +++ b/src/sdk/translations/ifw_fr.ts @@ -1892,9 +1892,9 @@ Mise à jour annulée !</translation> </message> <message> <source> -Installing component %1</source> +Installing component %1...</source> <translation> -Installation du composant %1</translation> +Installation du composant %1...</translation> </message> <message> <source>Installer Error</source> diff --git a/src/sdk/translations/ifw_it.ts b/src/sdk/translations/ifw_it.ts index 514013f57..7deb5f548 100644 --- a/src/sdk/translations/ifw_it.ts +++ b/src/sdk/translations/ifw_it.ts @@ -1885,9 +1885,9 @@ Update aborted!</source> </message> <message> <source> -Installing component %1</source> +Installing component %1...</source> <translation> -Installazione componenti %1</translation> +Installazione componenti %1...</translation> </message> <message> <source>Installer Error</source> diff --git a/src/sdk/translations/ifw_ja.ts b/src/sdk/translations/ifw_ja.ts index 321e445c2..f8c04e97e 100644 --- a/src/sdk/translations/ifw_ja.ts +++ b/src/sdk/translations/ifw_ja.ts @@ -1902,9 +1902,9 @@ Update aborted!</source> </message> <message> <source> -Installing component %1</source> +Installing component %1...</source> <translation> -コンポーネントのインストール中: %1</translation> +コンポーネントのインストール中: %1...</translation> </message> <message> <source>Installer Error</source> diff --git a/src/sdk/translations/ifw_pl.ts b/src/sdk/translations/ifw_pl.ts index 98af6f62d..64cd6ac7f 100644 --- a/src/sdk/translations/ifw_pl.ts +++ b/src/sdk/translations/ifw_pl.ts @@ -1895,9 +1895,9 @@ Przerwano uaktualnianie.</translation> </message> <message> <source> -Installing component %1</source> +Installing component %1...</source> <translation> -Instalacja komponentu %1</translation> +Instalacja komponentu %1...</translation> </message> <message> <source>Installer Error</source> diff --git a/src/sdk/translations/ifw_ru.ts b/src/sdk/translations/ifw_ru.ts index 2783f3eef..f22b82dca 100644 --- a/src/sdk/translations/ifw_ru.ts +++ b/src/sdk/translations/ifw_ru.ts @@ -1708,9 +1708,9 @@ Update aborted!</source> </message> <message> <source> -Installing component %1</source> +Installing component %1...</source> <translation> -Установка компонента %1</translation> +Установка компонента %1...</translation> </message> <message> <source>Installer Error</source> diff --git a/src/sdk/translations/ifw_zh_CN.ts b/src/sdk/translations/ifw_zh_CN.ts index a826448d9..c2b55f9ec 100644 --- a/src/sdk/translations/ifw_zh_CN.ts +++ b/src/sdk/translations/ifw_zh_CN.ts @@ -1834,9 +1834,9 @@ Update aborted!</source> </message> <message> <source> -Installing component %1</source> +Installing component %1...</source> <translation> -正在安装组件 %1</translation> +正在安装组件 %1...</translation> </message> <message> <source>Installer Error</source> diff --git a/tools/binarycreator/binarycreator.cpp b/tools/binarycreator/binarycreator.cpp index 6492b59a1..3ce7db3f2 100644 --- a/tools/binarycreator/binarycreator.cpp +++ b/tools/binarycreator/binarycreator.cpp @@ -754,6 +754,13 @@ static int printErrorAndUsageAndExit(const QString &err) int main(int argc, char **argv) { +// increase maximum numbers of file descriptors +#if defined (Q_OS_MACOS) + struct rlimit rl; + getrlimit(RLIMIT_NOFILE, &rl); + rl.rlim_cur = qMin(static_cast<rlim_t>(OPEN_MAX), rl.rlim_max); + setrlimit(RLIMIT_NOFILE, &rl); +#endif QCoreApplication app(argc, argv); QInstaller::init(); |