| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
| |
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>
|
|
|
|
|
|
|
|
|
|
|
| |
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>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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>
|
|
|
|
|
|
|
|
|
|
| |
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>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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>
|
|
|
|
|
|
|
|
| |
Operations can replace variables in runtime, adding logging when it
happens.
Change-Id: I5e987f2c6ddc6b90175a43d16c23f5214a28718f
Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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>
|
|
|
|
|
| |
Change-Id: I934af4574de8a799ebed98376cc7e7bc0b2d6ece
Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io>
|
|
|
|
|
|
|
|
| |
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>
|
|
|
|
|
|
|
|
|
|
| |
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>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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>
|
|
|
|
|
|
|
|
|
|
|
| |
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>
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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>
|
|
|
|
|
|
|
|
|
|
| |
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>
|
|\
| |
| |
| | |
Change-Id: If99e84c5f6e6914f0d90770053ce6850e70ed403
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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>
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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>
|
| |
| |
| |
| |
| |
| |
| | |
Fortunately no reported issues yet that would have been caused by this.
Change-Id: I0ee9cb368600f660eb7c048e8cf3df5d31e43b4f
Reviewed-by: Katja Marttila <katja.marttila@qt.io>
|
| |
| |
| |
| |
| |
| | |
Task-number: QTIFW-2814
Change-Id: I548346cf3e00f90b8d34be098183a79e8e4f1a47
Reviewed-by: Katja Marttila <katja.marttila@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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>
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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>
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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>
|
| |
| |
| |
| |
| |
| |
| |
| | |
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 place holders and count.
Change-Id: I4cb4508d2cd24706266dc82872345e7ffbc36174
Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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>
|
| |
| |
| |
| |
| |
| |
| |
| | |
The class was reparented from std::exception to QException
some time ago.
Change-Id: I15f319d9b770d9983ec75d683a13d016f4758c5d
Reviewed-by: Katja Marttila <katja.marttila@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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>
|
| |
| |
| |
| |
| | |
Change-Id: I4cbdf230b6c3883a0ca9e11d8dc6504a49cf0afb
Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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>
|
| |
| |
| |
| |
| |
| |
| |
| | |
setHidden() -function call should be done with
setFlags(QCommandLineOption::HiddenFromHelp)
Change-Id: I58a8fa58cc4d86338f9ec70fe29ab1c0ea9b0166
Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| | |
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>
|
| |
| |
| |
| |
| |
| | |
Task-number: QTIFW-2267
Change-Id: I52a62a285f2a7183c32658cbf86c949705d714d8
Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
|