Browse Source

Support disabling NuGet package sources.

Add checkbox to NuGet package sources in Tools Options that can be used to enable or disable a package source.
pull/28/head
Matt Ward 13 years ago
parent
commit
4d27532e1a
  1. 35
      src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeSettings.cs
  2. 5
      src/AddIns/Misc/PackageManagement/Project/Src/PackageSourceViewModel.cs
  3. 10
      src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageSource.cs
  4. 34
      src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageSourceSettings.cs
  5. 4
      src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageSourcesUserControl.xaml
  6. 106
      src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementOptionsTests.cs
  7. 54
      src/AddIns/Misc/PackageManagement/Test/Src/PackageSourceViewModelTests.cs

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

@ -12,6 +12,9 @@ namespace ICSharpCode.PackageManagement.Design
public List<KeyValuePair<string, string>> PackageSources public List<KeyValuePair<string, string>> PackageSources
= new List<KeyValuePair<string, string>>(); = new List<KeyValuePair<string, string>>();
public List<KeyValuePair<string, string>> DisabledPackageSources
= new List<KeyValuePair<string, string>>();
public List<KeyValuePair<string, string>> ActivePackageSourceSettings = public List<KeyValuePair<string, string>> ActivePackageSourceSettings =
new List<KeyValuePair<string, string>>(); new List<KeyValuePair<string, string>>();
@ -22,11 +25,18 @@ namespace ICSharpCode.PackageManagement.Design
{ {
Sections.Add(RegisteredPackageSourceSettings.PackageSourcesSectionName, PackageSources); Sections.Add(RegisteredPackageSourceSettings.PackageSourcesSectionName, PackageSources);
Sections.Add(RegisteredPackageSourceSettings.ActivePackageSourceSectionName, ActivePackageSourceSettings); Sections.Add(RegisteredPackageSourceSettings.ActivePackageSourceSectionName, ActivePackageSourceSettings);
Sections.Add(RegisteredPackageSourceSettings.DisabledPackageSourceSectionName, DisabledPackageSources);
} }
public string GetValue(string section, string key) public string GetValue(string section, string key)
{ {
throw new NotImplementedException(); IList<KeyValuePair<string, string>> values = Sections[section];
foreach (KeyValuePair<string, string> keyPair in values) {
if (keyPair.Key == key) {
return keyPair.Value;
}
}
return null;
} }
public IList<KeyValuePair<string, string>> GetValues(string section) public IList<KeyValuePair<string, string>> GetValues(string section)
@ -87,6 +97,12 @@ namespace ICSharpCode.PackageManagement.Design
} }
} }
public bool IsDisabledPackageSourcesSectionDeleted {
get {
return SectionsDeleted.Contains(RegisteredPackageSourceSettings.DisabledPackageSourceSectionName);
}
}
public bool IsActivePackageSourceSectionDeleted { public bool IsActivePackageSourceSectionDeleted {
get { get {
return SectionsDeleted.Contains(RegisteredPackageSourceSettings.ActivePackageSourceSectionName); return SectionsDeleted.Contains(RegisteredPackageSourceSettings.ActivePackageSourceSectionName);
@ -128,5 +144,22 @@ namespace ICSharpCode.PackageManagement.Design
{ {
throw new NotImplementedException(); throw new NotImplementedException();
} }
public void AddDisabledPackageSource(PackageSource packageSource)
{
var valuePair = new KeyValuePair<string, string>(packageSource.Name, packageSource.Source);
DisabledPackageSources.Add(valuePair);
}
public IList<KeyValuePair<string, string>> GetValuesPassedToSetValuesForDisabledPackageSourcesSection()
{
return SavedSectionValueLists[RegisteredPackageSourceSettings.DisabledPackageSourceSectionName];
}
public bool AnyValuesPassedToSetValuesForDisabledPackageSourcesSection {
get {
return SavedSectionValueLists.ContainsKey(RegisteredPackageSourceSettings.DisabledPackageSourceSectionName);
}
}
} }
} }

5
src/AddIns/Misc/PackageManagement/Project/Src/PackageSourceViewModel.cs

@ -29,5 +29,10 @@ namespace ICSharpCode.PackageManagement
get { return packageSource.Source; } get { return packageSource.Source; }
set { packageSource.Source = value; } set { packageSource.Source = value; }
} }
public bool IsEnabled {
get { return packageSource.IsEnabled; }
set { packageSource.IsEnabled = value; }
}
} }
} }

10
src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageSource.cs

@ -10,26 +10,22 @@ namespace ICSharpCode.PackageManagement
{ {
public string Source { get; set; } public string Source { get; set; }
public string Name { get; set; } public string Name { get; set; }
public bool IsEnabled { get; set; }
public RegisteredPackageSource() public RegisteredPackageSource()
{ {
} }
public RegisteredPackageSource(string name, string source)
{
this.Name = name;
this.Source = source;
}
public RegisteredPackageSource(PackageSource packageSource) public RegisteredPackageSource(PackageSource packageSource)
{ {
Source = packageSource.Source; Source = packageSource.Source;
Name = packageSource.Name; Name = packageSource.Name;
IsEnabled = packageSource.IsEnabled;
} }
public PackageSource ToPackageSource() public PackageSource ToPackageSource()
{ {
return new PackageSource(Source, Name); return new PackageSource(Source, Name, IsEnabled);
} }
} }
} }

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

@ -14,6 +14,7 @@ namespace ICSharpCode.PackageManagement
{ {
public static readonly string PackageSourcesSectionName = "packageSources"; public static readonly string PackageSourcesSectionName = "packageSources";
public static readonly string ActivePackageSourceSectionName = "activePackageSource"; public static readonly string ActivePackageSourceSectionName = "activePackageSource";
public static readonly string DisabledPackageSourceSectionName = "disabledPackageSources";
public static readonly PackageSource AggregatePackageSource = public static readonly PackageSource AggregatePackageSource =
new PackageSource("(Aggregate source)", "All"); new PackageSource("(Aggregate source)", "All");
@ -64,7 +65,16 @@ namespace ICSharpCode.PackageManagement
IEnumerable<PackageSource> GetPackageSourcesFromSettings() IEnumerable<PackageSource> GetPackageSourcesFromSettings()
{ {
IList<KeyValuePair<string, string>> savedPackageSources = settings.GetValues(PackageSourcesSectionName); IList<KeyValuePair<string, string>> savedPackageSources = settings.GetValues(PackageSourcesSectionName);
return PackageSourceConverter.ConvertFromKeyValuePairs(savedPackageSources); 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)
@ -74,8 +84,10 @@ namespace ICSharpCode.PackageManagement
void UpdatePackageSourceSettingsWithChanges() void UpdatePackageSourceSettingsWithChanges()
{ {
var newPackageSourceSettings = GetSettingsFromPackageSources(); IList<KeyValuePair<string, string>> newPackageSourceSettings = GetSettingsFromPackageSources();
SavePackageSourceSettings(newPackageSourceSettings); SavePackageSourceSettings(newPackageSourceSettings);
IList<KeyValuePair<string, string>> disabledPackageSourceSettings = GetSettingsForDisabledPackageSources();
SaveDisabledPackageSourceSettings(disabledPackageSourceSettings);
} }
IList<KeyValuePair<string, string>> GetSettingsFromPackageSources() IList<KeyValuePair<string, string>> GetSettingsFromPackageSources()
@ -94,6 +106,22 @@ namespace ICSharpCode.PackageManagement
settings.SetValues(PackageSourcesSectionName, newPackageSourceSettings); 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 {
get { get {
if (activePackageSource != null) { if (activePackageSource != null) {
@ -125,7 +153,7 @@ namespace ICSharpCode.PackageManagement
{ {
RemoveActivePackageSourceSetting(); RemoveActivePackageSourceSetting();
var activePackageSourceSetting = PackageSourceConverter.ConvertToKeyValuePair(activePackageSource); KeyValuePair<string, string> activePackageSourceSetting = PackageSourceConverter.ConvertToKeyValuePair(activePackageSource);
SaveActivePackageSourceSetting(activePackageSourceSetting); SaveActivePackageSourceSetting(activePackageSourceSetting);
} }

4
src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageSourcesUserControl.xaml

@ -41,7 +41,9 @@
<StackPanel <StackPanel
x:Name="PackageSourceStackPanel" x:Name="PackageSourceStackPanel"
Margin="4"> Margin="4">
<TextBlock Text="{Binding Path=Name}"/> <CheckBox
Content="{Binding Path=Name}"
IsChecked="{Binding Path=IsEnabled}"/>
<TextBlock> <TextBlock>
<Hyperlink> <Hyperlink>
<TextBlock Text="{Binding Path=SourceUrl}"/> <TextBlock Text="{Binding Path=SourceUrl}"/>

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

@ -80,7 +80,7 @@ namespace PackageManagement.Tests
fakeSettings.AddFakePackageSource(packageSource); fakeSettings.AddFakePackageSource(packageSource);
CreateOptions(fakeSettings); CreateOptions(fakeSettings);
var actualSources = options.PackageSources; RegisteredPackageSources actualSources = options.PackageSources;
List<PackageSource> expectedSources = new List<PackageSource>(); List<PackageSource> expectedSources = new List<PackageSource>();
expectedSources.Add(packageSource); expectedSources.Add(packageSource);
@ -97,7 +97,7 @@ namespace PackageManagement.Tests
List<PackageSource> expectedSources = new List<PackageSource>(); List<PackageSource> expectedSources = new List<PackageSource>();
expectedSources.Add(RegisteredPackageSources.DefaultPackageSource); expectedSources.Add(RegisteredPackageSources.DefaultPackageSource);
var actualPackageSources = options.PackageSources; RegisteredPackageSources actualPackageSources = options.PackageSources;
CollectionAssert.AreEqual(expectedSources, actualPackageSources); CollectionAssert.AreEqual(expectedSources, actualPackageSources);
} }
@ -108,16 +108,16 @@ namespace PackageManagement.Tests
CreateSettings(); CreateSettings();
CreateOptions(fakeSettings); CreateOptions(fakeSettings);
var packageSources = options.PackageSources; RegisteredPackageSources packageSources = options.PackageSources;
var defaultSource = RegisteredPackageSources.DefaultPackageSource; PackageSource defaultSource = RegisteredPackageSources.DefaultPackageSource;
var expectedSavedPackageSourceSettings = new List<KeyValuePair<string, string>>(); var expectedSavedPackageSourceSettings = new List<KeyValuePair<string, string>>();
string name = defaultSource.Name; string name = defaultSource.Name;
string sourceUrl = defaultSource.Source; string sourceUrl = defaultSource.Source;
expectedSavedPackageSourceSettings.Add(new KeyValuePair<string, string>(name, sourceUrl)); expectedSavedPackageSourceSettings.Add(new KeyValuePair<string, string>(name, sourceUrl));
var actualSavedPackageSourceSettings = fakeSettings.GetValuesPassedToSetValuesForPackageSourcesSection(); IList<KeyValuePair<string, string>> actualSavedPackageSourceSettings = fakeSettings.GetValuesPassedToSetValuesForPackageSourcesSection();
Assert.AreEqual(expectedSavedPackageSourceSettings, actualSavedPackageSourceSettings); Assert.AreEqual(expectedSavedPackageSourceSettings, actualSavedPackageSourceSettings);
} }
@ -127,7 +127,7 @@ namespace PackageManagement.Tests
{ {
CreateSettings(); CreateSettings();
CreateOptions(fakeSettings); CreateOptions(fakeSettings);
var registeredPackageSources = options.PackageSources; RegisteredPackageSources registeredPackageSources = options.PackageSources;
var packageSource = new PackageSource("http://codeplex.com", "Test"); var packageSource = new PackageSource("http://codeplex.com", "Test");
registeredPackageSources.Clear(); registeredPackageSources.Clear();
@ -136,7 +136,7 @@ namespace PackageManagement.Tests
var expectedSavedPackageSourceSettings = new List<KeyValuePair<string, string>>(); var expectedSavedPackageSourceSettings = new List<KeyValuePair<string, string>>();
expectedSavedPackageSourceSettings.Add(new KeyValuePair<string, string>("Test", "http://codeplex.com")); expectedSavedPackageSourceSettings.Add(new KeyValuePair<string, string>("Test", "http://codeplex.com"));
var actualSavedPackageSourceSettings = fakeSettings.GetValuesPassedToSetValuesForPackageSourcesSection(); IList<KeyValuePair<string, string>> actualSavedPackageSourceSettings = fakeSettings.GetValuesPassedToSetValuesForPackageSourcesSection();
Assert.AreEqual(expectedSavedPackageSourceSettings, actualSavedPackageSourceSettings); Assert.AreEqual(expectedSavedPackageSourceSettings, actualSavedPackageSourceSettings);
} }
@ -146,7 +146,7 @@ namespace PackageManagement.Tests
{ {
CreateSettings(); CreateSettings();
CreateOptions(fakeSettings); CreateOptions(fakeSettings);
var registeredPackageSources = options.PackageSources; RegisteredPackageSources registeredPackageSources = options.PackageSources;
var packageSource = new PackageSource("http://codeplex.com", "Test"); var packageSource = new PackageSource("http://codeplex.com", "Test");
registeredPackageSources.Clear(); registeredPackageSources.Clear();
@ -185,7 +185,7 @@ namespace PackageManagement.Tests
options.ActivePackageSource = packageSource; options.ActivePackageSource = packageSource;
var expectedKeyValuePair = new KeyValuePair<string, string>("Test", "http://sharpdevelop.com"); var expectedKeyValuePair = new KeyValuePair<string, string>("Test", "http://sharpdevelop.com");
var actualKeyValuePair = fakeSettings.GetValuePassedToSetValueForActivePackageSourceSection(); KeyValuePair<string, string> actualKeyValuePair = fakeSettings.GetValuePassedToSetValueForActivePackageSourceSection();
Assert.AreEqual(expectedKeyValuePair, actualKeyValuePair); Assert.AreEqual(expectedKeyValuePair, actualKeyValuePair);
} }
@ -227,7 +227,7 @@ namespace PackageManagement.Tests
var differentSource = new PackageSource("http://different-url", "Test2"); var differentSource = new PackageSource("http://different-url", "Test2");
options.ActivePackageSource = differentSource; options.ActivePackageSource = differentSource;
var activeSource = options.ActivePackageSource; PackageSource activeSource = options.ActivePackageSource;
Assert.IsNull(activeSource); Assert.IsNull(activeSource);
} }
@ -280,7 +280,7 @@ namespace PackageManagement.Tests
options.RecentPackages.Add(recentPackage); options.RecentPackages.Add(recentPackage);
CreateOptions(properties); CreateOptions(properties);
var recentPackages = options.RecentPackages; IList<RecentPackageInfo> recentPackages = options.RecentPackages;
var expectedRecentPackages = new RecentPackageInfo[] { var expectedRecentPackages = new RecentPackageInfo[] {
new RecentPackageInfo(package) new RecentPackageInfo(package)
@ -293,7 +293,7 @@ namespace PackageManagement.Tests
public void RecentPackages_SaveRecentPackages_DoesNotThrowInvalidOperationException() public void RecentPackages_SaveRecentPackages_DoesNotThrowInvalidOperationException()
{ {
CreateOptions(); CreateOptions();
var recentPackage = AddRecentPackageToOptions("id", "1.0"); RecentPackageInfo recentPackage = AddRecentPackageToOptions("id", "1.0");
Assert.DoesNotThrow(() => SaveOptions()); Assert.DoesNotThrow(() => SaveOptions());
} }
@ -302,13 +302,91 @@ namespace PackageManagement.Tests
public void ActivePackageSource_AggregatePackageSourceIsActivePackageSourceInSettings_ReturnsAggregatePackageSource() public void ActivePackageSource_AggregatePackageSourceIsActivePackageSourceInSettings_ReturnsAggregatePackageSource()
{ {
CreateSettings(); CreateSettings();
var expectedPackageSource = RegisteredPackageSourceSettings.AggregatePackageSource; PackageSource expectedPackageSource = RegisteredPackageSourceSettings.AggregatePackageSource;
fakeSettings.SetFakeActivePackageSource(expectedPackageSource); fakeSettings.SetFakeActivePackageSource(expectedPackageSource);
CreateOptions(fakeSettings); CreateOptions(fakeSettings);
var activePackageSource = options.ActivePackageSource; PackageSource activePackageSource = options.ActivePackageSource;
Assert.AreEqual(expectedPackageSource, activePackageSource); Assert.AreEqual(expectedPackageSource, activePackageSource);
} }
[Test]
public void PackageSources_OneEnabledPackageSourceInSettings_ContainsSingleEnabledPackageSourceFromSettings()
{
CreateSettings();
var packageSource = new PackageSource("http://codeplex.com", "Test") { IsEnabled = true };
fakeSettings.AddFakePackageSource(packageSource);
CreateOptions(fakeSettings);
RegisteredPackageSources actualSources = options.PackageSources;
Assert.IsTrue(actualSources[0].IsEnabled);
}
[Test]
public void PackageSources_OneDisabledPackageSourceInSettings_ContainsSingleDisabledPackageSourceFromSettings()
{
CreateSettings();
var packageSource = new PackageSource("http://codeplex.com", "Test") { IsEnabled = false };
fakeSettings.AddFakePackageSource(packageSource);
fakeSettings.AddDisabledPackageSource(packageSource);
CreateOptions(fakeSettings);
RegisteredPackageSources actualSources = options.PackageSources;
Assert.IsFalse(actualSources[0].IsEnabled);
}
[Test]
public void PackageSources_OnePackageSourceAdded_DisabledPackageSourcesSectionDeletedFromSettings()
{
CreateSettings();
CreateOptions(fakeSettings);
RegisteredPackageSources registeredPackageSources = options.PackageSources;
var packageSource = new PackageSource("http://codeplex.com", "Test");
registeredPackageSources.Clear();
registeredPackageSources.Add(packageSource);
bool sectionDeleted = fakeSettings.IsDisabledPackageSourcesSectionDeleted;
Assert.IsTrue(sectionDeleted);
}
[Test]
public void PackageSources_OneDisabledPackageSourceAdded_DisabledPackageSourcesSectionSaved()
{
CreateSettings();
CreateOptions(fakeSettings);
RegisteredPackageSources registeredPackageSources = options.PackageSources;
var packageSource = new PackageSource("http://codeplex.com", "Test") { IsEnabled = false };
registeredPackageSources.Clear();
registeredPackageSources.Add(packageSource);
var expectedSavedPackageSourceSettings = new List<KeyValuePair<string, string>>();
expectedSavedPackageSourceSettings.Add(new KeyValuePair<string, string>(packageSource.Name, "true"));
IList<KeyValuePair<string, string>> actualSavedPackageSourceSettings =
fakeSettings.GetValuesPassedToSetValuesForDisabledPackageSourcesSection();
Assert.AreEqual(expectedSavedPackageSourceSettings, actualSavedPackageSourceSettings);
}
[Test]
public void PackageSources_OneEnabledPackageSourceAdded_DisabledPackageSourcesSectionNotChanged()
{
CreateSettings();
CreateOptions(fakeSettings);
RegisteredPackageSources registeredPackageSources = options.PackageSources;
var packageSource = new PackageSource("http://codeplex.com", "Test") { IsEnabled = true };
registeredPackageSources.Clear();
registeredPackageSources.Add(packageSource);
bool result = fakeSettings.AnyValuesPassedToSetValuesForDisabledPackageSourcesSection;
Assert.IsFalse(result);
}
} }
} }

54
src/AddIns/Misc/PackageManagement/Test/Src/PackageSourceViewModelTests.cs

@ -39,6 +39,18 @@ namespace PackageManagement.Tests
viewModel = new PackageSourceViewModel(packageSource); viewModel = new PackageSourceViewModel(packageSource);
} }
void CreateEnabledPackageSource()
{
CreatePackageSource();
packageSource.IsEnabled = true;
}
void CreateDisabledPackageSource()
{
CreatePackageSource();
packageSource.IsEnabled = false;
}
[Test] [Test]
public void Name_InstanceCreatedWithRegisteredPackageSource_MatchesRegisteredPackageSourceName() public void Name_InstanceCreatedWithRegisteredPackageSource_MatchesRegisteredPackageSourceName()
{ {
@ -76,5 +88,47 @@ namespace PackageManagement.Tests
Assert.AreEqual("changed", viewModel.SourceUrl); Assert.AreEqual("changed", viewModel.SourceUrl);
} }
[Test]
public void IsEnabled_PackageSourceIsEnabled_ReturnsTrue()
{
CreateEnabledPackageSource();
CreateViewModel(packageSource);
Assert.IsTrue(viewModel.IsEnabled);
}
[Test]
public void IsEnabled_PackageSourceIsNotEnabled_ReturnsFalse()
{
CreateDisabledPackageSource();
CreateViewModel(packageSource);
Assert.IsFalse(viewModel.IsEnabled);
}
[Test]
public void IsEnabled_ChangedFromTrueToFalse_UpdatesPackageSource()
{
CreateEnabledPackageSource();
CreateViewModel(packageSource);
viewModel.IsEnabled = false;
PackageSource updatedPackageSource = viewModel.GetPackageSource();
Assert.IsFalse(updatedPackageSource.IsEnabled);
}
[Test]
public void IsEnabled_ChangedFromFalseToTrue_UpdatesPackageSource()
{
CreateDisabledPackageSource();
CreateViewModel(packageSource);
viewModel.IsEnabled = true;
PackageSource updatedPackageSource = viewModel.GetPackageSource();
Assert.IsTrue(updatedPackageSource.IsEnabled);
}
} }
} }

Loading…
Cancel
Save