Browse Source

Use NuGet's PackageSourceProvider.

Move logic out of SharpDevelop and use NuGet's PackageSourceProvider
to read and update NuGet package sources in NuGet.Config.
pull/622/head
Matt Ward 12 years ago
parent
commit
6b03044477
  1. 6
      src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeSettings.cs
  2. 70
      src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageSourceSettings.cs
  3. 47
      src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementOptionsTests.cs

6
src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeSettings.cs

@ -159,7 +159,7 @@ namespace ICSharpCode.PackageManagement.Design
public IList<KeyValuePair<string, string>> GetNestedValues(string section, string key) public IList<KeyValuePair<string, string>> GetNestedValues(string section, string key)
{ {
throw new NotImplementedException(); return new List<KeyValuePair<string, string>>();
} }
public void SetNestedValues(string section, string key, IList<KeyValuePair<string, string>> values) public void SetNestedValues(string section, string key, IList<KeyValuePair<string, string>> values)
@ -218,7 +218,9 @@ namespace ICSharpCode.PackageManagement.Design
public IList<SettingValue> GetSettingValues(string section, bool isPath) public IList<SettingValue> GetSettingValues(string section, bool isPath)
{ {
throw new NotImplementedException(); return Sections[section]
.Select(item => new SettingValue(item.Key, item.Value, false))
.ToList();
} }
public void SetRepositoryPathSetting(string fullPath) public void SetRepositoryPathSetting(string fullPath)

70
src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageSourceSettings.cs

@ -37,12 +37,15 @@ namespace ICSharpCode.PackageManagement
ISettings settings; ISettings settings;
ISettingsProvider settingsProvider; ISettingsProvider settingsProvider;
IPackageSourceProvider packageSourceProvider;
PackageSource defaultPackageSource; PackageSource defaultPackageSource;
RegisteredPackageSources packageSources; RegisteredPackageSources packageSources;
PackageSource activePackageSource; PackageSource activePackageSource;
public RegisteredPackageSourceSettings(ISettingsProvider settingsProvider) public RegisteredPackageSourceSettings(ISettingsProvider settingsProvider)
: this(settingsProvider, RegisteredPackageSources.DefaultPackageSource) : this(
settingsProvider,
RegisteredPackageSources.DefaultPackageSource)
{ {
} }
@ -54,6 +57,7 @@ namespace ICSharpCode.PackageManagement
this.defaultPackageSource = defaultPackageSource; this.defaultPackageSource = defaultPackageSource;
settings = settingsProvider.LoadSettings(); settings = settingsProvider.LoadSettings();
packageSourceProvider = CreatePackageSourceProvider(settings);
ReadActivePackageSource(); ReadActivePackageSource();
RegisterSolutionEvents(); RegisterSolutionEvents();
@ -64,6 +68,11 @@ namespace ICSharpCode.PackageManagement
settingsProvider.SettingsChanged += SettingsChanged; settingsProvider.SettingsChanged += SettingsChanged;
} }
static IPackageSourceProvider CreatePackageSourceProvider(ISettings settings)
{
return new PackageSourceProvider(settings, new [] { RegisteredPackageSources.DefaultPackageSource });
}
void ReadActivePackageSource() void ReadActivePackageSource()
{ {
IList<KeyValuePair<string, string>> packageSources = settings.GetValues(ActivePackageSourceSectionName); IList<KeyValuePair<string, string>> packageSources = settings.GetValues(ActivePackageSourceSectionName);
@ -81,28 +90,9 @@ namespace ICSharpCode.PackageManagement
void ReadPackageSources() void ReadPackageSources()
{ {
IEnumerable<PackageSource> savedPackageSources = GetPackageSourcesFromSettings(); IEnumerable<PackageSource> savedPackageSources = packageSourceProvider.LoadPackageSources();
packageSources = new RegisteredPackageSources(savedPackageSources, defaultPackageSource); packageSources = new RegisteredPackageSources(savedPackageSources, defaultPackageSource);
packageSources.CollectionChanged += PackageSourcesChanged; packageSources.CollectionChanged += PackageSourcesChanged;
if (!savedPackageSources.Any()) {
UpdatePackageSourceSettingsWithChanges();
}
}
IEnumerable<PackageSource> GetPackageSourcesFromSettings()
{
IList<KeyValuePair<string, string>> savedPackageSources = settings.GetValues(PackageSourcesSectionName);
foreach (PackageSource packageSource in PackageSourceConverter.ConvertFromKeyValuePairs(savedPackageSources)) {
packageSource.IsEnabled = IsPackageSourceEnabled(packageSource);
yield return packageSource;
}
}
bool IsPackageSourceEnabled(PackageSource packageSource)
{
string disabled = settings.GetValue(DisabledPackageSourceSectionName, packageSource.Name);
return String.IsNullOrEmpty(disabled);
} }
void PackageSourcesChanged(object sender, NotifyCollectionChangedEventArgs e) void PackageSourcesChanged(object sender, NotifyCollectionChangedEventArgs e)
@ -112,42 +102,7 @@ namespace ICSharpCode.PackageManagement
void UpdatePackageSourceSettingsWithChanges() void UpdatePackageSourceSettingsWithChanges()
{ {
IList<KeyValuePair<string, string>> newPackageSourceSettings = GetSettingsFromPackageSources(); packageSourceProvider.SavePackageSources(packageSources);
SavePackageSourceSettings(newPackageSourceSettings);
IList<KeyValuePair<string, string>> disabledPackageSourceSettings = GetSettingsForDisabledPackageSources();
SaveDisabledPackageSourceSettings(disabledPackageSourceSettings);
}
IList<KeyValuePair<string, string>> GetSettingsFromPackageSources()
{
return PackageSourceConverter.ConvertToKeyValuePairList(packageSources);
}
KeyValuePair<string, string> CreateKeyValuePairFromPackageSource(PackageSource source)
{
return new KeyValuePair<string, string>(source.Name, source.Source);
}
void SavePackageSourceSettings(IList<KeyValuePair<string, string>> newPackageSourceSettings)
{
settings.DeleteSection(PackageSourcesSectionName);
settings.SetValues(PackageSourcesSectionName, newPackageSourceSettings);
}
IList<KeyValuePair<string, string>> GetSettingsForDisabledPackageSources()
{
return packageSources
.Where(source => !source.IsEnabled)
.Select(source => new KeyValuePair<string, string>(source.Name, "true"))
.ToList();
}
void SaveDisabledPackageSourceSettings(IList<KeyValuePair<string, string>> disabledPackageSourceSettings)
{
settings.DeleteSection(DisabledPackageSourceSectionName);
if (disabledPackageSourceSettings.Any()) {
settings.SetValues(DisabledPackageSourceSectionName, disabledPackageSourceSettings);
}
} }
public PackageSource ActivePackageSource { public PackageSource ActivePackageSource {
@ -193,6 +148,7 @@ namespace ICSharpCode.PackageManagement
void SettingsChanged(object sender, EventArgs e) void SettingsChanged(object sender, EventArgs e)
{ {
settings = settingsProvider.LoadSettings(); settings = settingsProvider.LoadSettings();
packageSourceProvider = new PackageSourceProvider(settings);
ReadActivePackageSource(); ReadActivePackageSource();
ResetPackageSources(); ResetPackageSources();
} }

47
src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementOptionsTests.cs

@ -117,7 +117,7 @@ namespace PackageManagement.Tests
} }
[Test] [Test]
public void PackageSources_OnePackageSourceInSettings_ContainsSinglePackageSourceFromSettings() public void PackageSources_OnePackageSourceInSettings_ContainsSinglePackageSourceFromSettingsAndDefaultPackageSource()
{ {
CreateSettings(); CreateSettings();
var packageSource = new PackageSource("http://codeplex.com", "Test"); var packageSource = new PackageSource("http://codeplex.com", "Test");
@ -126,8 +126,9 @@ namespace PackageManagement.Tests
RegisteredPackageSources actualSources = options.PackageSources; RegisteredPackageSources actualSources = options.PackageSources;
List<PackageSource> expectedSources = new List<PackageSource>(); var expectedSources = new List<PackageSource>();
expectedSources.Add(packageSource); expectedSources.Add(packageSource);
expectedSources.Add(new PackageSource("https://www.nuget.org/api/v2/", "nuget.org"));
Assert.AreEqual(expectedSources, actualSources); Assert.AreEqual(expectedSources, actualSources);
} }
@ -146,26 +147,6 @@ namespace PackageManagement.Tests
CollectionAssert.AreEqual(expectedSources, actualPackageSources); CollectionAssert.AreEqual(expectedSources, actualPackageSources);
} }
[Test]
public void PackageSources_NoPackageSourceInSavedSettings_DefaultPackageSourceAddedToSettings()
{
CreateSettings();
CreateOptions(fakeSettings);
RegisteredPackageSources packageSources = options.PackageSources;
PackageSource defaultSource = RegisteredPackageSources.DefaultPackageSource;
var expectedSavedPackageSourceSettings = new List<KeyValuePair<string, string>>();
string name = defaultSource.Name;
string sourceUrl = defaultSource.Source;
expectedSavedPackageSourceSettings.Add(new KeyValuePair<string, string>(name, sourceUrl));
IList<KeyValuePair<string, string>> actualSavedPackageSourceSettings = fakeSettings.GetValuesPassedToSetValuesForPackageSourcesSection();
Assert.AreEqual(expectedSavedPackageSourceSettings, actualSavedPackageSourceSettings);
}
[Test] [Test]
public void PackageSources_OnePackageSourceAdded_PackageSourceSavedInSettings() public void PackageSources_OnePackageSourceAdded_PackageSourceSavedInSettings()
{ {
@ -430,7 +411,9 @@ namespace PackageManagement.Tests
bool result = fakeSettings.AnyValuesPassedToSetValuesForDisabledPackageSourcesSection; bool result = fakeSettings.AnyValuesPassedToSetValuesForDisabledPackageSourcesSection;
Assert.IsFalse(result); IList<KeyValuePair<string, string>> actualSavedPackageSourceSettings =
fakeSettings.GetValuesPassedToSetValuesForDisabledPackageSourcesSection();
Assert.AreEqual(0, actualSavedPackageSourceSettings.Count);
} }
[Test] [Test]
@ -498,18 +481,18 @@ namespace PackageManagement.Tests
public void PackageSources_SolutionOpenedAfterInitialPackageSourcesLoaded_ContainsPackageSourceFromSolutionSpecificSettings() public void PackageSources_SolutionOpenedAfterInitialPackageSourcesLoaded_ContainsPackageSourceFromSolutionSpecificSettings()
{ {
CreateSettings(); CreateSettings();
var packageSource = new PackageSource("http://codeplex.com", "Test"); var packageSource = new PackageSource("https://www.nuget.org/api/v2/", "Official NuGet Gallery");
fakeSettings.AddFakePackageSource(packageSource); fakeSettings.AddFakePackageSource(packageSource);
CreateOptions(fakeSettings); CreateOptions(fakeSettings);
RegisteredPackageSources initialSources = options.PackageSources; RegisteredPackageSources initialSources = options.PackageSources;
var expectedInitialSources = new List<PackageSource>(); var expectedInitialSources = new List<PackageSource>();
expectedInitialSources.Add(packageSource); expectedInitialSources.Add(packageSource);
ChangeSettingsReturnedBySettingsProvider(); ChangeSettingsReturnedBySettingsProvider();
packageSource = new PackageSource("http://codeplex.com", "Test"); packageSource = new PackageSource("https://www.nuget.org/api/v2/", "Official NuGet Gallery");
fakeSettings.AddFakePackageSource(packageSource); fakeSettings.AddFakePackageSource(packageSource);
var expectedSources = new List<PackageSource>(); var expectedSources = new List<PackageSource>();
expectedSources.Add(packageSource); expectedSources.Add(packageSource);
packageSource = new PackageSource("http://nuget.org", "ProjectSource"); packageSource = new PackageSource("http://codeplex.com", "ProjectSource");
fakeSettings.AddFakePackageSource(packageSource); fakeSettings.AddFakePackageSource(packageSource);
expectedSources.Add(packageSource); expectedSources.Add(packageSource);
OpenSolution(); OpenSolution();
@ -524,18 +507,18 @@ namespace PackageManagement.Tests
public void PackageSources_SolutionClosedAfterInitialPackageSourcesLoaded_PackageSourcesReloaded() public void PackageSources_SolutionClosedAfterInitialPackageSourcesLoaded_PackageSourcesReloaded()
{ {
CreateSettings(); CreateSettings();
var packageSource = new PackageSource("http://codeplex.com", "Test"); var packageSource = new PackageSource("https://www.nuget.org/api/v2/", "Official NuGet Gallery");
fakeSettings.AddFakePackageSource(packageSource); fakeSettings.AddFakePackageSource(packageSource);
var expectedInitialSources = new List<PackageSource>(); var expectedInitialSources = new List<PackageSource>();
expectedInitialSources.Add(packageSource); expectedInitialSources.Add(packageSource);
packageSource = new PackageSource("http://nuget.org", "ProjectSource"); packageSource = new PackageSource("http://projectsource.org", "ProjectSource");
fakeSettings.AddFakePackageSource(packageSource); fakeSettings.AddFakePackageSource(packageSource);
expectedInitialSources.Add(packageSource); expectedInitialSources.Add(packageSource);
OpenSolution(); OpenSolution();
CreateOptions(fakeSettings); CreateOptions(fakeSettings);
RegisteredPackageSources initialSources = options.PackageSources; RegisteredPackageSources initialSources = options.PackageSources;
ChangeSettingsReturnedBySettingsProvider(); ChangeSettingsReturnedBySettingsProvider();
packageSource = new PackageSource("http://codeplex.com", "Test"); packageSource = new PackageSource("https://www.nuget.org/api/v2/", "Official NuGet Gallery");
fakeSettings.AddFakePackageSource(packageSource); fakeSettings.AddFakePackageSource(packageSource);
var expectedSources = new List<PackageSource>(); var expectedSources = new List<PackageSource>();
expectedSources.Add(packageSource); expectedSources.Add(packageSource);
@ -551,11 +534,11 @@ namespace PackageManagement.Tests
public void PackageSources_SolutionClosedAfterInitialPackageSourcesLoaded_ActivePackageSourceReloaded() public void PackageSources_SolutionClosedAfterInitialPackageSourcesLoaded_ActivePackageSourceReloaded()
{ {
CreateSettings(); CreateSettings();
var packageSource = new PackageSource("http://codeplex.com", "Test"); var packageSource = new PackageSource("https://www.nuget.org/api/v2/", "Official NuGet Gallery");
fakeSettings.AddFakePackageSource(packageSource); fakeSettings.AddFakePackageSource(packageSource);
var expectedInitialSources = new List<PackageSource>(); var expectedInitialSources = new List<PackageSource>();
expectedInitialSources.Add(packageSource); expectedInitialSources.Add(packageSource);
var initialActivePackageSource = new PackageSource("http://nuget.org", "ProjectSource"); var initialActivePackageSource = new PackageSource("http://projectsource.org", "ProjectSource");
fakeSettings.AddFakePackageSource(initialActivePackageSource); fakeSettings.AddFakePackageSource(initialActivePackageSource);
fakeSettings.SetFakeActivePackageSource(initialActivePackageSource); fakeSettings.SetFakeActivePackageSource(initialActivePackageSource);
expectedInitialSources.Add(initialActivePackageSource); expectedInitialSources.Add(initialActivePackageSource);
@ -564,7 +547,7 @@ namespace PackageManagement.Tests
RegisteredPackageSources actualInitialPackageSources = options.PackageSources; RegisteredPackageSources actualInitialPackageSources = options.PackageSources;
PackageSource actualInitialActivePackageSource = options.ActivePackageSource; PackageSource actualInitialActivePackageSource = options.ActivePackageSource;
ChangeSettingsReturnedBySettingsProvider(); ChangeSettingsReturnedBySettingsProvider();
var expectedActivePackageSource = new PackageSource("http://codeplex.com", "Test"); var expectedActivePackageSource = new PackageSource("https://www.nuget.org/api/v2/", "Official NuGet Gallery");
fakeSettings.SetFakeActivePackageSource(expectedActivePackageSource); fakeSettings.SetFakeActivePackageSource(expectedActivePackageSource);
fakeSettings.AddFakePackageSource(expectedActivePackageSource); fakeSettings.AddFakePackageSource(expectedActivePackageSource);
CloseSolution(); CloseSolution();

Loading…
Cancel
Save