Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

(#1479) Add ability to use remembered arguments during uninstall #2648

Open
wants to merge 7 commits into
base: develop
Choose a base branch
from
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,78 @@ public void Should_add_short_version_of_skip_hooks_to_the_option_set()
{
_optionSet.Contains("skiphooks").Should().BeTrue();
}

[Fact]
public void Should_add_short_version_of_userememberedargs_to_the_option_set()
{
_optionSet.Contains("userememberedargs").Should().BeTrue();
}

[Fact]
public void Should_add_short_version_of_userememberedarguments_to_the_option_set()
{
_optionSet.Contains("userememberedarguments").Should().BeTrue();
}

[Fact]
public void Should_add_short_version_of_userememberedoptions_to_the_option_set()
{
_optionSet.Contains("userememberedoptions").Should().BeTrue();
}

[Fact]
public void Should_add_userememberedargs_to_the_option_set()
{
_optionSet.Contains("use-remembered-args").Should().BeTrue();
}

[Fact]
public void Should_add_userememberedarguments_to_the_option_set()
{
_optionSet.Contains("use-remembered-arguments").Should().BeTrue();
}

[Fact]
public void Should_add_userememberedoptions_to_the_option_set()
{
_optionSet.Contains("use-remembered-options").Should().BeTrue();
}

[Fact]
public void Should_add_short_version_of_ignorerememberedargs_to_the_option_set()
{
_optionSet.Contains("ignorerememberedargs").Should().BeTrue();
}

[Fact]
public void Should_add_short_version_of_ignorerememberedarguments_to_the_option_set()
{
_optionSet.Contains("ignorerememberedarguments").Should().BeTrue();
}

[Fact]
public void Should_add_short_version_of_ignorerememberedoptions_to_the_option_set()
{
_optionSet.Contains("ignorerememberedoptions").Should().BeTrue();
}

[Fact]
public void Should_add_ignorerememberedargs_to_the_option_set()
{
_optionSet.Contains("ignore-remembered-args").Should().BeTrue();
}

[Fact]
public void Should_add_ignorerememberedarguments_to_the_option_set()
{
_optionSet.Contains("ignore-remembered-arguments").Should().BeTrue();
}

[Fact]
public void Should_add_ignorerememberedoptions_to_the_option_set()
{
_optionSet.Contains("ignore-remembered-options").Should().BeTrue();
}
}

public class When_handling_additional_argument_parsing : ChocolateyUninstallCommandSpecsBase
Expand Down
1 change: 1 addition & 0 deletions src/chocolatey/infrastructure.app/ApplicationParameters.cs
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,7 @@ public static class Features
public static readonly string ShowDownloadProgress = "showDownloadProgress";
public static readonly string StopOnFirstPackageFailure = "stopOnFirstPackageFailure";
public static readonly string UseRememberedArgumentsForUpgrades = "useRememberedArgumentsForUpgrades";
public static readonly string UseRememberedArgumentsForUninstalls = "useRememberedArgumentsForUninstalls";
public static readonly string IgnoreUnfoundPackagesOnUpgradeOutdated = "ignoreUnfoundPackagesOnUpgradeOutdated";
public static readonly string SkipPackageUpgradesWhenNotInstalled = "skipPackageUpgradesWhenNotInstalled";
public static readonly string RemovePackageInformationOnUninstall = "removePackageInformationOnUninstall";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -332,6 +332,7 @@ private static void SetAllFeatureFlags(ChocolateyConfiguration config, ConfigFil
config.Features.ShowDownloadProgress = SetFeatureFlag(ApplicationParameters.Features.ShowDownloadProgress, configFileSettings, defaultEnabled: true, description: "Show Download Progress - Show download progress percentages in the CLI.");
config.Features.StopOnFirstPackageFailure = SetFeatureFlag(ApplicationParameters.Features.StopOnFirstPackageFailure, configFileSettings, defaultEnabled: false, description: "Stop On First Package Failure - Stop running install, upgrade or uninstall on first package failure instead of continuing with others. As this will affect upgrade all, it is normally recommended to leave this off.");
config.Features.UseRememberedArgumentsForUpgrades = SetFeatureFlag(ApplicationParameters.Features.UseRememberedArgumentsForUpgrades, configFileSettings, defaultEnabled: false, description: "Use Remembered Arguments For Upgrades - When running upgrades, use arguments for upgrade that were used for installation ('remembered'). This is helpful when running upgrade for all packages. This is considered in preview and will be flipped to on by default in a future release.");
config.Features.UseRememberedArgumentsForUninstalls = SetFeatureFlag(ApplicationParameters.Features.UseRememberedArgumentsForUninstalls, configFileSettings, defaultEnabled: false, description: "Use Remembered Arguments For Uninstalls - When running uninstalls, use arguments for uninstall that were used for installation or upgrade ('remembered'). Does not include --install-args. Available in 2.4.0+. This is considered in preview and will be flipped to on by default in a future release.");
config.Features.IgnoreUnfoundPackagesOnUpgradeOutdated = SetFeatureFlag(ApplicationParameters.Features.IgnoreUnfoundPackagesOnUpgradeOutdated, configFileSettings, defaultEnabled: false, description: "Ignore Unfound Packages On Upgrade Outdated - When checking outdated or upgrades, if a package is not found against sources specified, don't report the package at all.");
config.Features.SkipPackageUpgradesWhenNotInstalled = SetFeatureFlag(ApplicationParameters.Features.SkipPackageUpgradesWhenNotInstalled, configFileSettings, defaultEnabled: false, description: "Skip Packages Not Installed During Upgrade - if a package is not installed, do not install it during the upgrade process.");
config.Features.RemovePackageInformationOnUninstall = SetFeatureFlag(ApplicationParameters.Features.RemovePackageInformationOnUninstall, configFileSettings, defaultEnabled: false, description: "Remove Stored Package Information On Uninstall - When a package is uninstalled, should the stored package information also be removed? ");
Expand Down Expand Up @@ -419,11 +420,16 @@ private static void SetGlobalOptions(IList<string> args, ChocolateyConfiguration
if (timeout > 0 || timeoutString.IsEqualTo("0"))
{
config.CommandExecutionTimeoutSeconds = timeout;
config.CommandExecutionTimeoutSecondsArgumentWasPassed = true;
}
})
.Add("c=|cache=|cachelocation=|cache-location=",
"CacheLocation - Location for download cache, defaults to %TEMP% or value in chocolatey.config file.",
option => config.CacheLocation = option.UnquoteSafe())
option =>
{
config.CacheLocation = option.UnquoteSafe();
config.CacheLocationArgumentWasPassed = true;
})
.Add("allowunofficial|allow-unofficial|allowunofficialbuild|allow-unofficial-build",
"AllowUnofficialBuild - When not using the official build you must set this flag for choco to continue.",
option => config.AllowUnofficialBuild = option != null)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,18 @@ public virtual void ConfigureArgumentParser(OptionSet optionSet, ChocolateyConfi
"Skip hooks - Do not run hook scripts. Available in 1.2.0+",
option => configuration.SkipHookScripts = option != null
)
.Add("userememberedargs|userememberedarguments|userememberedoptions|use-remembered-args|use-remembered-arguments|use-remembered-options",
"Use Remembered Options for Uninstall - use the arguments and options used during install/upgrade for uninstall. Does not override arguments being passed at runtime. Overrides the default feature '{0}' set to '{1}'. Available in 2.4.0+.".FormatWith(ApplicationParameters.Features.UseRememberedArgumentsForUninstalls, configuration.Features.UseRememberedArgumentsForUninstalls.ToString()),
option =>
{
if (option != null) configuration.Features.UseRememberedArgumentsForUninstalls = true;
})
.Add("ignorerememberedargs|ignorerememberedarguments|ignorerememberedoptions|ignore-remembered-args|ignore-remembered-arguments|ignore-remembered-options",
"Ignore Remembered Options for Uninstall - ignore the arguments and options used during install for Uninstall. Overrides the default feature '{0}' set to '{1}'. Available in 2.4.0+.".FormatWith(ApplicationParameters.Features.UseRememberedArgumentsForUninstalls, configuration.Features.UseRememberedArgumentsForUninstalls.ToString()),
option =>
{
if (option != null) configuration.Features.UseRememberedArgumentsForUninstalls = false;
})
;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -251,8 +251,10 @@ private void AppendOutput(StringBuilder propertyValues, string append)

// configuration set variables
public string CacheLocation { get; set; }
public bool CacheLocationArgumentWasPassed { get; set; }

public int CommandExecutionTimeoutSeconds { get; set; }
public bool CommandExecutionTimeoutSecondsArgumentWasPassed { get; set; }
public int WebRequestTimeoutSeconds { get; set; }
public string DefaultTemplateName { get; set; }

Expand Down Expand Up @@ -555,6 +557,7 @@ public sealed class FeaturesConfiguration
public bool ShowDownloadProgress { get; set; }
public bool StopOnFirstPackageFailure { get; set; }
public bool UseRememberedArgumentsForUpgrades { get; set; }
public bool UseRememberedArgumentsForUninstalls { get; set; }
public bool IgnoreUnfoundPackagesOnUpgradeOutdated { get; set; }
public bool SkipPackageUpgradesWhenNotInstalled { get; set; }
public bool RemovePackageInformationOnUninstall { get; set; }
Expand Down
12 changes: 12 additions & 0 deletions src/chocolatey/infrastructure.app/services/INugetService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
using System.Collections.Concurrent;
using System.Collections.Generic;
using chocolatey.infrastructure.app.configuration;
using chocolatey.infrastructure.app.domain;
using chocolatey.infrastructure.results;

namespace chocolatey.infrastructure.app.services
Expand Down Expand Up @@ -67,6 +68,17 @@ public interface INugetService : ISourceRunner
/// <param name="config">The configuration</param>
IEnumerable<PackageResult> GetInstalledPackages(ChocolateyConfiguration config);


/// <summary>
/// Gets the configuration from remembered arguments
/// </summary>
/// <param name="config">The original configuration.</param>
/// <param name="packageInfo">The package information.</param>
/// <param name="commandType">The command type</param>
/// <returns>The modified configuration, so it can be used</returns>
ChocolateyConfiguration GetPackageConfigFromRememberedArguments(ChocolateyConfiguration config,
ChocolateyPackageInformation packageInfo, CommandNameType commandType = CommandNameType.Upgrade);

#pragma warning disable IDE0022, IDE1006
[Obsolete("This overload is deprecated and will be removed in v3.")]
ConcurrentDictionary<string, PackageResult> get_outdated(ChocolateyConfiguration config);
Expand Down
Loading
Loading