Browse Source

Fix incorrect package sources being used when updating a package.

On updating a package all the enabled package sources are used. On
changing the enabled package sources, after opening a solution, the
original set of enabled package sources were being still used.

The change to support solution specific NuGet.Config files broke the
original behaviour since the package sources are reloaded when a
solution is opened or closed and the package repository cache was
still using the original set of package sources.
pull/484/head
Matt Ward 11 years ago
parent
commit
8384a172d6
  1. 2
      src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementServices.cs
  2. 41
      src/AddIns/Misc/PackageManagement/Project/Src/PackageRepositoryCache.cs
  3. 12
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageRepositoryFactory.cs
  4. 8
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/OneRegisteredPackageSourceHelper.cs
  5. 2
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestablePackageManagementOptions.cs
  6. 38
      src/AddIns/Misc/PackageManagement/Test/Src/PackageRepositoryCacheTests.cs

2
src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementServices.cs

@ -42,7 +42,7 @@ namespace ICSharpCode.PackageManagement @@ -42,7 +42,7 @@ namespace ICSharpCode.PackageManagement
static PackageManagementServices()
{
options = new PackageManagementOptions();
packageRepositoryCache = new PackageRepositoryCache(options.PackageSources, options.RecentPackages);
packageRepositoryCache = new PackageRepositoryCache(options);
userAgentGenerator = new UserAgentGeneratorForRepositoryRequests(packageRepositoryCache);
registeredPackageRepositories = new RegisteredPackageRepositories(packageRepositoryCache, options);

41
src/AddIns/Misc/PackageManagement/Project/Src/PackageRepositoryCache.cs

@ -26,30 +26,36 @@ namespace ICSharpCode.PackageManagement @@ -26,30 +26,36 @@ namespace ICSharpCode.PackageManagement
public class PackageRepositoryCache : IPackageRepositoryCache, IPackageRepositoryFactoryEvents
{
ISharpDevelopPackageRepositoryFactory factory;
RegisteredPackageSources registeredPackageSources;
RegisteredPackageSources packageSources;
PackageManagementOptions options;
IList<RecentPackageInfo> recentPackages;
IRecentPackageRepository recentPackageRepository;
ConcurrentDictionary<string, IPackageRepository> repositories =
new ConcurrentDictionary<string, IPackageRepository>();
public PackageRepositoryCache(
ISharpDevelopPackageRepositoryFactory factory,
RegisteredPackageSources registeredPackageSources,
IList<RecentPackageInfo> recentPackages)
PackageManagementOptions options,
ISharpDevelopPackageRepositoryFactory factory)
{
this.options = options;
this.factory = factory;
this.registeredPackageSources = registeredPackageSources;
this.recentPackages = recentPackages;
this.recentPackages = options.RecentPackages;
}
public PackageRepositoryCache(PackageManagementOptions options)
: this(
options,
new SharpDevelopPackageRepositoryFactory())
{
}
public PackageRepositoryCache(
RegisteredPackageSources registeredPackageSources,
RegisteredPackageSources packageSources,
IList<RecentPackageInfo> recentPackages)
: this(
new SharpDevelopPackageRepositoryFactory(),
registeredPackageSources,
recentPackages)
{
this.factory = new SharpDevelopPackageRepositoryFactory();
this.recentPackages = recentPackages;
this.packageSources = packageSources;
}
public event EventHandler<PackageRepositoryFactoryEventArgs> RepositoryCreated;
@ -102,10 +108,19 @@ namespace ICSharpCode.PackageManagement @@ -102,10 +108,19 @@ namespace ICSharpCode.PackageManagement
IEnumerable<IPackageRepository> CreateAllEnabledRepositories()
{
foreach (PackageSource source in registeredPackageSources.GetEnabledPackageSources()) {
foreach (PackageSource source in PackageSources.GetEnabledPackageSources()) {
yield return CreateRepository(source.Source);
}
}
RegisteredPackageSources PackageSources {
get {
if (packageSources != null) {
return packageSources;
}
return options.PackageSources;
}
}
public IPackageRepository CreateAggregateRepository(IEnumerable<IPackageRepository> repositories)
{

12
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageRepositoryFactory.cs

@ -38,6 +38,13 @@ namespace PackageManagement.Tests.Helpers @@ -38,6 +38,13 @@ namespace PackageManagement.Tests.Helpers
public Dictionary<string, FakePackageRepository> FakePackageRepositories =
new Dictionary<string, FakePackageRepository>();
public FakePackageRepositoryFactory()
{
CreateAggregrateRepositoryAction = (repositories) => {
return FakeAggregateRepository;
};
}
public IPackageRepository CreateRepository(string packageSource)
{
PackageSourcesPassedToCreateRepository.Add(packageSource);
@ -84,16 +91,17 @@ namespace PackageManagement.Tests.Helpers @@ -84,16 +91,17 @@ namespace PackageManagement.Tests.Helpers
}
public IEnumerable<IPackageRepository> RepositoriesPassedToCreateAggregateRepository;
public Func<IEnumerable<IPackageRepository>, IPackageRepository> CreateAggregrateRepositoryAction;
public IPackageRepository CreateAggregateRepository(IEnumerable<IPackageRepository> repositories)
{
RepositoriesPassedToCreateAggregateRepository = repositories;
return FakeAggregateRepository;
return CreateAggregrateRepositoryAction(repositories);
}
public FakePackageRepository AddFakePackageRepositoryForPackageSource(string source)
{
var repository = new FakePackageRepository();
var repository = new FakePackageRepository();
FakePackageRepositories.Add(source, repository);
return repository;
}

8
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/OneRegisteredPackageSourceHelper.cs

@ -26,11 +26,14 @@ namespace PackageManagement.Tests.Helpers @@ -26,11 +26,14 @@ namespace PackageManagement.Tests.Helpers
{
public class OneRegisteredPackageSourceHelper
{
public RegisteredPackageSources RegisteredPackageSources;
public TestablePackageManagementOptions Options;
public FakeSettings FakeSettings;
public PackageSource PackageSource = new PackageSource("http://sharpdevelop.com", "Test Package Source");
public RegisteredPackageSources RegisteredPackageSources {
get { return Options.PackageSources; }
}
public OneRegisteredPackageSourceHelper()
{
CreateOneRegisteredPackageSource();
@ -41,7 +44,6 @@ namespace PackageManagement.Tests.Helpers @@ -41,7 +44,6 @@ namespace PackageManagement.Tests.Helpers
Properties properties = new Properties();
Options = new TestablePackageManagementOptions();
FakeSettings = Options.FakeSettings;
RegisteredPackageSources = Options.PackageSources;
AddOnePackageSource();
}
@ -58,7 +60,7 @@ namespace PackageManagement.Tests.Helpers @@ -58,7 +60,7 @@ namespace PackageManagement.Tests.Helpers
}
public void AddTwoPackageSources()
{
{
AddOnePackageSource();
var packageSource = new PackageSource("http://second.codeplex.com", "second");
RegisteredPackageSources.Add(packageSource);

2
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestablePackageManagementOptions.cs

@ -27,6 +27,7 @@ namespace PackageManagement.Tests.Helpers @@ -27,6 +27,7 @@ namespace PackageManagement.Tests.Helpers
{
public Properties Properties;
public FakeSettings FakeSettings;
public FakePackageManagementProjectService ProjectService;
public TestablePackageManagementOptions()
: this(new Properties(), new FakeSettings(), new FakePackageManagementProjectService())
@ -41,6 +42,7 @@ namespace PackageManagement.Tests.Helpers @@ -41,6 +42,7 @@ namespace PackageManagement.Tests.Helpers
{
this.Properties = properties;
this.FakeSettings = fakeSettings;
this.ProjectService = projectService;
}
public static void ChangeSettingsReturnedBySettingsProvider(FakeSettings settings)

38
src/AddIns/Misc/PackageManagement/Test/Src/PackageRepositoryCacheTests.cs

@ -19,6 +19,7 @@ @@ -19,6 +19,7 @@
using System;
using System.Collections.Generic;
using System.IO.Packaging;
using System.Linq;
using ICSharpCode.PackageManagement;
using ICSharpCode.PackageManagement.Design;
using NuGet;
@ -52,9 +53,7 @@ namespace PackageManagement.Tests @@ -52,9 +53,7 @@ namespace PackageManagement.Tests
{
nuGetPackageSource = new PackageSource("http://nuget.org", "NuGet");
fakePackageRepositoryFactory = new FakePackageRepositoryFactory();
RegisteredPackageSources packageSources = packageSourcesHelper.Options.PackageSources;
IList<RecentPackageInfo> recentPackages = packageSourcesHelper.Options.RecentPackages;
cache = new PackageRepositoryCache(fakePackageRepositoryFactory, packageSources, recentPackages);
cache = new PackageRepositoryCache(packageSourcesHelper.Options, fakePackageRepositoryFactory);
}
FakePackageRepository AddFakePackageRepositoryForPackageSource(string source)
@ -395,5 +394,38 @@ namespace PackageManagement.Tests @@ -395,5 +394,38 @@ namespace PackageManagement.Tests
Assert.IsNull(eventArgs);
}
[Test]
public void CreateAggregateRepository_SolutionClosedAndEnabledPackageSourcesChangedAfterCacheCreated_AggregateRepositoryContainsCorrectEnabledPackageRepositories()
{
CreatePackageSources();
packageSourcesHelper.AddTwoPackageSources("Source1", "Source2");
CreateCacheUsingPackageSources();
FakePackageRepository source1Repo = AddFakePackageRepositoryForPackageSource("Source1");
FakePackageRepository source2Repo = AddFakePackageRepositoryForPackageSource("Source2");
fakePackageRepositoryFactory.CreateAggregrateRepositoryAction = (repositories) => {
return new AggregateRepository (repositories);
};
var initialAggregateRepository = cache.CreateAggregateRepository() as AggregateRepository;
var expectedInitialRepositories = new FakePackageRepository[] {
source1Repo,
source2Repo
};
List<IPackageRepository> actualInitialRepositories = initialAggregateRepository.Repositories.ToList();
var solution = new SolutionHelper().MSBuildSolution;
packageSourcesHelper.Options.ProjectService.FireSolutionClosedEvent(solution);
packageSourcesHelper.Options.PackageSources.Clear();
packageSourcesHelper.Options.PackageSources.Add(new PackageSource ("Source3"));
FakePackageRepository source3Repo = AddFakePackageRepositoryForPackageSource("Source3");
var expectedRepositories = new FakePackageRepository[] {
source3Repo
};
var aggregateRepository = cache.CreateAggregateRepository() as AggregateRepository;
List<IPackageRepository> actualRepositories = aggregateRepository.Repositories.ToList();
CollectionAssert.AreEqual(expectedInitialRepositories, actualInitialRepositories);
CollectionAssert.AreEqual(expectedRepositories, actualRepositories);
}
}
}

Loading…
Cancel
Save