From 04c08a57ffdf005495d6ef6180352d5de9ccd08c Mon Sep 17 00:00:00 2001 From: Wojciech Bigosinski <67651638+wojciech-bigosinski@users.noreply.github.com> Date: Sun, 2 Aug 2026 21:42:13 +0200 Subject: [PATCH] Handle pinget no-applicable upgrade output --- .../Helpers/WinGetPkgOperationHelper.cs | 4 +--- .../WinGetManagerTests.cs | 23 +++++++++++++++++++ 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/UniGetUI.PackageEngine.Managers.WinGet/Helpers/WinGetPkgOperationHelper.cs b/src/UniGetUI.PackageEngine.Managers.WinGet/Helpers/WinGetPkgOperationHelper.cs index cac9fad009..cdfceac10c 100644 --- a/src/UniGetUI.PackageEngine.Managers.WinGet/Helpers/WinGetPkgOperationHelper.cs +++ b/src/UniGetUI.PackageEngine.Managers.WinGet/Helpers/WinGetPkgOperationHelper.cs @@ -267,13 +267,11 @@ operation is OperationType.Uninstall return OperationVeredict.Failure; } - // WinGet (CLI/COM) reports "not applicable" as 0x8A15002B; bundled pinget instead exits - // non-zero with "No applicable installer found" in its output. bool pingetReportedNotApplicable = ((WinGet)Manager).SelectedCliToolKind is WinGetCliToolKind.BundledPinget - && returnCode != 0 && processOutput.Any(line => line.Contains("No applicable installer found", StringComparison.OrdinalIgnoreCase) + || line.Contains("No applicable upgrade found", StringComparison.OrdinalIgnoreCase) ); if (uintCode is 0x8A15002B || pingetReportedNotApplicable) diff --git a/src/UniGetUI.PackageEngine.Tests/WinGetManagerTests.cs b/src/UniGetUI.PackageEngine.Tests/WinGetManagerTests.cs index b97962a1b2..92034f67a3 100644 --- a/src/UniGetUI.PackageEngine.Tests/WinGetManagerTests.cs +++ b/src/UniGetUI.PackageEngine.Tests/WinGetManagerTests.cs @@ -1180,6 +1180,29 @@ public void WinGetUpdateNotApplicableViaPingetRetriesWithoutScopeAndArchitecture Assert.True(package.OverridenOptions.WinGet_DropArchAndScope); } + [Fact] + public void WinGetUpdateNotApplicableViaPingetWithZeroExitCodeFails() + { + var manager = new WinGet(); + SetCliToolKind(manager, WinGetCliToolKind.BundledPinget); + var package = new PackageBuilder() + .WithManager(manager) + .WithId("Contoso.Tool") + .WithVersion("1.0.0") + .WithNewVersion("2.0.0") + .Build(); + + var veredict = manager.OperationHelper.GetResult( + package, + OperationType.Update, + ["No applicable upgrade found."], + 0 + ); + + OperationAssert.HasVeredict(veredict, OperationVeredict.Failure); + Assert.True(WinGetPkgOperationHelper.IsStuckUpgradeLoop(package)); + } + [Fact] public void WinGetGenericPingetFailureDoesNotRetry() {