From 5865e6c805ae7c15fa08d2895018d57232548bf2 Mon Sep 17 00:00:00 2001 From: TheCakeIsNaOH Date: Sat, 20 Nov 2021 18:49:41 -0600 Subject: [PATCH] (#2050) Upgrade add parameter to bypass pins This adds a switch to the upgrade command to bypass/ignore any pinned packages. It will write out a warning message if a pinned package is being upgraded. The package will remain pinned after the upgrade completes, although pinned to the new version. --- .../commands/ChocolateyUpgradeCommand.cs | 4 +++ .../configuration/ChocolateyConfiguration.cs | 1 + .../services/NugetService.cs | 25 ++++++++++++++----- 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/src/chocolatey/infrastructure.app/commands/ChocolateyUpgradeCommand.cs b/src/chocolatey/infrastructure.app/commands/ChocolateyUpgradeCommand.cs index 6accfe2334..320b62e485 100644 --- a/src/chocolatey/infrastructure.app/commands/ChocolateyUpgradeCommand.cs +++ b/src/chocolatey/infrastructure.app/commands/ChocolateyUpgradeCommand.cs @@ -226,6 +226,10 @@ public virtual void configure_argument_parser(OptionSet optionSet, ChocolateyCon "Skip hooks - Do not run hook scripts. Available in 1.2.0+", option => configuration.SkipHookScripts = option != null ) + .Add("bypass-pins|ignore-pins", + "Bypass Pin(s) - Bypass any pins and upgrade the packages anyways. Defaults to false. Available in 1.0.0+", + option => configuration.UpgradeCommand.BypassPins = option != null) + ) ; } diff --git a/src/chocolatey/infrastructure.app/configuration/ChocolateyConfiguration.cs b/src/chocolatey/infrastructure.app/configuration/ChocolateyConfiguration.cs index 549ac89cb8..fbda3f7998 100644 --- a/src/chocolatey/infrastructure.app/configuration/ChocolateyConfiguration.cs +++ b/src/chocolatey/infrastructure.app/configuration/ChocolateyConfiguration.cs @@ -552,6 +552,7 @@ public sealed class UpgradeCommandConfiguration public bool NotifyOnlyAvailableUpgrades { get; set; } public string PackageNamesToSkip { get; set; } public bool ExcludePrerelease { get; set; } + public bool BypassPins { get; set; } } [Serializable] diff --git a/src/chocolatey/infrastructure.app/services/NugetService.cs b/src/chocolatey/infrastructure.app/services/NugetService.cs index 651cd84e68..aaeb718676 100644 --- a/src/chocolatey/infrastructure.app/services/NugetService.cs +++ b/src/chocolatey/infrastructure.app/services/NugetService.cs @@ -683,7 +683,7 @@ public virtual ConcurrentDictionary upgrade_run(Chocolate var pkgInfo = _packageInfoService.get_package_information(installedPackage); bool isPinned = pkgInfo != null && pkgInfo.IsPinned; - if (isPinned && config.OutdatedCommand.IgnorePinned) + if (isPinned && config.OutdatedCommand.IgnorePinned && !config.UpgradeCommand.BypassPins) { continue; } @@ -815,12 +815,25 @@ public virtual ConcurrentDictionary upgrade_run(Chocolate if (isPinned) { - string logMessage = "{0} is pinned. Skipping pinned package.".format_with(packageName); - packageResult.Messages.Add(new ResultMessage(ResultType.Warn, logMessage)); - packageResult.Messages.Add(new ResultMessage(ResultType.Inconclusive, logMessage)); - if (config.RegularOutput) this.Log().Warn(ChocolateyLoggers.Important, logMessage); + if (!config.UpgradeCommand.BypassPins) + { + string logMessage = "{0} is pinned. Skipping pinned package.".format_with(packageName); + packageResult.Messages.Add(new ResultMessage(ResultType.Warn, logMessage)); + packageResult.Messages.Add(new ResultMessage(ResultType.Inconclusive, logMessage)); + if (config.RegularOutput) this.Log().Warn(ChocolateyLoggers.Important, logMessage); - continue; + continue; + } + else + { + string logMessage = "{0} is pinned. Upgrading pinned package anyway as bypass-pins is specified".format_with(packageName); + packageResult.Messages.Add(new ResultMessage(ResultType.Warn, logMessage)); + if (config.RegularOutput) this.Log().Warn(ChocolateyLoggers.Important, logMessage); + config.PinPackage = true; + + //Reset the config in ChocolateyPackageService in so the package will be re-pinned after install + rconfig.reset_config(); + } } set_package_config_for_upgrade(config, pkgInfo);