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 @@ -12,6 +12,9 @@ namespace ICSharpCode.PackageManagement.Design
public List<KeyValuePair<string, string>> PackageSources
= new List<KeyValuePair<string, string>>();
public List<KeyValuePair<string, string>> DisabledPackageSources
= new List<KeyValuePair<string, string>>();
public List<KeyValuePair<string, string>> ActivePackageSourceSettings =
new List<KeyValuePair<string, string>>();
@ -22,11 +25,18 @@ namespace ICSharpCode.PackageManagement.Design @@ -22,11 +25,18 @@ namespace ICSharpCode.PackageManagement.Design
{
Sections.Add(RegisteredPackageSourceSettings.PackageSourcesSectionName, PackageSources);
Sections.Add(RegisteredPackageSourceSettings.ActivePackageSourceSectionName, ActivePackageSourceSettings);
Sections.Add(RegisteredPackageSourceSettings.DisabledPackageSourceSectionName, DisabledPackageSources);
}
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)
@ -87,6 +97,12 @@ namespace ICSharpCode.PackageManagement.Design @@ -87,6 +97,12 @@ namespace ICSharpCode.PackageManagement.Design
}
}
public bool IsDisabledPackageSourcesSectionDeleted {
get {
return SectionsDeleted.Contains(RegisteredPackageSourceSettings.DisabledPackageSourceSectionName);
}
}
public bool IsActivePackageSourceSectionDeleted {
get {
return SectionsDeleted.Contains(RegisteredPackageSourceSettings.ActivePackageSourceSectionName);
@ -128,5 +144,22 @@ namespace ICSharpCode.PackageManagement.Design @@ -128,5 +144,22 @@ namespace ICSharpCode.PackageManagement.Design
{
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 @@ -29,5 +29,10 @@ namespace ICSharpCode.PackageManagement
get { return packageSource.Source; }
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 @@ -10,26 +10,22 @@ namespace ICSharpCode.PackageManagement
{
public string Source { get; set; }
public string Name { get; set; }
public bool IsEnabled { get; set; }
public RegisteredPackageSource()
{
}
public RegisteredPackageSource(string name, string source)
{
this.Name = name;
this.Source = source;
}
public RegisteredPackageSource(PackageSource packageSource)
{
Source = packageSource.Source;
Name = packageSource.Name;
IsEnabled = packageSource.IsEnabled;
}
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 @@ -14,6 +14,7 @@ namespace ICSharpCode.PackageManagement
{
public static readonly string PackageSourcesSectionName = "packageSources";
public static readonly string ActivePackageSourceSectionName = "activePackageSource";
public static readonly string DisabledPackageSourceSectionName = "disabledPackageSources";
public static readonly PackageSource AggregatePackageSource =
new PackageSource("(Aggregate source)", "All");
@ -64,7 +65,16 @@ namespace ICSharpCode.PackageManagement @@ -64,7 +65,16 @@ namespace ICSharpCode.PackageManagement
IEnumerable<PackageSource> GetPackageSourcesFromSettings()
{
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)
@ -74,8 +84,10 @@ namespace ICSharpCode.PackageManagement @@ -74,8 +84,10 @@ namespace ICSharpCode.PackageManagement
void UpdatePackageSourceSettingsWithChanges()
{
var newPackageSourceSettings = GetSettingsFromPackageSources();
IList<KeyValuePair<string, string>> newPackageSourceSettings = GetSettingsFromPackageSources();
SavePackageSourceSettings(newPackageSourceSettings);
IList<KeyValuePair<string, string>> disabledPackageSourceSettings = GetSettingsForDisabledPackageSources();
SaveDisabledPackageSourceSettings(disabledPackageSourceSettings);
}
IList<KeyValuePair<string, string>> GetSettingsFromPackageSources()
@ -94,6 +106,22 @@ namespace ICSharpCode.PackageManagement @@ -94,6 +106,22 @@ namespace ICSharpCode.PackageManagement
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 {
get {
if (activePackageSource != null) {
@ -125,7 +153,7 @@ namespace ICSharpCode.PackageManagement @@ -125,7 +153,7 @@ namespace ICSharpCode.PackageManagement
{
RemoveActivePackageSourceSetting();
var activePackageSourceSetting = PackageSourceConverter.ConvertToKeyValuePair(activePackageSource);
KeyValuePair<string, string> activePackageSourceSetting = PackageSourceConverter.ConvertToKeyValuePair(activePackageSource);
SaveActivePackageSourceSetting(activePackageSourceSetting);
}

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

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

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

@ -80,7 +80,7 @@ namespace PackageManagement.Tests @@ -80,7 +80,7 @@ namespace PackageManagement.Tests
fakeSettings.AddFakePackageSource(packageSource);
CreateOptions(fakeSettings);
var actualSources = options.PackageSources;
RegisteredPackageSources actualSources = options.PackageSources;
List<PackageSource> expectedSources = new List<PackageSource>();
expectedSources.Add(packageSource);
@ -97,7 +97,7 @@ namespace PackageManagement.Tests @@ -97,7 +97,7 @@ namespace PackageManagement.Tests
List<PackageSource> expectedSources = new List<PackageSource>();
expectedSources.Add(RegisteredPackageSources.DefaultPackageSource);
var actualPackageSources = options.PackageSources;
RegisteredPackageSources actualPackageSources = options.PackageSources;
CollectionAssert.AreEqual(expectedSources, actualPackageSources);
}
@ -108,16 +108,16 @@ namespace PackageManagement.Tests @@ -108,16 +108,16 @@ namespace PackageManagement.Tests
CreateSettings();
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>>();
string name = defaultSource.Name;
string sourceUrl = defaultSource.Source;
expectedSavedPackageSourceSettings.Add(new KeyValuePair<string, string>(name, sourceUrl));
var actualSavedPackageSourceSettings = fakeSettings.GetValuesPassedToSetValuesForPackageSourcesSection();
IList<KeyValuePair<string, string>> actualSavedPackageSourceSettings = fakeSettings.GetValuesPassedToSetValuesForPackageSourcesSection();
Assert.AreEqual(expectedSavedPackageSourceSettings, actualSavedPackageSourceSettings);
}
@ -127,7 +127,7 @@ namespace PackageManagement.Tests @@ -127,7 +127,7 @@ namespace PackageManagement.Tests
{
CreateSettings();
CreateOptions(fakeSettings);
var registeredPackageSources = options.PackageSources;
RegisteredPackageSources registeredPackageSources = options.PackageSources;
var packageSource = new PackageSource("http://codeplex.com", "Test");
registeredPackageSources.Clear();
@ -136,7 +136,7 @@ namespace PackageManagement.Tests @@ -136,7 +136,7 @@ namespace PackageManagement.Tests
var expectedSavedPackageSourceSettings = new List<KeyValuePair<string, string>>();
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);
}
@ -146,7 +146,7 @@ namespace PackageManagement.Tests @@ -146,7 +146,7 @@ namespace PackageManagement.Tests
{
CreateSettings();
CreateOptions(fakeSettings);
var registeredPackageSources = options.PackageSources;
RegisteredPackageSources registeredPackageSources = options.PackageSources;
var packageSource = new PackageSource("http://codeplex.com", "Test");
registeredPackageSources.Clear();
@ -185,7 +185,7 @@ namespace PackageManagement.Tests @@ -185,7 +185,7 @@ namespace PackageManagement.Tests
options.ActivePackageSource = packageSource;
var expectedKeyValuePair = new KeyValuePair<string, string>("Test", "http://sharpdevelop.com");
var actualKeyValuePair = fakeSettings.GetValuePassedToSetValueForActivePackageSourceSection();
KeyValuePair<string, string> actualKeyValuePair = fakeSettings.GetValuePassedToSetValueForActivePackageSourceSection();
Assert.AreEqual(expectedKeyValuePair, actualKeyValuePair);
}
@ -227,7 +227,7 @@ namespace PackageManagement.Tests @@ -227,7 +227,7 @@ namespace PackageManagement.Tests
var differentSource = new PackageSource("http://different-url", "Test2");
options.ActivePackageSource = differentSource;
var activeSource = options.ActivePackageSource;
PackageSource activeSource = options.ActivePackageSource;
Assert.IsNull(activeSource);
}
@ -280,7 +280,7 @@ namespace PackageManagement.Tests @@ -280,7 +280,7 @@ namespace PackageManagement.Tests
options.RecentPackages.Add(recentPackage);
CreateOptions(properties);
var recentPackages = options.RecentPackages;
IList<RecentPackageInfo> recentPackages = options.RecentPackages;
var expectedRecentPackages = new RecentPackageInfo[] {
new RecentPackageInfo(package)
@ -293,7 +293,7 @@ namespace PackageManagement.Tests @@ -293,7 +293,7 @@ namespace PackageManagement.Tests
public void RecentPackages_SaveRecentPackages_DoesNotThrowInvalidOperationException()
{
CreateOptions();
var recentPackage = AddRecentPackageToOptions("id", "1.0");
RecentPackageInfo recentPackage = AddRecentPackageToOptions("id", "1.0");
Assert.DoesNotThrow(() => SaveOptions());
}
@ -302,13 +302,91 @@ namespace PackageManagement.Tests @@ -302,13 +302,91 @@ namespace PackageManagement.Tests
public void ActivePackageSource_AggregatePackageSourceIsActivePackageSourceInSettings_ReturnsAggregatePackageSource()
{
CreateSettings();
var expectedPackageSource = RegisteredPackageSourceSettings.AggregatePackageSource;
PackageSource expectedPackageSource = RegisteredPackageSourceSettings.AggregatePackageSource;
fakeSettings.SetFakeActivePackageSource(expectedPackageSource);
CreateOptions(fakeSettings);
var activePackageSource = options.ActivePackageSource;
PackageSource activePackageSource = options.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 @@ -39,6 +39,18 @@ namespace PackageManagement.Tests
viewModel = new PackageSourceViewModel(packageSource);
}
void CreateEnabledPackageSource()
{
CreatePackageSource();
packageSource.IsEnabled = true;
}
void CreateDisabledPackageSource()
{
CreatePackageSource();
packageSource.IsEnabled = false;
}
[Test]
public void Name_InstanceCreatedWithRegisteredPackageSource_MatchesRegisteredPackageSourceName()
{
@ -76,5 +88,47 @@ namespace PackageManagement.Tests @@ -76,5 +88,47 @@ namespace PackageManagement.Tests
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