Skip to content

Commit c0f06db

Browse files
committed
(#1479) Implement using remembed arguments for uninstalls
This adds the ability for the remembered argument to be reused for uninstalls. It can be controlled via the userememberedargs and ignorerememberedargs arguments, or via the previously added feature.
1 parent ce1556d commit c0f06db

File tree

2 files changed

+25
-8
lines changed

2 files changed

+25
-8
lines changed

src/chocolatey/infrastructure.app/commands/ChocolateyUninstallCommand.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,18 @@ public virtual void ConfigureArgumentParser(OptionSet optionSet, ChocolateyConfi
146146
"Skip hooks - Do not run hook scripts. Available in 1.2.0+",
147147
option => configuration.SkipHookScripts = option != null
148148
)
149+
.Add("userememberedargs|userememberedarguments|userememberedoptions|use-remembered-args|use-remembered-arguments|use-remembered-options",
150+
"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+.".format_with(ApplicationParameters.Features.UseRememberedArgumentsForUninstalls, configuration.Features.UseRememberedArgumentsForUninstalls.to_string()),
151+
option =>
152+
{
153+
if (option != null) configuration.Features.UseRememberedArgumentsForUninstalls = true;
154+
})
155+
.Add("ignorerememberedargs|ignorerememberedarguments|ignorerememberedoptions|ignore-remembered-args|ignore-remembered-arguments|ignore-remembered-options",
156+
"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+.".format_with(ApplicationParameters.Features.UseRememberedArgumentsForUninstalls, configuration.Features.UseRememberedArgumentsForUninstalls.to_string()),
157+
option =>
158+
{
159+
if (option != null) configuration.Features.UseRememberedArgumentsForUninstalls = false;
160+
})
149161
;
150162
}
151163

src/chocolatey/infrastructure.app/services/NugetService.cs

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1662,8 +1662,8 @@ public virtual ConcurrentDictionary<string, PackageResult> GetOutdated(Chocolate
16621662
protected virtual ChocolateyConfiguration SetConfigFromRememberedArguments(ChocolateyConfiguration config, ChocolateyPackageInformation packageInfo, CommandNameType commandType = CommandNameType.Upgrade)
16631663
{
16641664
if (string.IsNullOrWhiteSpace(packageInfo.Arguments)) return config;
1665-
if (commandType == CommandNameType.upgrade && !config.Features.UseRememberedArgumentsForUpgrades) return config;
1666-
if (commandType == CommandNameType.uninstall && !config.Features.UseRememberedArgumentsForUninstalls) return config;
1665+
if (commandType == CommandNameType.Upgrade && !config.Features.UseRememberedArgumentsForUpgrades) return config;
1666+
if (commandType == CommandNameType.Uninstall && !config.Features.UseRememberedArgumentsForUninstalls) return config;
16671667

16681668
var packageArgumentsUnencrypted = packageInfo.Arguments.ContainsSafe(" --") && packageInfo.Arguments.ToStringSafe().Length > 4 ? packageInfo.Arguments : NugetEncryptionUtility.DecryptString(packageInfo.Arguments);
16691669

@@ -1734,12 +1734,7 @@ public virtual ChocolateyConfiguration GetPackageConfigFromRememberedArguments(C
17341734

17351735
var packageArgumentsUnencrypted = packageInfo.Arguments.ContainsSafe(" --") && packageInfo.Arguments.ToStringSafe().Length > 4 ? packageInfo.Arguments : NugetEncryptionUtility.DecryptString(packageInfo.Arguments);
17361736

1737-
var sensitiveArgs = true;
1738-
if (!ArgumentsUtility.SensitiveArgumentsProvided(packageArgumentsUnencrypted))
1739-
{
1740-
sensitiveArgs = false;
1741-
this.Log().Debug(ChocolateyLoggers.Verbose, "{0} - Adding remembered arguments: {1}".FormatWith(packageInfo.Package.Id, packageArgumentsUnencrypted.EscapeCurlyBraces()));
1742-
}
1737+
var sensitiveArgs = ArgumentsUtility.SensitiveArgumentsProvided(packageArgumentsUnencrypted);
17431738

17441739
var packageArgumentsSplit = packageArgumentsUnencrypted.Split(new[] { " --" }, StringSplitOptions.RemoveEmptyEntries);
17451740
var packageArguments = new List<string>();
@@ -1754,10 +1749,18 @@ public virtual ChocolateyConfiguration GetPackageConfigFromRememberedArguments(C
17541749
if (optionValue.StartsWith("'")) optionValue.UnquoteSafe();
17551750
}
17561751

1752+
//Don't add install arguments during uninstall. We don't want a argument for the installer to be passed to the uninstaller.
1753+
if (string.Equals(optionName, "install-arguments", StringComparison.OrdinalIgnoreCase) && commandType == CommandNameType.Uninstall) continue;
1754+
if (string.Equals(optionName, "override-argument", StringComparison.OrdinalIgnoreCase) && commandType == CommandNameType.Uninstall) continue;
1755+
17571756
if (sensitiveArgs)
17581757
{
17591758
this.Log().Debug(ChocolateyLoggers.Verbose, "{0} - Adding '{1}' to arguments. Values not shown due to detected sensitive arguments".FormatWith(packageInfo.Package.Id, optionName.EscapeCurlyBraces()));
17601759
}
1760+
else
1761+
{
1762+
this.Log().Debug(ChocolateyLoggers.Verbose, "{0} - Adding '{1}' to arguments with a value of '{2}'".format_with(packageInfo.Package.Id, optionName.EscapeCurlyBraces(), optionValue.EscapeCurlyBraces()));
1763+
}
17611764
packageArguments.Add("--{0}{1}".FormatWith(optionName, string.IsNullOrWhiteSpace(optionValue) ? string.Empty : "=" + optionValue));
17621765
}
17631766

@@ -2383,6 +2386,8 @@ public virtual ConcurrentDictionary<string, PackageResult> Uninstall(ChocolateyC
23832386
continue;
23842387
}
23852388

2389+
config = GetPackageConfigFromRememberedArguments(config, pkgInfo);
2390+
23862391
if (performAction)
23872392
{
23882393
var allPackagesIdentities = allLocalPackages.Where(p => !p.Identity.Equals(installedPackage)).Select(p => p.SearchMetadata.Identity).ToList();

0 commit comments

Comments
 (0)