summaryrefslogtreecommitdiffstats
path: root/src/libs/installer/packagemanagercore.cpp
Commit message (Collapse)AuthorAgeFilesLines
* Maintenance Tool: Change text in Select Components view when selection of ↵Arttu Tarkiainen2019-05-021-3/+19
| | | | | | | | | components is not possible Task-number: QTIFW-1241 Change-Id: Ib3e67e26b5fd4cf856c4b95f7fe542484e4955ff Reviewed-by: Janne Anttila <janne.anttila@qt.io> Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* Fix essential updateKatja Marttila2019-02-191-3/+3
| | | | | | | | | | | | Essential components should be updated before any other component is updated/installed. This did not happen always as when one essential component was found and that did not have any updates, the search was stopped and normal install flow was continued. Fixed so that all essential components are checked if they contain update. Task-number: QTIFW-1299 Change-Id: I754c50f672dd5f13105c710522603e90799d61c5 Reviewed-by: Iikka Eklund <iikka.eklund@qt.io>
* Replace 0 with nullptrKatja Marttila2019-01-091-5/+5
| | | | | | | Prevents a lot of warnings seen in QtCreator Change-Id: I63bf95aca68a04fc9fd0eecbe29c63e9b9c47efd Reviewed-by: Iikka Eklund <iikka.eklund@qt.io>
* Merge remote-tracking branch 'origin/3.0' into masterKatja Marttila2018-12-101-13/+8
|\ | | | | | | Change-Id: I73cb43e090c6ff34f1ceb774490d01818465e2e0
| * Remove 'Your install seems to be corrupted' messageboxKatja Marttila2018-11-061-8/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Messagebox is replaced with log. The critical messagebox is a bit harsh as you can continue using the installer despite of the 'corrupted install' message. 'Your install seems to be corrupted' can happen for number of reasons: the installer for some reason was not able to write the needed information to components.xml or maintenancetool.dat. Reason could be that the installer was forcely interrupted or crashed during write, or the files cannot be opened for write. 'Your install seems to be corrupted' occurs if components.xml contains an element which has no operations in maintenancetool.dat or vice versa. If you get an error "Critical: Operations missing from installed packages ("missing.package.name"), remove the package from components.xml to get rid of the log. Error: "Critical: Orphaned operations("package.name")" you can ignore Or you can install the package again if it is still found from repositories. Task-number: QTIFW-1003 Change-Id: I02c0a945ca3ce30ef4b0a80190d91638ab54c6bf Reviewed-by: Iikka Eklund <iikka.eklund@qt.io>
| * Do not reset core data values in restartKatja Marttila2018-10-161-5/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | Do not reset core data values as that removes all data set using setValue() which are needed. Restart is called when pressing 'Restart' after maintenancetool finish page or when changing settings from Settings Dialog. Task-number QTIFW-504 Change-Id: I0713b0371811957b93623433d26f0b10e4c8fb12 Reviewed-by: Janne Anttila <janne.anttila@qt.io> Reviewed-by: Jani Heikkinen <jani.heikkinen@qt.io>
* | Merge remote-tracking branch 'origin/3.0' into masterKatja Marttila2018-10-101-1/+4
|\| | | | | | | Change-Id: Ifaa114464151f5ed84ce47a3368c1521eb17a0be
| * Fix performOperation() documentationKatja Marttila2018-09-261-1/+4
| | | | | | | | | | | | | | | | Task-number: QTIFW-1034 Change-Id: I56164e3d5c355bd6a02f9a706b3f375d19d63afb Reviewed-by: Niels Weber <niels.weber@qt.io> Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io> Reviewed-by: Iikka Eklund <iikka.eklund@qt.io>
* | Add signal to inform about unstable componentsKatja Marttila2018-09-271-2/+4
| | | | | | | | | | | | Task-number: QTIFW-1197 Change-Id: If9d7941f4c7bfc478daa83dcd73dfa71c9163561 Reviewed-by: Iikka Eklund <iikka.eklund@qt.io>
* | Enable usage of categorized repositoriesKatja Marttila2018-09-261-1/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This change allows to categorize repositories in component selection page. Using categorized repositories will by default show only uncagetorized repository items in tree. Selecting one or several categories using checkbox will update the treeview to show all selected categorized repository content. Repository's metadata is fetched only after the category is selected. Categorized repositories can be defined in config.xml: <RepositoryCategories> <RemoteRepositories> <Displayname>category 1</Displayname> <Repository> <Url>(url)</Url></Repository> </RemoteReposiories> ... <RepositoryCategories Change-Id: I6eae9daee70b1afa322144d52c11f25d0b655ebf Reviewed-by: Jani Heikkinen <jani.heikkinen@qt.io> Reviewed-by: Iikka Eklund <iikka.eklund@qt.io>
* | Merge remote-tracking branch 'origin/3.0' into masterKatja Marttila2018-09-171-2/+1
|\| | | | | | | Change-Id: I77d539e079f3c7d61c4a965b222f4e02c35b1108
| * Fix admin query retryKatja Marttila2018-09-051-2/+1
| | | | | | | | | | | | Task-number: QTIFW-988 QTIFW-1173 Change-Id: Ie424f4dcb97236015d4287f1b73baee5ec8477b3 Reviewed-by: Iikka Eklund <iikka.eklund@qt.io>
* | Allow install other components if sha mismatches in metadataKatja Marttila2018-06-041-0/+9
| | | | | | | | | | | | | | | | | | Expanding commit "Add attribute to mark parts of install tree unstable." This change will allow installing other components if some component has sha mismatch. Change-Id: I61202da95dc07ca3f1fe931cfe1fbbb053596f42 Reviewed-by: Iikka Eklund <iikka.eklund@qt.io>
* | Fix select state for unstable componentsKatja Marttila2018-06-011-2/+4
| | | | | | | | | | | | | | | | | | | | In updater mode, unstable components needs to be unselected so that those won't be updated. In packagemanager mode, installed unstable components needs to be in checked state so that those won't be uninstalled. Change-Id: Ib3d16ae8c0eec4e07731a0082c02fd710ffdb9d6 Reviewed-by: Iikka Eklund <iikka.eklund@qt.io>
* | Merge remote-tracking branch 'origin/3.0' into masterKatja Marttila2018-03-201-3/+4
|\| | | | | | | Change-Id: I601b783a9d2eed009737b2779803457949cbb014
| * Fix the maintenancetool that failing to elevate to adminTakayuki ORITO2018-03-141-3/+4
| | | | | | | | | | | | | | | | | | | | | | It fails to output logs in ~PackageManagerCore() when using '--checkupdates'. It is installed in 'C:\Program Files (x86)'(needs admin rights). Disable the admin query. Because it does not need the query for checking the updates. Change-Id: I8cbd5823287a23d52c2f1a7f1fae95979314e441 Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* | Merge remote-tracking branch 'origin/3.0' into masterKatja Marttila2018-02-081-0/+6
|\| | | | | | | Change-Id: I8d0c8b9faa9537b50e989ec264ed7bfe8d2e358b
| * Add documentation for the setValidatorForCustomPage() functionAndy Shaw2017-11-301-0/+6
| | | | | | | | | | | | Change-Id: Id2c52f8a7fa2abbd1ac9de49d597269cb9bed220 Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io> Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* | Add support dash (-) symbol in component nameKonstantin Podsvirov2017-12-051-11/+56
|/ | | | | | | | | | | | | | | | | | | Add colon (:) symbol as alternative separator beetwen component name and version to use dash (-) symbol in component name. For names with dash (-) symbol use colon (:) symbol as separator in dependencies between name and version, even if you do not specify a version. Requirement example: package-with-dash:>=1.2.3, stable:1.x, demo:v1.0-rc1, backward-compatibility:. Also add test 'tst_ComponentIdentifier' for check new feature. Task-number: QTIFW-948 Change-Id: I6340c8001dec369ed8d33fcc4a92c7bce660aec1 Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* Fix maintenance tool update with silentUpdateKatja Marttila2017-06-011-5/+23
| | | | | | | | | | | | Maintenance tool is an essential update. Essential updates should be installed before non-essential updates. This change forces essential updates to be installed first. The behavior is same as when updating with visible UI. Task-number: QTIFW-976 Change-Id: I360145821c4e2d1f3384efca641208acb9338d5e Reviewed-by: Antti Kokko <antti.kokko@qt.io> Reviewed-by: Iikka Eklund <iikka.eklund@qt.io>
* Fix install corrupt with silentInstallKatja Marttila2017-05-101-0/+15
| | | | | | | | | | | | | If there are updates available for a component that is executable and the executable is running, installer is unable to update the component and results to a corrupted install. Check that there are no processes running from the install tree and cancel update if there are any. The update is canceled if there are processes running even if the process does not get update. Task-number: QTIFW-969 Change-Id: I5614cdd21d8538ccf8b0d114d3616804fe367667 Reviewed-by: Iikka Eklund <iikka.eklund@qt.io>
* Fix unnecessary component calculate in silentUpdateKatja Marttila2017-05-021-11/+15
| | | | | | | | If there are no updates available, no need to calculate components to install Change-Id: I95068ef0e062f1745cbe10138407e658befb2c5b Reviewed-by: Antti Kokko <antti.kokko@qt.io>
* Merge remote-tracking branch 'origin/2.0' into 3.0Katja Marttila2017-03-301-0/+1
|\ | | | | | | | | | | | | Conflicts: src/libs/installer/downloadfiletask.cpp Change-Id: Ie4b07c402a63c7a12ecf24e52e197507bbb2c5df
| * Fix installer crash when it contains replaced and replacement componentKarsten Heimrich2017-03-241-11/+12
| | | | | | | | | | | | | | | | | | | | | | Do not execute the component script of a to be replaced component. This make no sense at all, cause in case of installer it is hidden and we can't install it anyway. Task-number: QTIFW-915 Change-Id: Ia0378047b162dafb854dff24e77a113b27885f9d (cherry picked from commit b1ed687f91d9b75e290ebabcb624684f7d177cb1) Reviewed-by: Samuli Piippo <samuli.piippo@qt.io>
| * QRegExp include cleanupSamuel Gaist2017-03-131-0/+1
| | | | | | | | | | | | | | This patch adds the missing include statements for QRegExp. Change-Id: I05fed3e83514af895b95a3df746b0ae1e6b31828 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
* | Merge remote-tracking branch 'origin/2.0'Katja Marttila2017-01-301-17/+12
|\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: Changelog dist/config/config.xml dist/packages/org.qtproject.ifw.binaries/meta/package.xml dist/packages/org.qtproject.ifw/meta/package.xml installerfw.pri src/libs/installer/lib7z_create.h src/libs/kdtools/kdgenericfactory.cpp src/libs/kdtools/kdgenericfactory.h src/libs/kdtools/kdupdaterapplication.cpp src/libs/kdtools/kdupdaterapplication.h src/libs/kdtools/kdupdaterupdatesourcesinfo.cpp src/libs/kdtools/kdupdaterupdatesourcesinfo.h src/libs/kdtools/localpackagehub.cpp src/libs/kdtools/localpackagehub.h src/libs/kdtools/updatefinder.cpp src/libs/kdtools/updatefinder.h tools/binarycreator/resources/mkdmg.sh Change-Id: Iab2513f549832d2e750e77131c673457ab265af4
| * License header update to GPL-EXCEPTKatja Marttila2017-01-261-17/+12
| | | | | | | | | | Change-Id: I6426c4e8f932cf26c6c638dec18d0c12e22972d1 Reviewed-by: Janne Anttila <janne.anttila@theqtcompany.com>
* | Fix installer crash when it contains replaced and replacement componentKarsten Heimrich2017-01-201-11/+12
| | | | | | | | | | | | | | | | | | | | Do not execute the component script of a to be replaced component. This make no sense at all, cause in case of installer it is hidden and we can't install it anyway. Task-number: QTIFW-915 Change-Id: Ia0378047b162dafb854dff24e77a113b27885f9d Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* | Fix warning that should not appear on stdoutKarsten Heimrich2017-01-201-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | If the warning is written to stdout, parsing the output of --checkupdates might fail with invalid XML output. The change log shows that the warning was introduced in 70cc8ce0e1bd2beb15007045b99b26f6c6956206 and shown only in verbose mode, while change 70cc8ce0e1bd2beb15007045b99b26f6c6956206 made it always 'visible'. The later change went in probably without testing the check updates case... Change-Id: I9183089be89e823b4b082a7343885e360d9ad7f4 Reviewed-by: Riho Pihlak <rpihlak@gmail.com> Reviewed-by: Katja Marttila <katja.marttila@qt.io> Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
* | Introduces new --silentUpdate command line optionKatja Marttila2016-11-151-0/+68
| | | | | | | | | | | | | | | | | | 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>
* | allow installing compressed packagesKatja Marttila2016-11-091-4/+41
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This change introduces new feature to add 7z packages to be installed. Packages must be installer repositories (created with repogen), compressed to 7z file and named as qtbsp or 7z. Selecting compressed package is done either with button in component selection page or with --installCompressedRepository parameter given to installer or to maintenancetool. Button will not be created by default. If you want to show the button either build IFW with DEFINES+=INSTALLCOMPRESSED or enable the button in control script with allowCompressedRepositoryInstall() in ComponentSelectionPageCallback Task-number: QTIFW-886 Change-Id: Ia060092c348991d5195393b7dc154205f8bf92a5 Reviewed-by: Iikka Eklund <iikka.eklund@qt.io>
* | Merge remote-tracking branch 'origin/2.0'Katja Marttila2016-06-211-27/+21
|\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: Changelog dist/config/config.xml dist/packages/org.qtproject.ifw.binaries/meta/package.xml dist/packages/org.qtproject.ifw/meta/package.xml installerfw.pri src/libs/7zip/7zip.pro src/libs/7zip/win/CPP/7zip/UI/Common/Update.cpp src/libs/installer/component.cpp src/libs/installer/lib7z_facade.cpp src/libs/installer/packagemanagercore.cpp src/libs/installer/proxycredentialsdialog.h src/sdk/translations/ja.ts tests/auto/installer/messageboxhandler/tst_messageboxhandler.cpp tests/auto/installer/scriptengine/tst_scriptengine.cpp tests/auto/installer/settings/tst_settings.cpp Change-Id: I3bb98b8490b3c3eb7f664c1abb7417155b5430b2
| * Doc: Fix PackageManagerCore::ComponentType briefLeena Miettinen2016-05-131-1/+1
| | | | | | | | | | | | | | | | The \enum command \brief commands do not seem to get automatically completed during builds anymore. Change-Id: Id81aa8f3044f6151d6b4d8a441e386deb0ca4844 Reviewed-by: Topi Reiniö <topi.reinio@theqtcompany.com>
| * Doc: PackageManagerCore::ComponentType is now an enumLeena Miettinen2016-05-131-27/+21
| | | | | | | | | | | | | | Change the documentation accordingly. Change-Id: I2f15bf724558794b66e99eab1120dc2d224600de Reviewed-by: Katja Marttila <katja.marttila@qt.io>
| * Fix crash when updating admin installation with user/temp repositoryKatja Marttila2016-02-151-1/+10
| | | | | | | | | | | | | | | | Grant permission rights for writing maintenance config file Change-Id: I9364358455b8ad5e98b03c20d949c2562ba2535a Task-number: QTIFW-740 Reviewed-by: Iikka Eklund <iikka.eklund@theqtcompany.com>
* | Make usage of authorization fallback optionalSlobodan Vrkacevic2016-05-181-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Asking users to use the authorization fallback in case of authorization errors might be a bit problematic in some cases. If the users are not familiar with the concept, running: "<installer_exe> --startserver PRODUCTION,{GUID},{GUID}" from command line might be confusing or difficult. Also it might not help at all. So let's make this optional. If the config variable DisableAuthorizationFallback is set to true the installer will not ask users to run the authorization fallback but instead it will abort the installation immediately. In RemoteClient this is implemented by adding a new function called setAuthorizationFallbackDisabled. The init function could be also extend for this but the config settings are not loaded at the time when the function is called. Change-Id: I4baf1dea34c5cc0016e98df47a9492ee1418c5ee Reviewed-by: Katja Marttila <katja.marttila@qt.io> Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io>
* | Make communication via installer.execute() Unicode safeKarsten Heimrich2016-03-301-3/+21
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | It was impossible to pass Unicode data safely to a process started via installer.execute(), or to read Unicode data printed by that process safely back in. The reason for this is that the code hardcoded the latin1 codec for converting between strings used in the script interpreter and bytes used by the QProcessWrapper API. Fix this by adding two new optional arguments to installer.execute() which can be used to define the codec to be used for writing to stdin resp. reading from stdout. This defaults to latin1 for backwards compatibility. Change-Id: I290d8d9617b286ef90b2f0a05c6e7a47f6df317f Reviewed-by: Karsten Heimrich <karsten.heimrich@theqtcompany.com> Reviewed-by: Frerich Raabe <raabe@froglogic.com>
* | Fixed writing log on Windows if target dir requires admin rightsFrerich Raabe2016-02-151-0/+46
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Writing the installation log would fail on Windows in case writing to the target directory requires admin privileges. Instead of relying on the VerboseWriter destructor, let the PackageManagerCore destructor explicitly write the installation log. In case using the PlainVerboseWriterOutput does not work, try to use a newly introduced VerboseWriterAdminOutput which first tries to acquire admin privileges before writing a file via RemoteFileEngine. Change-Id: I13f203afa67175012409bc1eed95f05e51cdcb81 Reviewed-by: Katja Marttila <katja.marttila@theqtcompany.com>
* | Merge remote-tracking branch 'origin/2.0'Iikka Eklund2016-01-201-6/+5
|\| | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: installerfw.pri src/libs/kdtools/kdgenericfactory.cpp src/libs/kdtools/kdgenericfactory.h src/libs/kdtools/kdupdaterapplication.cpp src/libs/kdtools/kdupdaterapplication.h src/libs/kdtools/kdupdaterupdatesourcesinfo.cpp src/libs/kdtools/kdupdaterupdatesourcesinfo.h sync.profile Change-Id: Ifdc8b065f89b7e241bd3788ed79768e21888161f
| * Doc: Remove dubious sentence from installer.calculateComponentsToUninstall()Kai Koehne2016-01-151-2/+2
| | | | | | | | | | | | | | | | The auto-dependencies seems already to be handled correctly in UninstallerCalculator. Change-Id: I30074036aa030399cd49a6bfe2e380ffa1e92c58 Reviewed-by: Leena Miettinen <riitta-leena.miettinen@theqtcompany.com>
| * Update license headersIikka Eklund2015-12-291-4/+3
| | | | | | | | | | | | | | | | | | Update existing license headers. LGPL -> LGPLv21. Update copyright year as well. Change-Id: Ie1d71f8c68186b8f625f409ddf94691f178093c9 Reviewed-by: Katja Marttila <katja.marttila@theqtcompany.com> Reviewed-by: Jani Heikkinen <jani.heikkinen@theqtcompany.com>
* | Implemented installer.readFile()Frerich Raabe2015-12-081-0/+28
| | | | | | | | | | | | | | | | | | | | | | For reading an external file using a specific encoding. This is convenient for having installers show the current configuration (e.g. effective license key) in case the configuration is stored in plain files as opposed to using e.g. the Windows registry. Change-Id: I87f8583b4cb192c4bd8b62a03f292a5cbefd52d8 Reviewed-by: Leena Miettinen <riitta-leena.miettinen@theqtcompany.com> Reviewed-by: Karsten Heimrich <karsten.heimrich@theqtcompany.com>
* | Fixed occasional crash on Windows when terminating installerFrerich Raabe2015-12-081-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The static RemoteClient object (defined in RemoteClient::instance()) which gets destroyed at the very end of the process lifetime would -- as part of its constructor -- execute the RemoteClientPrivate destructor. The RemoteClientPrivate destructor did non-trivial work though, trying to shut down the connection which involves accessing the LocalServer instance. Executing this code at the very end of the process lifetime would sometimes cause a crash on Windows with a back trace into the QMutex guts. Let's fix this by getting more control over the destruction order; the RemoteClient instance is no longer a static object but allocated dynamically. Callers can explicitly call 'destroy' to dispose of the instance as part of their shutdown routine. Change-Id: Ie6773ccc0276ad6285919e57e9ed190bab02be3f Reviewed-by: Karsten Heimrich <karsten.heimrich@theqtcompany.com>
* | Fix crash when updating admin installation with user/temp repositoryKatja Marttila2015-10-301-1/+11
| | | | | | | | | | | | | | | | Grant permission rights for writing maintenance config file Change-Id: Ib95fc05b80b95ce952b4bcf2395fbb5ed0ef9153 Task-number: QTIFW-740 Reviewed-by: Karsten Heimrich <karsten.heimrich@theqtcompany.com>
* | Missed to rename classes and to update docs and tests.Karsten Heimrich2015-09-071-3/+3
| | | | | | | | | | Change-Id: I2d79ab4094cb9706287d44160543c19b35a66c95 Reviewed-by: Niels Weber <niels.weber@theqtcompany.com>
* | Merge remote-tracking branch 'origin/2.0'Kai Koehne2015-08-191-1/+1
|\| | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: Changelog dist/config/config.xml dist/packages/org.qtproject.ifw.binaries/meta/package.xml dist/packages/org.qtproject.ifw/meta/package.xml installerfw.pri src/libs/installer/component.cpp src/libs/kdtools/updatesinfo.cpp Change-Id: I0a1b4a464f7d9008b589b54dd7aed0cac71bd666
| * Init all components with proper install actionJarek Kobus2015-06-291-1/+1
| | | | | | | | | | | | Task-number: QTIFW-727 Change-Id: Iae9d232310370fefc0c9dca771e6b2cca6b5b433 Reviewed-by: Kai Koehne <kai.koehne@theqtcompany.com>
* | Rename files. Remove {kd} prefix. Remove {kdupdater} prefix.Karsten Heimrich2015-07-141-2/+2
| | | | | | | | | | Change-Id: I88c93cab718f4659296d5f7f562beefd747a366f Reviewed-by: Jarek Kobus <jaroslaw.kobus@theqtcompany.com>
* | Sanitize QDebug outputKai Koehne2015-07-091-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | Prefer using the stream operator logic instead of using QString::fromLatin1. Add a noquote() where a QString should be printed without any quotes/escapes. This also fixes the tests with Qt 5.5, where QString's are further escaped. Change-Id: Ie3afd14b9355101d3c0b52f30f66ec759c76526c Reviewed-by: Karsten Heimrich <karsten.heimrich@theqtcompany.com>
* | Unify translated error messagesKai Koehne2015-06-241-6/+6
| | | | | | | | | | | | | | | | | | | | | | | | * Enclose file paths in "" * Localize file paths with QDir::toNativeSeparators. * Make sure sentences end with a '.' * Append error details always by ':', e.g. tr("Failed to copy file '%1': %2").(...) * Use 'directory' instead of 'folder' everywhere Change-Id: Ie045f429f72ad5045c96537465c5fb9d2e99d250 Reviewed-by: Karsten Heimrich <karsten.heimrich@theqtcompany.com>