From 347f09f2f53465aca82a3c7fab2a08c28ea829eb Mon Sep 17 00:00:00 2001 From: Rob Reynolds Date: Thu, 11 Oct 2018 22:33:03 -0500 Subject: [PATCH] (GH-1397) Fix: Ensure config reset Ensure the config is reset to a known point with each package being run in an operation. Previously it was thought this was happening, but the way the reset occurred was actually changing the original configuration and the current. Ensure that is getting reset accordingly by doing the deep copy to set config each time through. --- .../services/NugetService.cs | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/chocolatey/infrastructure.app/services/NugetService.cs b/src/chocolatey/infrastructure.app/services/NugetService.cs index 0ae7bb243..0f1e6a8cc 100644 --- a/src/chocolatey/infrastructure.app/services/NugetService.cs +++ b/src/chocolatey/infrastructure.app/services/NugetService.cs @@ -436,9 +436,13 @@ public virtual ConcurrentDictionary install_run(Chocolate addUninstallHandler: true); bool repositoryIsServiceBased = repository_is_service_based(packageManager.SourceRepository); + var originalConfig = config; foreach (string packageName in packageNames.or_empty_list_if_null()) { + // reset config each time through + config = originalConfig.deep_copy(); + //todo: get smarter about realizing multiple versions have been installed before and allowing that IPackage installedPackage = packageManager.LocalRepository.FindPackage(packageName); @@ -612,12 +616,12 @@ public virtual ConcurrentDictionary upgrade_run(Chocolate set_package_names_if_all_is_specified(config, () => { config.IgnoreDependencies = true; }); config.IgnoreDependencies = configIgnoreDependencies; - var originalConfig = config.deep_copy(); + var originalConfig = config; foreach (string packageName in config.PackageNames.Split(new[] { ApplicationParameters.PackageNamesSeparator }, StringSplitOptions.RemoveEmptyEntries).or_empty_list_if_null()) { - // set original config back each time through - config = originalConfig; + // reset config each time through + config = originalConfig.deep_copy(); IPackage installedPackage = packageManager.LocalRepository.FindPackage(packageName); @@ -879,12 +883,12 @@ public ConcurrentDictionary get_outdated(ChocolateyConfig set_package_names_if_all_is_specified(config, () => { config.IgnoreDependencies = true; }); var packageNames = config.PackageNames.Split(new[] { ApplicationParameters.PackageNamesSeparator }, StringSplitOptions.RemoveEmptyEntries).or_empty_list_if_null().ToList(); - var originalConfig = config.deep_copy(); + var originalConfig = config; foreach (var packageName in packageNames) { - // set original config back each time through - config = originalConfig; + // reset config each time through + config = originalConfig.deep_copy(); var installedPackage = packageManager.LocalRepository.FindPackage(packageName); var pkgInfo = _packageInfoService.get_package_information(installedPackage); @@ -1367,8 +1371,13 @@ public virtual ConcurrentDictionary uninstall_run(Chocola config.ForceDependencies = false; }); + var originalConfig = config; + foreach (string packageName in config.PackageNames.Split(new[] { ApplicationParameters.PackageNamesSeparator }, StringSplitOptions.RemoveEmptyEntries).or_empty_list_if_null()) { + // reset config each time through + config = originalConfig.deep_copy(); + IList installedPackageVersions = new List(); if (string.IsNullOrWhiteSpace(config.Version)) {