summaryrefslogtreecommitdiffstats
path: root/src/libs/installer/packagemanagercore.cpp
Commit message (Collapse)AuthorAgeFilesLines
* Update CLI wording when component is not foundKatja Marttila2024-04-221-1/+1
| | | | | | | | | When trying to install or update component which is not found, a warning is dispayed. Changed the wording so that the texts fits both to update and install commands. Change-Id: I06c58624fc33586f64a2c63768690ab431e661e8 Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
* Fix metadata fetch in updater modeKatja Marttila2024-04-221-7/+31
| | | | | | | | | | If no component is given to update command, look for updates from all categories so no update is missed. If component is given, utilize the meta fetch from default repositories first. Checkupdates command searches update from all categories. Change-Id: I6dbd9f130c9b008cb066ad7767d2b9a287ecac9f Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
* Fetch all metadata when using package viewerKatja Marttila2024-04-191-0/+2
| | | | | | | | | As the search pattern can be regexp, the search can match to basically anything. Enabling all categories when doing such searches Task-number: QTIFW-3356 Change-Id: I46bd25e2a1493b4ebba245910c2a5f7505a67af5 Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
* Fix signal about loaded languageKatja Marttila2024-04-161-1/+1
| | | | | | | | | | QLocale::Languege does not distinguish between Brazilian Portuguese and European Portuguese. Sending the QLocale object in defaultTranslationsLoadedForLanguage signal to make a difference between these languages. Change-Id: I95994e00b67e2bd18a611d4c9a14d4a6cf57b204 Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
* Fix occasional crash in install phaseKatja Marttila2024-04-091-1/+1
| | | | | | | | | | | Progress information is printed using same static instance of the coordinator by different operations. The operation object pointer was saved as key to QHash so that progress could be tracked. This has caused problems in installer as QHash insert occasionally caused segmentation fault. Fixed so that the progress information is no longer tracked based on operation object pointer, instead object name is used. Task-number: QTIFW-3314 Change-Id: Ic4007f226321e109109006c5c89415308920c614 Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
* Save used CLI arguments for later usageKatja Marttila2024-04-051-0/+16
| | | | | | | | | | | | Qt Installer will send information to backend if unstable components are found (e.g. dependency is missing), to better track for problems the CLI arguments are needed as well. Options which are not defined in installer are not saved, also option arguments which may contain confident information are not saved either. Task-number: QTIFW-3070 Change-Id: Iff5bfad725d1f56b7fb6c501138427ef4c58b5c3 Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
* Remove unused Url loggingKatja Marttila2024-04-021-7/+0
| | | | | | | | Url logging does not nowadays provide any useful information as the meta is read from cache, and the cache path is already printed to log once. Change-Id: I9845ad9ecf2dac53b3775a07b1702f938632b64a Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
* Disable 'clear cache' button until new cache settings are appliedArttu Tarkiainen2024-03-141-0/+8
| | | | | | | | | | | | | | Check the cache validity and use it as the initial state for the button. After clearing the cache, regardless of success, the cache will become invalid so the button should stay disabled until new settings are applied and the cache is reinitialized. Also disable the button in case the selected cache path does not match the one currently applied in the settings. Task-number: QTIFW-3252 Change-Id: I1b403fbc8a6680dfd5222296479ab0821cdb4a37 Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* Add security warning possibility when using additional repositoriesKatja Marttila2024-03-131-0/+3
| | | | | | | | | | When installing from CLI and the installable component is not in default categories, developer has possibility to override ProductkeyCheck and return custom security message warning. Task-number: QTIFW-3305 Change-Id: Ie321af6796bf19c910216be2c6ee521aa63788d8 Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
* CLI: Perform commands primarily from default repositoriesKatja Marttila2024-03-051-51/+52
| | | | | | | | | | | | | | | | | | Especially in installers which contains huge amount of repositories, it takes a long time to perform commands from CLI. If the repositories are filtered using categories, it saves a lot of time if the components to install/update etc. are tried to install/update from the defaultly selected repository categories. Assuming that the component is found from the defaultly selected repositories. If the component is not found from defaultly selected repository categories, then all categories are searched for the component. Implemented also a filter logic, where the components to install are searched earlier, if the component is not found then we can exit early. Task-number: QTIFW-3251 Change-Id: I1274b5f56dbff293554cb21839a8cea63a7d2dcc Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
* Move non-ui related functionality to coreKatja Marttila2024-02-231-11/+136
| | | | | | | | We need to access the core functionality despite of what user interface is used. Change-Id: I6c4c7e8526ff24a479128061aa40fba66e61660c Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
* Merge remote-tracking branch 'origin/4.7' into masterKatja Marttila2024-01-221-0/+11
|\ | | | | | | Change-Id: Id9fe7a127a72b58732f5dffd11c4c9c7c1c56060
| * Fix offline generator state not resetting when navigating backArttu Tarkiainen2024-01-081-0/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | In case the user chose to generate offline installer by clicking the "Create Offline Installer" button on ComponentSelectionPage, navigating back to the page did not reset the internal binary marker. This made it impossible to perform a normal installation afterwards. Fix by resetting the state on ComponentSelectionPage::entering(). Task-number: QTIFW-3236 Change-Id: I0951ec90e70dff9e8e233dee0cc5592c5c509c28 Reviewed-by: Iikka Eklund <iikka.eklund@qt.io> Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* | DOC: Remove unused signalKatja Marttila2023-12-071-19/+0
| | | | | | | | | | | | | | | | | | rootComponentsAdded -signal is not used anywhere, in case the components are added connect to componentAdded -signal instead Task-number: QTIFW-807 Change-Id: I148e74bd9f1650ae09f0020269fb7ed2349b5d3b Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
* | Allow setting repositories for offline installerKatja Marttila2023-12-071-1/+1
|/ | | | | | | | | | | If user selects Settings->Repositories and adds a repository to a maintenancetool which does not have any repositories (is offline installation), the repository was not saved for future use. Fixed so that repositories can be always added to maintenance tool. Task-number: QTIFW-3179 Change-Id: I6d0e4d85fb72180944a6cfbdde840e681a1a1453 Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
* CLI: adjust 'search' command behavior with --type optionArttu Tarkiainen2023-10-051-35/+58
| | | | | | | | | | | | | | In case the "--type=aliases|packages" option is omitted, search first for aliases, and if not found, search for components. If the option is specified, search only given type. This changes the behavior from previous one, where only aliases were considered for the search by default, if the type option was omitted. Change-Id: Ie01ea85e1b88376f8df3edbf864d1e78788c3464 Reviewed-by: Iikka Eklund <iikka.eklund@qt.io> Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io> Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* Add support for component aliasesArttu Tarkiainen2023-09-141-11/+114
| | | | | | | | | | | | | | | | | | Introduce concept of component aliases, which act as an alternative way for referring a set of related components. Component aliases are declared in an alias definition file, which is included to the created installer's binary layout as a resource. The file lists the available aliases, including metadata - such as name, version, and description - and the list of components and other aliases the alias requires. Aliases can be referred only from the CLI for the time being, with the supported commands 'install' and 'search'. Task-number: QTIFW-2978 Change-Id: I281f171cc7d932ce496051d7090ae169a4709eec Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* Merge remote-tracking branch 'origin/4.6' into masterKatja Marttila2023-08-241-4/+5
|\ | | | | | | Change-Id: Idadf4fb3047f72880e5a86f76eb21b659589cd17
| * Allow setting temporary repositories for offline-only installersArttu Tarkiainen2023-08-221-4/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | As the settings button can be configured to be visible for offline-only installers, the user may configure additional repositories in addition to the embedded binary content. Those repositories were not considered for the metadata fetch, however, so components from those repositories could not be installed. Allow fetching metadata from temporary or user configured repositories regardless of if the installer is created as "offline-only". Also fix required temporary space calculation when content is installed simultaneously from both embedded to the installer binary and remote repositories. Task-number: QTIFW-3078 Change-Id: I4effa365e856ca009588ac8768f8b6c30b4b0373 Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* | Allow generating offline installers from GuiArttu Tarkiainen2023-06-191-1/+6
| | | | | | | | | | | | | | | | | | | | | | This was previously possible only from the CLI. The same methods can be used from the graphical installer, so we do not need to limit the feature for CLI users. Task-number: QTIFW-3072 Change-Id: I271aecf163528b922e6cc399d31f07218e2a1650 Reviewed-by: Katja Marttila <katja.marttila@qt.io> Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io>
* | Omit thisObject creation in javascript codeKatja Marttila2023-06-121-0/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Originally, new Component object was created for javascript so that the garbage collector would not destroy the object. This caused the thisObject in javascript to differ from the object in packageManagerCore, which in Qt6.5 lead to warning messages when each script was evaluated: "Warning: :1: Calling C++ methods with 'this' objects different from the one they were retrieved from is broken, due to historical reasons. The original object is used as 'this' object." Fixes so that the new object creation is omitted and QJSEngine::CppOwnership is set to Component object so that garbage collector won't destroy it. Task-number: QTIFW-1829 Change-Id: Ia131d88fc83122f11c5b19a431e7db45e0ba18f9 Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
* | Fix tests built with Qt6Katja Marttila2023-06-081-2/+2
| | | | | | | | | | | | | | | | | | Due to api changes in Qt6 versus Qt5 we need minor changes to both tests and to IFW itself. Task-number: QTIFW-3064 Change-Id: I7e08161db074c96a6d639a2ff8b4c3d73f59e3cf Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
* | Adapt to QTextCodec changesChristian Stenger2023-06-061-2/+7
| | | | | | | | | | | | Task-number: QTIFW-1829 Change-Id: Iad99b41ec67b0d4c64623da04fff65a737f46ff2 Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
* | Fix deprecated QScopedPointer take() function usageKatja Marttila2023-06-061-10/+10
| | | | | | | | | | | | | | | | | | | | QScopedPointer function take() is deprecated since 6.1. Fixed by using std::unique_ptr instead Task-number: QTIFW-1829 Change-Id: I7a0c0167044dedf2f520fffc97a8f7d2a1e72371 Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
* | Fix admin rights handling during installer/updater/uninstaller runsArttu Tarkiainen2023-05-221-0/+15
|/ | | | | | | | | | | | | | | | | | The installer.gainAdminRights() and installer.dropAdminRights() methods are invokable from the scripting API. During installing, updating or uninstalling components, installer does it's own decision making to request and drop admin rights on-demand, but this could be overridden with the aforementioned methods. This was not taken into account, instead it was only checked if admin rights were gained in the context of the calling method. Fix by checking if the admin rights were present at the start of the installer, or if they were requested by anyone during installation. Task-number: QTIFW-2929 Change-Id: Ie4f6fc0ac746183b00f460a2e60c57c2eae9808c Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io> Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* MT: Fix segfault after repository category fetchArttu Tarkiainen2023-05-121-0/+6
| | | | | | | | | | | | | | | | | | | | At the end of calculating components to install or uninstall, the check states of the components are updated in the model. The updateComponentInstallActions() asks both installer and uninstaller calculators for resolved components, but these may not be valid after new repository categories are fetched, and the component model is reset. This would result in dereferencing invalid Component pointers in some cases. The root cause was that the other calculator was not quaranteed to be cleared when another requested updating the check states. Fix by clearing both calculators before full recalculation occurs. Also clear the calculators when the component environment is reset, for correctness and to avoid bumping into the similar issue elsewhere in the code. Change-Id: Ide6a6188b9a19f4680cd79b55dcc842bbe98e174 Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* Unify handling of processes to close for 'updating' componentsArttu Tarkiainen2023-04-211-10/+8
| | | | | | | | | | | | | | | | | | | There was behavioral mismatch of handling processes to stop for updates between GUI and CLI modes. For CLI, each command that would make changes to components would recursively check the installation directory for running processes early on, and block continuing if such processes were found. In addition to this, the component scripts may have requested to stop processes before performing component 'updates' (add/remove/update). For GUI, only the latter functionality was utilized, so remove the early checks from the CLI side to make the behavior uniform. Task-number: QTIFW-2927 Task-number: QTIFW-3009 Change-Id: I028e699c43ef4352593b49ccc8a927644916c41a Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* Merge remote-tracking branch 'origin/4.5' into masterKatja Marttila2023-03-241-0/+2
|\ | | | | | | Change-Id: I9946bf8ff3ea4e132a0490b59c1d4d557198ef62
| * 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>
* | Merge remote-tracking branch 'origin/4.5' into masterKatja Marttila2023-03-171-1/+1
|\| | | | | | | Change-Id: If5494504e5afe13b70a818c3d6a5bff024fed459
| * Fix invalid cache stateKatja Marttila2023-03-151-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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>
* | Merge remote-tracking branch 'origin/4.5' into masterKatja Marttila2023-03-141-2/+4
|\| | | | | | | Change-Id: I486d6f3f6fbdbfe1b92ccff918aaf0fe72aa2fc8
| * Fix updating of install action states for componentsArttu Tarkiainen2023-02-031-2/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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>
* | Optimize treename calculationKatja Marttila2023-02-211-6/+11
| | | | | | | | | | | | | | | | | | | | | | Instead of creating a temporary QHash object for treename components, using QMutableHashIterator which allows items to be removed during iteration. This change improves the function calculation 80 percent when there are lots of components to go through. Task-number: QTIFW-2805 Change-Id: I04e2fd95beafdae680eb86ebb184715dd73aea5b Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
* | Check sha1 checksum per repositoryKatja Marttila2023-02-091-25/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Updates.xml contains Checksum variable which can be set to false to skip the archives checksum verification. The variable was read from one arbitrary Updates.xml file and that was used in all downloads. Fixed so that the checksum is read per Updates.xml. This change also speeds up the component generation phase as it no longer needs to read Updates.xml file. Task-number: QTIFW-2805 Task-number: QTIFW-2928 Change-Id: Id28dd370ef200aec67cb85cbbc1d08d925b43c21 Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
* | Add common base class for the installer calculator classesArttu Tarkiainen2023-02-081-12/+12
| | | | | | | | | | | | | | | | As the classes already share similar features and public API, it would make sense to inherit a common abstract class to define the interface. Change-Id: I7ed278b1b049b7ec12c4401e55fdf39306b0ab85 Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* | Optimize QString::split usageKatja Marttila2023-02-071-3/+1
| | | | | | | | | | | | | | | | | | To increase efficiency QString::split is performed only to strings which are not empty. Task-number: QTIFW-2805 Change-Id: Ieed887a3e6f415395497dcdf05c118b32c72d9ee Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
* | Merge remote-tracking branch 'origin/4.5'Arttu Tarkiainen2023-01-271-52/+92
|\| | | | | | | Change-Id: I07baba6a0e64b6022e6a933708e199551be7dd2f
| * Support detecting invalid dependency resolutions on component selectionArttu Tarkiainen2023-01-261-50/+90
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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-261-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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>
* | Resolve downloadable archive list while installingKatja Marttila2023-01-261-8/+2
| | | | | | | | | | | | | | | | | | | | Installer can have thousands of components and only few of them user selects for install. Parsing the downloadable archives to install only when they are selected for install for better performance. Task-number: QTIFW-2805 Change-Id: I0771df05e17c85f37639768e2581d85bbf7bf66f Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
* | Adapt to changes in QHash and QSetChristian Stenger2023-01-171-1/+2
| | | | | | | | | | | | Task-number: QTIFW-1829 Change-Id: I5f062ae4c6389aba57b1de6f0e1884b4cd301334 Reviewed-by: Katja Marttila <katja.marttila@qt.io>
* | Fix documentation warningsKatja Marttila2022-12-201-0/+4
| | | | | | | | | | Change-Id: Ia8717933439359e23b65d9465dec8c70fbe59ee2 Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io>
* | Adapt to differences between Qt5 and Qt6Christian Stenger2022-12-161-2/+2
| | | | | | | | | | | | Task-number: QTIFW-1829 Change-Id: Ieae92a7736784784bc548433eda8b073b1a4b8f8 Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
* | Merge remote-tracking branch 'origin/4.5' into masterKatja Marttila2022-12-131-64/+13
|\| | | | | | | Change-Id: Id8121e6b4cdda23c8c44cf779e35dce8d9a28090
| * Cleanup installer calculator classesKatja Marttila2022-11-301-64/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | 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>
| * Fix errors occurring in full uninstall on macOSKatja Marttila2022-11-251-0/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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 clang and compiler warningsKatja Marttila2022-11-081-3/+3
| | | | | | | | | | | | | | | | Added const and reference to function names, removed unused variables etc. Change-Id: I5e3851c13ff3baf1884356198020fc86e69d69b4 Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
* | Use QFileInfo::exists() as that is documented to be fasterKatja Marttila2022-11-041-1/+1
| | | | | | | | | | Change-Id: I413669860334d96de684c1c32962a33166ac6c7c Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
* | Merge remote-tracking branch 'origin/4.5'Arttu Tarkiainen2022-11-041-21/+49
|\| | | | | | | Change-Id: Ie9b5f7a3db7e237d396dd5e72577258d953ec38d