summaryrefslogtreecommitdiffstats
path: root/src
Commit message (Collapse)AuthorAgeFilesLines
* Fix showSettingsButton functionality4.5Katja Marttila2023-03-233-16/+34
| | | | | | | | | | | showSettingsButton() called from control script had no effect. Fixed it so that if showSettingsButton will overwrite the IFW decision to show the settings button. Change-Id: Ia08c03cc13db58168fd371f230517bcc83ee0e12 Task-number: QTIFW-810 Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io> Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io>
* Add more verbose when archive download failsKatja Marttila2023-03-231-9/+24
| | | | | | | | | | | Occasionally installer might throw "Cannot download archive" messages for unknown reason. Adding more detailed verbose to catch the root cause. Also trying to create a parent folder when starting to download an reopening the file just in case. Task-number: QTBUG-110684 Change-Id: I8bc4fc31371043e1f9eae8f7d9779ab434221ff3 Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
* Fix dependency resolution errorKatja Marttila2023-03-221-0/+2
| | | | | | | | | | | | | | | In GUI, toggling between updater view, packagemanager view and updater view could cause impossible dependency resolution error, or wrong components to be updated. There are two component lists, one for updater and one for package manager. Same component can exist in both list with different pointers. m_componentByNameHash contains a quick lookups for the components - as the component pointers change between updater and package manager the list needs to be cleared between each updater/package manager toggle so that correct component is searched. Task-number: QTIFW-3001 Change-Id: Ia42370a286c45d831864ec632a6958f66209a4cd Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
* Fix custom error message in Execute operationKatja Marttila2023-03-211-15/+19
| | | | | | | | | | If the program execution failed the custom message was not always shown. Fixed so that custom error message given in the addOperation is shown instead of the general message. Task-number: QTIFW-3007 Change-Id: I811cf0a3d9efaa2cbedd72a7c1e3097536501f5e Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
* Fix invalid cache stateKatja Marttila2023-03-153-13/+7
| | | | | | | | | | | | | | | | | Cache ended up in invalid state when there was categories used in the installer which were not all defaultly selected. Cache was only party updated when using CLI command search, and the cache was populated only with Updates.xml and repository.txt. In the next installer or MT launch, installer thought the cache was up to date as the Updates.xml was found and did not know that the metadata was not fetched. This lead to different error messages, like 'Cannot open script file' or 'Cannot open the requested license file' etc. Fixed so that metadata is fetched also when using CLI command search Task-number: QTIFW-2998 Change-Id: I1cdc446469f38cc9e6ddc71f512105fc5d10e74c Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
* Fix updating of install action states for componentsArttu Tarkiainen2023-02-033-4/+6
| | | | | | | | | | | | | | | | | | | | | | The states were only updated at the end of PackageManagerCore ::recalculateAllComponents() method - the method calls: PackageManagerCore::calculateComponentsToInstall() and PackageManagerCore::calculateComponentsToUninstall() functions in that order, and both emit signals indicating the finishing of the calculation. Any install script connecting to these signals that relies on the correct state of the install actions for the components would work incorrectly, as the state was not updated to reflect the calculation result yet. Fix by updating the install action state in both functions before emitting their finished signals. Also rename the function to better distinguish its purpose from updating the check state of the components. Task-number: QTIFW-2976 Change-Id: I67cd88478c39215ec124a5451c1f29a63cb1c82c Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* Support detecting invalid dependency resolutions on component selectionArttu Tarkiainen2023-01-2611-120/+190
| | | | | | | | | | | | | | | | | | | | | | IFW could already previously detect circular and missing dependencies by running a precheck calculation when building the component tree. However, there can be also cases of where the user selection results in unsolvable changes to components. One such case was the erroneous possibility to uninstall a component marked with ForcedInstallation, if any of its dependencies was checkable and the user unselected it for uninstallation. Add support for reacting to such errors in the component tree view, displaying a message box about the invalid dependency resolvation error, and blocking further navigation until the component selection passes the dependency calculations. Also attempt some refactoring the related code to simplify the different call sequences resulting in recalculation of the components. Change-Id: I9dc78f858bd4be7932f89f8e14bbfd97fbd3a0f6 Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* Show check box for AutoDependOn components in updater viewArttu Tarkiainen2023-01-262-4/+10
| | | | | | | | | | | | | | | | | | | | | | | In addition to the automatic selection, allow end user to select components declaring the AutoDependOn property when updating components. This does not change the previous rules for automatic selection for update, meaning the component 'A' declaring AutoDependOn relation to component 'B' will still be updated when 'B' is selected for update, regardless of the user selected check state for 'A'. This fixes some cases not handled by the automatic selection, where the component declaring AutoDependOn relation could not be updated. An example scenario: - 'A' (1.0.0) declaring an auto dependency to 'B' does not follow the release schedule and versioning of the component 'B' (2.1.0). - 'A' has a new release (1.0.1) that is pushed to remote repository - The end user cannot update the component 'A' unless 'B' is also updated to the repository, which would trigger the automatic selection Task-number: QTIFW-2855 Change-Id: Iea06c366f7f14f391cbc0b4a6526c8aee349ae59 Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* Add debug print for operationKatja Marttila2022-12-131-0/+2
| | | | | | | | Operations can replace variables in runtime, adding logging when it happens. Change-Id: I5e987f2c6ddc6b90175a43d16c23f5214a28718f Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
* Fix freezing UI while searching componentsArttu Tarkiainen2022-12-122-2/+40
| | | | | | | | | | | | | | | | | | | | This affected maintenance tool, which by default shows multiple header columns for the component tree view. After typing in a search pattern, the component indexes from the tree are expanded based on the matches. The maintenance tool would visibly hang at this point. Measuring with callgrind indicated that the biggest relative cost was at automatically resizing the header sections, which could be done hundreds of times, which is unnesessary because we only need to update the view once all necessary indexes are expanded. Fix by setting the resize modes of the sections temporarily to fixed size, and restore the original modes after the tree view is updated. Task-number: QTIFW-2886 Change-Id: I17547344494818de9e321b3501cf6c3bc550c51e Reviewed-by: Iikka Eklund <iikka.eklund@qt.io> Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* Fix documentation warningsKatja Marttila2022-12-125-8/+15
| | | | | Change-Id: I934af4574de8a799ebed98376cc7e7bc0b2d6ece Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io>
* Fix installer resource writing to admin folderKatja Marttila2022-12-021-2/+2
| | | | | | | | Installer tried to create a folder which was already created. Task-number: QTIFW-2890 Change-Id: I2a6e2316c16811ea8a14b14af1c43f913470317f Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
* Fix replaced removal on updateKatja Marttila2022-12-012-8/+7
| | | | | | | | | | If component is replaced with a component which is installed as autodependency to other component, the replaced component was not uninstalled on update. Task-number: QTIFW-2887 Change-Id: Ibad04df765191f0e399c6f6020cdf081dba5d803 Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
* Fix user set binary marker not having any effect on maintenance toolArttu Tarkiainen2022-12-013-4/+15
| | | | | | | | | | | | | | | | | | | TabController would invoke IntroductionPage::onCoreNetworkSettings- Changed() slot, which would disable the UI controls for selecting the package manager or updater mode in case the maintenance tool is configured to use only temporary repositories that are set only later on. This would also update the internal magic marker indicating the binary type, overwriting the user selected one that was passed with one of the --start-* options. Fix by splitting the resetting of the "metadata fetched" state of the page to its own public method from IntroductionPage::onCoreNetwork- SettingsChanged(), and call that from the TabController initialization instead. Task-number: QTIFW-2884 Change-Id: I952b8fd1d14e6292bae1556a5f33dec537c8b1d6 Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* Cleanup installer calculator classesKatja Marttila2022-11-3011-342/+127
| | | | | | | | | | | | | | As there are several optimizations done, the single click of component in component selection tree is not slow anymore. Cleaning the code so it is easier to maintain. Basically this revers commit a28cf55b5a5007c0dd952b3012c076d9da329f0f but as there are bug fixes made after that so pure revert could not be done. Task-number: QTIFW-2885 Change-Id: Id486d5dc68c42c31b4848cd19a1761bcfe242db6 Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
* Make Settings operation to support _OLD and placeholdersKatja Marttila2022-11-253-4/+55
| | | | | | | | | | | | | | | | | | | | | | | | Setting can be a file. The Settings path was hard coded to .dat file, which made it impossible to move the settings file to a different location or use some other settings file instead. This change saves the settings path with placeholder name, which is resolved before performing settings operation or undo operation. In case settings path is hard coded to .dat file and the settings file is relocated, this can be overcome by setting variable name _OLD to point to the location where the settings file originally was. Installer uses this _OLD syntax to resolve the new location. For example in the following example Tools.ini is relocated from OldLocation to NewLocation. Setting the installer values the following way will tell installer to use the settings from NewLocation instead of OldLocation. installer.setValue("MY_OWN_EXECUTABLE", "C:/Qt/NewLocation/Tools.ini") installer.setValue("MY_OWN_EXECUTABLE_OLD", "C:/Qt/OldLocation/Tools.ini") Task-number: QTIFW-2882 Change-Id: I47dc68dfba8a49f37ab361edc8c64d3e5523e02e Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
* ExtractOp: fix leftover empty directories when 'targetDir' arg is usedArttu Tarkiainen2022-11-251-2/+2
| | | | | | | | | | | | | | | | | | | | | The problem was that the directory passed for the DirectoryGuard object handling the creation of leading directories was missing the target directory itself, instead the path ended to its parent directory. When installer does the undo-step for Extract operation, only empty directories are deleted, so in case any directory from a path is missing from the created directory list, the leading directories won't be also deleted. QFileInfo::absolutePath() returns the path of the parent directory for the given path even if it is a directory, fix by using instead the QFileInfo::absoluteFilePath(), which includes the name after the last directory separator. Task-number: QTIFW-2764 Change-Id: I5b03142b46db566615f4983fa3e2ff2690f25262 Reviewed-by: Katja Marttila <katja.marttila@qt.io> (cherry picked from commit 5b4a085fb67730f387a9f0228dccc2e47d4e87be)
* Fix errors occurring in full uninstall on macOSKatja Marttila2022-11-253-3/+26
| | | | | | | | | | | | | | | Maintenance Tool can be retrieved from online repositories like any other component. The component contains files which are listed to remove correct files in uninstall. As Maintenance Tool differs a bit from other components in the matter that it should not be deleted in full uninstall as it is running, we need to exclude the Maintenance Tool (which we call also installerbasebinary), from the file list. Maintenance Tool itself is removed in PackageManagerCorePrivate::deleteMaintenanceTool() Task-number: QTIFW-2875 Change-Id: I33a16e632e3b354099b749d8dde7b65f5cef8f43 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
* Fix updater view behavior for non-checkable componentsArttu Tarkiainen2022-11-241-3/+5
| | | | | | | | | | | | | | | | As the components can still be selected with the selection buttons above the view, it makes little sense to artificially limit selecting individual items for update and hiding their check state. Also the documented use case for the property - making a parent component non-checkable so only some of its children should be checked - does not apply for the updater view. Apply similar fix to forced installation components, which should be also toggleable for updates. Task-number: QTIFW-836 Change-Id: I18f34c4e8ee1e24e761e50edd3066ec4aea3432e Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* Execute operation: fix overwritten error string for crashed processesArttu Tarkiainen2022-11-241-20/+19
| | | | | | | | | | | When the process exited with QProcessWrapper::CrashExit, the code did accidentally overwrite the associated error string later. The same would have happened if the process could not be started, so fix that also. Task-number: QTIFW-2875 Change-Id: Iae27be913ffa2b3f5dbeaf6db23b95f3a00377e1 Reviewed-by: Tim Jenssen <tim.jenssen@qt.io> Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* MetadataJob: fix removing compressed repositories after extractingArttu Tarkiainen2022-11-172-3/+8
| | | | | | | | | | | | | In addition to extracting meta.7z archives, the UnzipArchiveTask is used to extract compressed repositories (QBSP). At the end of the task, it removed the archive file uncoditionally, which we don't want to do for the compressed repositories, because the user should be able to use them multiple times at their will. Fix by making the removing conditional, and enable it only for the metadata archives. Task-number: QTIFW-2876 Change-Id: I10d2fd3872bdcd7eb4bbfeddfd1bda3bdaffeb3f Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* Fix virtual component uninstallationKatja Marttila2022-11-044-54/+77
| | | | | | | | | | Virtual components were still wrongly calculated for uninstall depending on which order the tree was clicked and whether the component had dependencies to already installed components or components about to be installed. Change-Id: I624fd1139d15d5e16c81365064dcea2392dc13b1 Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
* Merge remote-tracking branch 'origin/4.4' into 4.5Arttu Tarkiainen2022-11-039-35/+70
|\ | | | | | | Change-Id: If99e84c5f6e6914f0d90770053ce6850e70ed403
| * Fix installer stalling when there's only one CPU core4.4Arttu Tarkiainen2022-09-271-4/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The installer operations are run in the global QThreadPool. The Operation::performOperation() implementation from "QtPatch" operation would call the Component::operations() method, that filtered the returned operation list with QtConcurrent::blockingFilter(). This would lock the installer when the global thread pool object was initialized with maxThreadCount of 1, with the only QThread object from the global pool already running the calling Operation::performOperation() function, which is waiting the result of Component::operations(). Fix by omitting usage of QtConcurrent::blockingFilter() and populating the returned operation list with std::copy_if - the components have usually only a handful operations each so this shouldn't be too noticeable of a performance regression. Task-number: QTIFW-2786 Change-Id: Ia6be9f6697310d3f955a8199712c54f345407067 Reviewed-by: Katja Marttila <katja.marttila@qt.io>
| * Fix uninstallation of needed virtual componentsKatja Marttila2022-09-161-1/+2
| | | | | | | | | | | | | | | | | | In some rare cases, both component to be uninstalled and component to be installed has dependency to same virtual component. In such case the virtual component should not be uninstalled. Change-Id: I3b826693d4a72d6765a5ac1ee9a3957fdf7415da Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
| * Attach to squish only when the port is separately givenKatja Marttila2022-09-082-13/+11
| | | | | | | | | | | | | | | | | | | | Attaching to squish will trigger firewall questions in the installer. Changing the attach behavior so that by default no attach is done, and user can run the installer with --squish-port <number> if the attach is needed. Task-number: QTIFW-2746 Change-Id: I89f06a52b1ef95493e99084cb6080266b4eaf1dc Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
| * Windows: fix installation error with concurrent Extract operationsArttu Tarkiainen2022-09-014-16/+50
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | There was an issue with the Extract operations when using the same "targetDir" argument for multiple archives. The DirectoryGuard object creating the missing leading directories would occasionally run into a race condition when multiple threads competed with creating the directories. Fix by adding installer specific implementation similar to QDir::mkpath(), but which checks if the directory was created elsewhere at every directory level. Also convert an existing similar case with the Extract operation to use the new function. Task-number: QTIFW-2752 Change-Id: I4451e931309edb536294314b11c903189dacf2f0 Reviewed-by: Katja Marttila <katja.marttila@qt.io>
| * Fix typo resulting in accessing wrong operation result containerArttu Tarkiainen2022-09-011-1/+1
| | | | | | | | | | | | | | Fortunately no reported issues yet that would have been caused by this. Change-Id: I0ee9cb368600f660eb7c048e8cf3df5d31e43b4f Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* | Update translation filesArttu Tarkiainen2022-11-0216-132/+2200
| | | | | | | | | | | | Task-number: QTIFW-2814 Change-Id: I548346cf3e00f90b8d34be098183a79e8e4f1a47 Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* | Macos: Fix maintenance tool install from repositoryKatja Marttila2022-11-011-0/+1
| | | | | | | | | | | | | | | | | | | | Maintenancetool can be either app bundle or executable itself. In case the maintenancetool is the executable itself, we need to create the app bundle in the code. Task-number: QTIFW-2856 Change-Id: Ib884cbd7d7f18b9503938114d56f3c396c8d3bd6 Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
* | Adjust available space checking for the metadata cacheArttu Tarkiainen2022-10-241-17/+12
| | | | | | | | | | | | | | | | | | | | | | As the payload archives are now also downloaded to the local cache instead of the system specific temporary directory, the calculation should check the available space from the cache volume instead of from the temp volume. Task-number: QTIFW-2821 Change-Id: I4d9f202299ea3d2569c66953661329cdb25212a0 Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* | CLI: Add new '--cache-path' optionArttu Tarkiainen2022-10-216-4/+31
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The option can be used to select the path for metadata cache without opening the installer's settings dialog. Add public PackageManagerCore::resetLocalCache() function and remove automatic initialization of the local cache in the private core class constructor, so we can control the timeline better. Also make PackageManagerCore::clearLocalCache() a regular member function as it does not need to be a Qt slot. Task-number: QTIFW-2810 Change-Id: Ia4a903026a10b90da16ba1b93fd3098a709f7ed7 Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* | CLI: Add new 'clear-cache' commandArttu Tarkiainen2022-10-215-1/+23
| | | | | | | | | | | | | | | | | | The command can be used to clear the contents of local metadata cache without opening the installer GUI. Task-number: QTIFW-2810 Change-Id: I18cec027b9945f83d25fa1716858756ececae6d4 Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* | Add possibility to synchronize metadata cache manuallyArttu Tarkiainen2022-10-213-4/+39
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The contents of the cache subdirectories and manifest.json may mismatch if the installer process is killed after the metadata fetch, because the manifest file is normally synchronized only when the cache object gets destroyed. While this is a recoverable error, it creates unnecessary overhead of discarding broken items and downloading them again. Add support for synchronizing the cache by the caller and do so each time the cache is updated by Metadatajob. Task-number: QTIFW-2817 Change-Id: Ia4cd3de44d57e8d732d11dc26968aa87323ada0f Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* | Allow generation and signing of MT in macosKatja Marttila2022-10-207-96/+183
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previously maintenance tool could be updated from online repository placing installerbase to repository and setting setInstallerBaseBinary() in install script. The maintenancetool app bundle was written in the code and installerbase placed under .app/Contents/MacOS/. This prevented the maintenancetool app bundle to be signed and notarized. Fixed so that the whole app bundle can be placed to repository. This does not break the signing nor notarization as the whole bundle is copied as it is. The setInstallerBaseBinary() is still needed in the install script so that the installer knows which bundle is the maintenance tool. Old way of updating maintenancetool still exists, if the installerbaseBinary does not contain the ending 'app' installer assumes that the maintenance tool is the executable itself instead of whole app bundle. This change also adds a new binarycreator switch --create-maintenancetool, which can be used in macos to create the app bundle for maintenance tool. Task-number: QTIFW-2750 Change-Id: I3483ddb815d035644e826559947f6f9de4af9361 Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
* | Fix installer not respecting PersistentLocalCache value properlyArttu Tarkiainen2022-10-201-3/+10
| | | | | | | | | | | | | | | | | | | | In case the installer is configured to use a non-persistent cache, it is not enough anymore to mark the subdirectories of the cache for deletion. Instead it should be done by properly clearing the cache with GenericDataCache<T>::clear(). Change-Id: I25ade37baca048e98cc8edb9d90585dcd6d0f142 Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* | Fix user set metadata cache path not saved for maintenance toolArttu Tarkiainen2022-10-201-0/+3
| | | | | | | | | | | | | | | | | | Write the settings value to network.xml, with the rest of the user configurable settings. Task-number: QTIFW-2812 Change-Id: I90210ddb1426acf06215828dfb18dc65aa107e6e Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* | Fix possible uncaught exceptions while loading package dataArttu Tarkiainen2022-10-191-189/+200
| | | | | | | | | | | | | | | | This affects exceptions thrown when failing to load user interface and license files from package, which are now handled properly. Change-Id: Ibfe9da8f2b8b7e3e08945ae81eb40ae0b045e9b1 Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* | Fix some translated textsFriedemann Kleint2022-10-192-3/+5
| | | | | | | | | | | | | | Fix place holders and count. Change-Id: I4cb4508d2cd24706266dc82872345e7ffbc36174 Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
* | libarchive: support linking with zlib compiled into QtCoreArttu Tarkiainen2022-10-181-0/+4
| | | | | | | | | | | | | | | | | | | | | | This removes the requirement of provisioning an external library just for libarchive - as the official IFW binaries already use the zlib bundled with Qt - and tracking updates from multiple sources. Task-number: QTIFW-2803 Change-Id: I9878a3e1a9b5d649bc62590746151e2d5fe903ba Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* | Fix missing message of QInstaller::Error exception on SDKApp::notify()Arttu Tarkiainen2022-10-181-1/+3
| | | | | | | | | | | | | | | | The class was reparented from std::exception to QException some time ago. Change-Id: I15f319d9b770d9983ec75d683a13d016f4758c5d Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* | Show information dialog after clearing metadata cacheArttu Tarkiainen2022-10-186-6/+45
| | | | | | | | | | | | | | | | | | | | Show dialog indicating success or failure, including the error message, to add some feedback for the action. Adjust related to code to handle return value of GenericDataCache<T>::clear() function, and fix the wrong return value when an error occurs while deleting cache subdirectories. Change-Id: Ib35f2db3711d85f567f7918c903aebf4236d7041 Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* | Metadatajob: allow replacing existing items to metadata cacheArttu Tarkiainen2022-10-181-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | It is a possible situation that a repository with the same Updates.xml checksum is retrieved from multiple URL:s on a single metadata fetch. This creates a scenario where more than one metadata item with the same checksum is pending registration to the cache, which will fail for the next item after the first registered one. Replacing existing items should be allowed instead. Change-Id: I8957202046231d03b3ac26aa8db0534650d49bfb Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* | Add persistent metadata file cacheArttu Tarkiainen2022-10-1426-188/+1665
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Introduce GenericDataCache and Metadata classes for storing the fetched metadata files (Updates.xml and uncompressed files from the meta.7z archives) on local filesystem. The cache uses a checksum based dictionary to keep track of the cached metadata items, with the SHA1 sums of downloaded Updates.xml files being the keys to refer single metadata item. We still need to download all the Updates.xml files on each fetch to check if the cached metadata items are applicable for the current repositories. Update the Updates.xml files in auto-test data to have unique contents, otherwise there could be conflicts with identical test repositories, as the tests will also utilize the cache now. Also omit registering Repository type to the meta-object system in the class contructors, this is expensive as we construct objects from the class frequently, in the worst case hundreds of thousands times. PackageManagerCore already does the registering. Task-number: QTIFW-2621 Change-Id: Iee10ead68befd722ffe7f18ca48483d5a3666658 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* | Doc: fix "Cannot tie this documentation to anything" warningArttu Tarkiainen2022-10-141-0/+2
| | | | | | | | | | Change-Id: I4cbdf230b6c3883a0ca9e11d8dc6504a49cf0afb Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io>
* | Optimize keeping component reference count in InstallerCalculatorArttu Tarkiainen2022-10-111-8/+3
| | | | | | | | | | | | | | | | | | | | To avoid constructing possibly large temporary QStringList objects, return the value by modifiable reference when accessing the m_referenceCount container. Task-number: QTIFW-2790 Change-Id: Ieb2619624cfbf12561dbec25b966bb7dbae5d29c Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* | Optimize retrieving components by nameArttu Tarkiainen2022-10-115-12/+40
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The PackageManagerCore::componentByName(const QString &name) -function is called repeatedly by the InstallerCalculator class and at minimum once for each install script, because we automatically inject a snippet which stores the return value of the function in the 'component' variable for the script context. Create a <name, component> hash once per each component model reset to make the lookups faster: * This avoids constructing a flat list of components and all their descendants again and again when calling the function. * The linear lookup from the component list is slow because it calls componentMatches() for each element until the satisfactory component was found or the list ends. * The average time complexity of the key lookup from the QHash is constant even for large hashes. Task-number: QTIFW-2790 Change-Id: I580d28f78ac6681d5bcbfbad970002b49de1a830 Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* | Fix deprecate QCommandLineOption::setHidden() usageKatja Marttila2022-09-291-2/+2
| | | | | | | | | | | | | | | | setHidden() -function call should be done with setFlags(QCommandLineOption::HiddenFromHelp) Change-Id: I58a8fa58cc4d86338f9ec70fe29ab1c0ea9b0166 Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
* | libarchive: disable crypto support from builds on macOSArttu Tarkiainen2022-09-291-5/+5
| | | | | | | | | | | | | | | | This is uniform with the config options for Windows and Linux, we don't utilize the features in the installer framework. Change-Id: I4d01455ffa3e53195e85ab5312785dcfd2b32a7b Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* | Replace ProductVersion placeholder with actual valueKatja Marttila2022-09-291-1/+1
| | | | | | | | | | | | Task-number: QTIFW-2267 Change-Id: I52a62a285f2a7183c32658cbf86c949705d714d8 Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>