winget-cli icon indicating copy to clipboard operation
winget-cli copied to clipboard

Decouple Download and Install Steps

Open Trenly opened this issue 1 year ago • 3 comments

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.

Trenly avatar Jan 26 '24 03:01 Trenly

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

Trenly avatar Jan 26 '24 15:01 Trenly

@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?

Trenly avatar Jan 29 '24 19:01 Trenly

https://github.com/microsoft/winget-cli/labels/Area-Performance looks like it was already there.

denelon avatar Jan 29 '24 20:01 denelon