Decouple Download and Install Steps
Description of the new feature / enhancement
Packages with package dependencies are now being accepted in the community repository. Running through the installation flow when dependencies are present results in the behavior Download package => Install package => Download package => Install package => . . . . This can be quite slow when there are multiple dependencies, the installer files are large, or it takes a significant amount of time to install a package.
While it is not a good idea to run multiple installs at the same time, it should be feasible to download the next installer while the previous installer is performing the install. In this way, it could be possible that the next installer would be fully downloaded before the previous installer has completed, reducing the overall time to install.
Download #1
||
||===================||
Install #1 Download #2
|| ||
========||===========||
|| ||
Install #2 Download #3
|| ||
======||=======
||
Install #3
Proposed technical implementation details
Take the dependency tree and split it into separate download and install trees. Progress through the download tree consecutively without blocking. Once a node has been marked as completed in the download tree, process it in the install tree, queuing the installs until the previous install has completed.
After getting some sleep and thinking through this more - This could also benefit the upgrade --all, import, and multi-query install flows too
[Policy] Command-Install [Policy] Command-Upgrade [Policy] Command-Import [Policy] Area-Performance
@denelon - looks like there isn’t a trigger for Area-Performance. I'll have to add one later. Would you mind adding the label manually?
https://github.com/microsoft/winget-cli/labels/Area-Performance looks like it was already there.