diff --git a/src/PowerShell/Microsoft.WinGet.Client.Cmdlets/Cmdlets/AssertWinGetPackageManagerCmdlet.cs b/src/PowerShell/Microsoft.WinGet.Client.Cmdlets/Cmdlets/AssertWinGetPackageManagerCmdlet.cs index b33bdbd502..4c68f32288 100644 --- a/src/PowerShell/Microsoft.WinGet.Client.Cmdlets/Cmdlets/AssertWinGetPackageManagerCmdlet.cs +++ b/src/PowerShell/Microsoft.WinGet.Client.Cmdlets/Cmdlets/AssertWinGetPackageManagerCmdlet.cs @@ -34,7 +34,7 @@ protected override void ProcessRecord() } else { - command.Assert(this.Version); + command.Assert(this.Version, this.IncludePrerelease.ToBool()); } } } diff --git a/src/PowerShell/Microsoft.WinGet.Client.Cmdlets/Cmdlets/Common/WinGetPackageManagerCmdlet.cs b/src/PowerShell/Microsoft.WinGet.Client.Cmdlets/Cmdlets/Common/WinGetPackageManagerCmdlet.cs index 3d2f4d16d7..7d2bd9121e 100644 --- a/src/PowerShell/Microsoft.WinGet.Client.Cmdlets/Cmdlets/Common/WinGetPackageManagerCmdlet.cs +++ b/src/PowerShell/Microsoft.WinGet.Client.Cmdlets/Cmdlets/Common/WinGetPackageManagerCmdlet.cs @@ -34,7 +34,6 @@ public abstract class WinGetPackageManagerCmdlet : PSCmdlet /// Gets or sets a value indicating whether to include prerelease winget versions. /// [Parameter( - ParameterSetName = Constants.IntegrityLatestSet, ValueFromPipelineByPropertyName = true)] public SwitchParameter IncludePrerelease { get; set; } } diff --git a/src/PowerShell/Microsoft.WinGet.Client.Cmdlets/Cmdlets/RepairWinGetPackageManagerCmdlet.cs b/src/PowerShell/Microsoft.WinGet.Client.Cmdlets/Cmdlets/RepairWinGetPackageManagerCmdlet.cs index b3e6ae4df2..4939355878 100644 --- a/src/PowerShell/Microsoft.WinGet.Client.Cmdlets/Cmdlets/RepairWinGetPackageManagerCmdlet.cs +++ b/src/PowerShell/Microsoft.WinGet.Client.Cmdlets/Cmdlets/RepairWinGetPackageManagerCmdlet.cs @@ -49,7 +49,7 @@ protected override void ProcessRecord() } else { - this.command.Repair(this.Version, this.AllUsers.ToBool(), this.Force.ToBool()); + this.command.Repair(this.Version, this.AllUsers.ToBool(), this.Force.ToBool(), this.IncludePrerelease.ToBool()); } } diff --git a/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/WinGetPackageManagerCommand.cs b/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/WinGetPackageManagerCommand.cs index cdf5f16d51..aa529cab98 100644 --- a/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/WinGetPackageManagerCommand.cs +++ b/src/PowerShell/Microsoft.WinGet.Client.Engine/Commands/WinGetPackageManagerCommand.cs @@ -56,8 +56,11 @@ public void AssertUsingLatest(bool preRelease) /// Asserts the version installed is the specified. /// /// The expected version. - public void Assert(string expectedVersion) + /// Include prerelease versions when validating the specified version. + public void Assert(string expectedVersion, bool preRelease = false) { + // The preRelease parameter is for consistency but not used in this method + // since we're checking for an exact version match WinGetIntegrity.AssertWinGet(this, expectedVersion); } @@ -88,12 +91,21 @@ public void RepairUsingLatest(bool preRelease, bool allUsers, bool force) /// The expected version, if any. /// Install for all users. Requires admin. /// Force application shutdown. - public void Repair(string expectedVersion, bool allUsers, bool force) + /// Include prerelease versions when searching for the specified version. + public void Repair(string expectedVersion, bool allUsers, bool force, bool preRelease = false) { this.ValidateWhenAllUsers(allUsers); var runningTask = this.RunOnMTA( async () => { + // If no specific version is provided and IncludePrerelease is specified, + // we need to get the latest prerelease version + if (string.IsNullOrEmpty(expectedVersion) && preRelease) + { + var gitHubClient = new GitHubClient(RepositoryOwner.Microsoft, RepositoryName.WinGetCli); + expectedVersion = await gitHubClient.GetLatestReleaseTagNameAsync(true); + } + await this.RepairStateMachineAsync(expectedVersion, allUsers, force); return true; });