Improve package listing parity#38
Merged
Gabriel Dufresne (GabrielDuf) merged 6 commits intoJun 8, 2026
Merged
Conversation
Add a tri-comparison script for winget, C# Pinget, and Rust Pinget listing metadata. Fix shared listing correlation, source ordering, installed-db identity tracking, duplicate available versions, and MSIX split-resource suppression. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Emit coarse install/update progress from the Rust core and have the CLI print phase messages before long-running download and installer waits. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Allow show metadata lookups that receive the WinGet manager alias to retry across the mirrored system source set when the default winget source has no match. Also allow source resolution by source identifier so custom REST identifiers work consistently. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Remove a Windows-test-only source installed DB path wrapper that was dead code on Linux clippy runs. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Gabriel Dufresne (GabrielDuf)
approved these changes
Jun 8, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This PR improves Pinget parity with the system
winget.exeacross package listing, installed-package identity, update/install feedback, and custom WinGet REST sources. It keeps the Rust and C# implementations aligned while preserving separate code paths for each implementation.Major changes
Package listing parity
scripts\compare-list.ps1to compare systemwinget listoutput against both Pinget implementations.list; only the newest installed row for a duplicated catalog ID now shows the available upgrade, matching WinGet.winget source exportordering for source priority parity.WinGet ARP identity metadata
WinGetPackageIdentifierandWinGetSourceIdentifier.tessl.tessl, keep the correct catalog ID even when Pinget runs with a private app root that does not already know the source.api.winget.pro->winget.pro.Private system WinGet source mirror
AutoPrivateSystemWingetMirrorAuto.PINGET_APPROOTis not explicitly set, Pinget mirrors system WinGet source definitions into Pinget-owned private state instead of requiring direct writes to WinGet LocalState.system-sources.json.PINGET_APPROOTand explicit libraryAppRootremain private by default.source updatein mirror mode refreshes Pinget private caches/index metadata for mirrored sources.source add,source remove, andsource resetin system-source modes continue to route throughwinget source ...rather than directly editing WinGet files.showmetadata for mirrored/custom sourcespinget show --id tessl.tessl --exact --source winget --output jsonwhen callers pass the WinGet manager alias (winget) instead of the custom REST source name (winget.pro).showandshow --versionsnow retry across the mirrored system WinGet source set only for clean misses from--source winget.api.winget.proin addition to friendly source names such aswinget.pro.Install/update progress
Important behavior changes
PINGET_APPROOTshould now be treated as Pinget's writable state root, not as the mechanism required for WinGet source parity.PINGET_APPROOTPinget calls can see system WinGet custom sources through the private mirror while avoiding writes to WinGet LocalState.show --source wingetfallback may return a package from a custom WinGet source when the defaultwingetsource has no match and system-source mirroring is active. This is intentional for UniGetUI-style manager-alias metadata lookups.Validation
cargo +nightly fmt --manifest-path rust\Cargo.toml --allcargo test -p pinget-core --manifest-path rust\Cargo.tomlcargo test -p pinget-cli --manifest-path rust\Cargo.tomlcargo clippy -q --manifest-path rust\Cargo.toml --workspace --tests -- -D warningscargo build -p pinget-cli --manifest-path rust\Cargo.toml --releasedotnet test dotnet\src\Devolutions.Pinget.Core.Tests\Devolutions.Pinget.Core.Tests.csproj -c Releasedotnet build dotnet\Devolutions.Pinget.slnx -c Releasetessl.tesslcorrectly with default no-PINGET_APPROOT, explicit private app root, and system WinGet app root modes.tessl.tesslmetadata forshow --id tessl.tessl --exact --source winget --output json.Known limitation
The remaining observed OpenSSL discrepancy is a WinGet query-context difference: unfiltered
winget listleaves multiple OpenSSL rows raw, while filtered WinGet queries and both Pinget implementations correlate them toShiningLight.OpenSSL.Dev. This PR does not fake different behavior for that case.