[BUG] Scoop updates can fail when parallel operations enabled
Please confirm these before moving forward
- [x] I have searched for my issue and have not found a work-in-progress/duplicate/resolved issue.
- [x] I have tested that this issue has not been fixed in the latest (beta or stable) release.
- [x] I have checked the FAQ section for solutions.
- [x] This issue is about a bug (if it is not, please use the correct template).
UniGetUI Version
3.3.5
Windows version, edition, and architecture
Windows 11 Insider Enterprise 26120.5790 x64
Describe your issue
When updating multiple scoop packages in parallel, if scoop update hasn't been run in the past 3 hours, all updates will fail with:
Updating Scoop...
fatal: Cannot fast-forward to multiple branches.
Update failed.
This can also happen if you're in the same state (update hasn't run in 3 hours) and try to refresh immediately after starting a package install.
Reason
scoop update <app> will always attempt to run the equivalent of scoop update if its last update date was more than 3 hours ago.
Steps to reproduce the issue
-
Under Settings > Package update preferences > Update checking, either disable Check for package updates periodically OR set Check for updates every: to
4 hoursor more. (easier to repro using the former) -
Under Settings > Package operation preferences > Concurrency and execution > Choose how many operations should be performed in parallel to more than
1. -
In the Software Updates panel, periodically refresh or wait for it to automatically refresh, until more than one Scoop package update is available for update, and wait for 3 hours.
-
After 3 hours, ensure those packages are selected and press Update selection.
-
In the package queue at the bottom, you will see that your updates failed with an error like:
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ Package update operation for Package=vscode-insiders with Manager=Scoop Installation options: <InstallOptions instance (only non-default values are shown) OverridesNextLevelOpts: False> Overriden options: <Scope=user;RunAsAdministrator=;WG_SpecifyVersion=;PS_NoScope=False> Version: 1.105.0-1757595153414 -> 1.105.0-be15710 Starting operation... Executing process with StartInfo: - FileName: "C:\Users\EricLoveland\scoop\shims\pwsh.exe" - Arguments: "-NoProfile -ExecutionPolicy Bypass -Command "C:\Users\EricLoveland\scoop\shims\scoop.ps1" update versions/vscode-insiders" Start Time: "10/3/2025 8:38:30 AM" Updating Scoop... fatal: Cannot fast-forward to multiple branches. Update failed. End Time: "10/3/2025 8:38:36 AM" Process return value: "1" (0x1) Vscode Insiders could not be updated -----------------------
UniGetUI Log
Package Managers Logs
Relevant information
Log Context
- I have my refresh interval set to 2 hours but I tried to install updates right after my machine woke from sleep.
- You can see in the logs that I manually refreshed after this happened.
Fix thoughts
I started working on a PR for this and it highlighted one of the features of Scoop that causes this sort of complication:
- while it can technically be used to install an older version of an app using weird tricks (that also make it so that software is very hard to ever update again), it's really designed to always install the latest version.
This got me thinking:
- Should UniGetUI adopt the same behavior? i.e. should UniGetUI have a feature where it does its own check of
scoop config last_updateand if it's almost/over 3 hours, runsscoop updatebefore any updates are run?- If so, should there be an option to opt out of this being "automatic" and block Scoop-based updates unless the user refreshes, in case they want to be 100% sure that the version in the UI matches the version that will be installed?
- There is a workaround for this that feels pretty hacky: run
scoop config last_update <currentdate>and possibly reset it once all updates are done.
I'm definitely leaning toward 1, with maybe 1.i depending on your feedback. Happy to open a PR!
Screenshots and videos
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Package update operation for Package=firefox-developer with Manager=Scoop
Installation options: <InstallOptions instance (only non-default values are shown)
PostUpdateCommand: "C:\Users\EricLoveland\scoop\apps\firefox-developer\current\firefox.exe -P"
OverridesNextLevelOpts: True>
Overriden options: <Scope=user;RunAsAdministrator=;WG_SpecifyVersion=;PS_NoScope=False>
Version: 144.0b8 -> 144.0b9
Starting operation...
Executing process with StartInfo:
- FileName: "C:\Users\EricLoveland\scoop\shims\pwsh.exe"
- Arguments: "-NoProfile -ExecutionPolicy Bypass -Command "C:\Users\EricLoveland\scoop\shims\scoop.ps1" update versions/firefox-developer"
Start Time: "10/4/2025 1:13:30 AM"
Updating Scoop...
fatal: Cannot fast-forward to multiple branches.
Update failed.
End Time: "10/4/2025 1:13:37 AM"
Process return value: "1" (0x1)
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Package update operation for Package=mise with Manager=Scoop
Installation options: <InstallOptions instance (only non-default values are shown)
OverridesNextLevelOpts: False>
Overriden options: <Scope=user;RunAsAdministrator=;WG_SpecifyVersion=;PS_NoScope=False>
Version: 2025.10.0 -> 2025.10.1
Starting operation...
Executing process with StartInfo:
- FileName: "C:\Users\EricLoveland\scoop\shims\pwsh.exe"
- Arguments: "-NoProfile -ExecutionPolicy Bypass -Command "C:\Users\EricLoveland\scoop\shims\scoop.ps1" update main/mise"
Start Time: "10/4/2025 1:13:30 AM"
Updating Scoop...
fatal: Cannot fast-forward to multiple branches.
Update failed.
End Time: "10/4/2025 1:13:37 AM"
Process return value: "1" (0x1)
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Package update operation for Package=jetbrains-toolbox with Manager=Scoop
Installation options: <InstallOptions instance (only non-default values are shown)
PostUpdateCommand: "C:\Users\EricLoveland\scoop\apps\jetbrains-toolbox\current\jetbrains-toolbox.exe"
KillBeforeOperation: [jetbrains-toolbox.exe]
OverridesNextLevelOpts: True>
Overriden options: <Scope=user;RunAsAdministrator=;WG_SpecifyVersion=;PS_NoScope=False>
Version: 2.9.0.56191 -> 2.9.1.58121
Running PreOperation (1/1)...
Starting operation...
Attempting to close all processes with name jetbrains-toolbox.exe...
Done!
PreOperation 1 out of 1 finished with result Succeeded
--------------------------------
Starting operation...
Executing process with StartInfo:
- FileName: "C:\Users\EricLoveland\scoop\shims\pwsh.exe"
- Arguments: "-NoProfile -ExecutionPolicy Bypass -Command "C:\Users\EricLoveland\scoop\shims\scoop.ps1" update extras/jetbrains-toolbox"
Start Time: "10/4/2025 1:13:31 AM"
Updating Scoop...
fatal: Cannot fast-forward to multiple branches.
Update failed.
End Time: "10/4/2025 1:13:37 AM"
Process return value: "1" (0x1)