From 108236e15d0ee35425ceba552a7db057234c66be Mon Sep 17 00:00:00 2001 From: Rob Reynolds <ferventcoder@gmail.com> Date: Sun, 25 Jan 2015 17:57:26 -0600 Subject: [PATCH] (GH-10) install from packages.config file If a config file is specified, use that to determine settings for each package to install. Clone the config and make adjustments based on what is in the packages.config file for that particular package. --- .../services/ChocolateyPackageService.cs | 41 +++++++++++++------ 1 file changed, 29 insertions(+), 12 deletions(-) diff --git a/src/chocolatey/infrastructure.app/services/ChocolateyPackageService.cs b/src/chocolatey/infrastructure.app/services/ChocolateyPackageService.cs index 20cb3e0f1a..e3de220ce9 100644 --- a/src/chocolatey/infrastructure.app/services/ChocolateyPackageService.cs +++ b/src/chocolatey/infrastructure.app/services/ChocolateyPackageService.cs @@ -23,6 +23,7 @@ namespace chocolatey.infrastructure.app.services using configuration; using domain; using filesystem; + using infrastructure.services; using logging; using platforms; using results; @@ -36,8 +37,9 @@ public class ChocolateyPackageService : IChocolateyPackageService private readonly IRegistryService _registryService; private readonly IChocolateyPackageInformationService _packageInfoService; private readonly IAutomaticUninstallerService _autoUninstallerService; + private readonly IXmlService _xmlService; - public ChocolateyPackageService(INugetService nugetService, IPowershellService powershellService, IShimGenerationService shimgenService, IFileSystem fileSystem, IRegistryService registryService, IChocolateyPackageInformationService packageInfoService, IAutomaticUninstallerService autoUninstallerService) + public ChocolateyPackageService(INugetService nugetService, IPowershellService powershellService, IShimGenerationService shimgenService, IFileSystem fileSystem, IRegistryService registryService, IChocolateyPackageInformationService packageInfoService, IAutomaticUninstallerService autoUninstallerService, IXmlService xmlService) { _nugetService = nugetService; _powershellService = powershellService; @@ -46,6 +48,7 @@ public ChocolateyPackageService(INugetService nugetService, IPowershellService p _registryService = registryService; _packageInfoService = packageInfoService; _autoUninstallerService = autoUninstallerService; + _xmlService = xmlService; } public void list_noop(ChocolateyConfiguration config) @@ -216,13 +219,11 @@ public ConcurrentDictionary<string, PackageResult> install_run(ChocolateyConfigu var packageInstalls = new ConcurrentDictionary<string, PackageResult>(); - var originalConfig = config.deep_copy(); - //each package can specify its own configuration values foreach (var packageConfig in set_config_from_package_names_and_packages_config(config, packageInstalls).or_empty_list_if_null()) { var results = _nugetService.install_run( - config, + packageConfig, (packageResult) => handle_package_result(packageResult, packageConfig, CommandNameType.install) ); foreach (var result in results) @@ -263,11 +264,8 @@ private IEnumerable<ChocolateyConfiguration> set_config_from_package_names_and_p { config.PackageNames = config.PackageNames.Replace(packageConfigFile, string.Empty); - foreach (var package in get_packages_from_config(packageConfigFile, packageInstalls).or_empty_list_if_null()) + foreach (var packageConfig in get_packages_from_config(packageConfigFile, config, packageInstalls).or_empty_list_if_null()) { - var packageConfig = config.deep_copy(); - packageConfig.PackageNames = package; - yield return packageConfig; } } @@ -275,9 +273,9 @@ private IEnumerable<ChocolateyConfiguration> set_config_from_package_names_and_p yield return config; } - private IEnumerable<string> get_packages_from_config(string packageConfigFile, ConcurrentDictionary<string, PackageResult> packageInstalls) + private IEnumerable<ChocolateyConfiguration> get_packages_from_config(string packageConfigFile, ChocolateyConfiguration config, ConcurrentDictionary<string, PackageResult> packageInstalls) { - IList<string> packages = new List<string>(); + IList<ChocolateyConfiguration> packageConfigs = new List<ChocolateyConfiguration>(); if (!_fileSystem.file_exists(_fileSystem.get_full_path(packageConfigFile))) { @@ -286,10 +284,29 @@ private IEnumerable<string> get_packages_from_config(string packageConfigFile, C var results = packageInstalls.GetOrAdd(packageConfigFile, new PackageResult(packageConfigFile, null, null)); results.Messages.Add(new ResultMessage(ResultType.Error, logMessage)); - return packages; + return packageConfigs; + } + + var settings = _xmlService.deserialize<PackagesConfigFileSettings>(_fileSystem.get_full_path(packageConfigFile)); + foreach (var pkgSettings in settings.Packages.or_empty_list_if_null()) + { + if (!pkgSettings.Disabled) + { + var packageConfig = config.deep_copy(); + packageConfig.PackageNames = pkgSettings.Id; + packageConfig.Sources = string.IsNullOrWhiteSpace(pkgSettings.Source) ? packageConfig.Sources : pkgSettings.Source; + packageConfig.Version = pkgSettings.Version; + packageConfig.InstallArguments = string.IsNullOrWhiteSpace(pkgSettings.InstallArguments) ? packageConfig.InstallArguments : pkgSettings.InstallArguments; + packageConfig.PackageParameters = string.IsNullOrWhiteSpace(pkgSettings.PackageParameters) ? packageConfig.PackageParameters : pkgSettings.PackageParameters; + if (pkgSettings.ForceX86) packageConfig.ForceX86 = true; + if (pkgSettings.AllowMultipleVersions) packageConfig.AllowMultipleVersions = true; + if (pkgSettings.IgnoreDependencies) packageConfig.IgnoreDependencies = true; + + packageConfigs.Add(packageConfig); + } } - return packages; + return packageConfigs; } public void upgrade_noop(ChocolateyConfiguration config)