public void UpdatePackageSource(PackageSource source, bool updateCredentials, bool updateEnabled) { if (source == null) { throw new ArgumentNullException(nameof(source)); } var packageSources = GetExistingSettingsLookup(); packageSources.TryGetValue(source.Name, out var sourceToUpdate); if (sourceToUpdate != null) { AddItem disabledSourceItem = null; CredentialsItem credentialsSettingsItem = null; if (updateEnabled) { // get list of disabled packages var disabledSourcesSection = Settings.GetSection(ConfigurationConstants.DisabledPackageSources); disabledSourceItem = disabledSourcesSection?.GetFirstItemWithAttribute <AddItem>(ConfigurationConstants.KeyAttribute, sourceToUpdate.ElementName); } if (updateCredentials) { // get list of credentials for sources var credentialsSection = Settings.GetSection(ConfigurationConstants.CredentialsSectionName); credentialsSettingsItem = credentialsSection?.Items.OfType <CredentialsItem>().Where(s => string.Equals(s.ElementName, sourceToUpdate.Key, StringComparison.OrdinalIgnoreCase)).FirstOrDefault(); } var oldPackageSource = ReadPackageSource(sourceToUpdate, disabledSourceItem == null); var isDirty = false; UpdatePackageSource( source, oldPackageSource, disabledSourceItem, credentialsSettingsItem, updateEnabled, updateCredentials, shouldSkipSave: false, isDirty: ref isDirty); } }
public void SetValue(string section, string key, string value) { if (string.IsNullOrEmpty(section)) { throw new ArgumentException(Resources.Argument_Cannot_Be_Null_Or_Empty, nameof(section)); } if (string.IsNullOrEmpty(key)) { throw new ArgumentException(Resources.Argument_Cannot_Be_Null_Or_Empty, nameof(key)); } var itemToAdd = new AddItem(key, value); if (string.Equals(section, ConfigurationConstants.PackageSources, StringComparison.OrdinalIgnoreCase)) { itemToAdd = new SourceItem(key, value); } AddOrUpdate(section, itemToAdd); SaveToDisk(); }
public void SavePackageSources(IEnumerable <PackageSource> sources) { if (sources == null) { throw new ArgumentNullException(nameof(sources)); } var isDirty = false; var existingSettingsLookup = GetExistingSettingsLookup(); var disabledSourcesSection = Settings.GetSection(ConfigurationConstants.DisabledPackageSources); var existingDisabledSources = disabledSourcesSection?.Items.OfType <AddItem>(); var existingDisabledSourcesLookup = existingDisabledSources?.ToDictionary(setting => setting.Key, StringComparer.OrdinalIgnoreCase); var credentialsSection = Settings.GetSection(ConfigurationConstants.CredentialsSectionName); var existingCredentials = credentialsSection?.Items.OfType <CredentialsItem>(); var existingCredentialsLookup = existingCredentials?.ToDictionary(setting => setting.ElementName, StringComparer.OrdinalIgnoreCase); foreach (var source in sources) { AddItem existingDisabledSourceItem = null; SourceItem existingSourceItem = null; CredentialsItem existingCredentialsItem = null; var existingSourceIsEnabled = existingDisabledSourcesLookup == null || existingDisabledSourcesLookup.TryGetValue(source.Name, out existingDisabledSourceItem); if (existingSettingsLookup != null && existingSettingsLookup.TryGetValue(source.Name, out existingSourceItem) && ReadProtocolVersion(existingSourceItem) == source.ProtocolVersion) { var oldPackageSource = ReadPackageSource(existingSourceItem, existingSourceIsEnabled); existingCredentialsLookup?.TryGetValue(source.Name, out existingCredentialsItem); UpdatePackageSource( source, oldPackageSource, existingDisabledSourceItem, existingCredentialsItem, updateEnabled: true, updateCredentials: true, shouldSkipSave: true, isDirty: ref isDirty); } else { AddPackageSource(source, shouldSkipSave: true, isDirty: ref isDirty); } if (existingSourceItem != null) { existingSettingsLookup.Remove(source.Name); } } if (existingSettingsLookup != null) { // get list of credentials for sources var sourceCredentialsSection = Settings.GetSection(ConfigurationConstants.CredentialsSectionName); var sourceCredentialsSettings = sourceCredentialsSection?.Items.OfType <CredentialsItem>(); var existingsourceCredentialsLookup = sourceCredentialsSettings?.ToDictionary(setting => setting.ElementName, StringComparer.OrdinalIgnoreCase); foreach (var sourceItem in existingSettingsLookup) { if (existingDisabledSourcesLookup != null && existingDisabledSourcesLookup.TryGetValue(sourceItem.Value.Key, out var existingDisabledSourceItem)) { Settings.Remove(ConfigurationConstants.DisabledPackageSources, existingDisabledSourceItem); isDirty = true; } if (existingsourceCredentialsLookup != null && existingsourceCredentialsLookup.TryGetValue(sourceItem.Value.Key, out var existingSourceCredentialItem)) { Settings.Remove(ConfigurationConstants.CredentialsSectionName, existingSourceCredentialItem); isDirty = true; } Settings.Remove(ConfigurationConstants.PackageSources, sourceItem.Value); isDirty = true; } } if (isDirty) { Settings.SaveToDisk(); OnPackageSourcesChanged(); isDirty = false; } }
private void UpdatePackageSource( PackageSource newSource, PackageSource existingSource, AddItem existingDisabledSourceItem, CredentialsItem existingCredentialsItem, bool updateEnabled, bool updateCredentials, bool shouldSkipSave, ref bool isDirty) { if (string.Equals(newSource.Name, existingSource.Name, StringComparison.OrdinalIgnoreCase)) { if ((!string.Equals(newSource.Source, existingSource.Source, StringComparison.OrdinalIgnoreCase) || newSource.ProtocolVersion != existingSource.ProtocolVersion) && newSource.IsPersistable) { Settings.AddOrUpdate(ConfigurationConstants.PackageSources, newSource.AsSourceItem()); isDirty = true; } if (updateEnabled) { if (newSource.IsEnabled && existingDisabledSourceItem != null) { Settings.Remove(ConfigurationConstants.DisabledPackageSources, existingDisabledSourceItem); isDirty = true; } if (!newSource.IsEnabled && existingDisabledSourceItem == null) { AddDisabledSource(newSource.Name, shouldSkipSave: true, isDirty: ref isDirty); } } if (updateCredentials && newSource.Credentials != existingSource.Credentials) { if (existingCredentialsItem != null) { if (newSource.Credentials == null) { Settings.Remove(ConfigurationConstants.CredentialsSectionName, existingCredentialsItem); isDirty = true; } else { Settings.AddOrUpdate(ConfigurationConstants.CredentialsSectionName, newSource.Credentials.AsCredentialsItem()); isDirty = true; } } else if (newSource.Credentials != null && newSource.Credentials.IsValid()) { Settings.AddOrUpdate(ConfigurationConstants.CredentialsSectionName, newSource.Credentials.AsCredentialsItem()); isDirty = true; } } if (!shouldSkipSave && isDirty) { Settings.SaveToDisk(); OnPackageSourcesChanged(); isDirty = false; } } }