Skip to content
This repository was archived by the owner on Oct 16, 2020. It is now read-only.

Commit 8384a17

Browse files
committed
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.
1 parent 50b2f02 commit 8384a17

6 files changed

Lines changed: 81 additions & 22 deletions

File tree

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public static class PackageManagementServices
4242
static PackageManagementServices()
4343
{
4444
options = new PackageManagementOptions();
45-
packageRepositoryCache = new PackageRepositoryCache(options.PackageSources, options.RecentPackages);
45+
packageRepositoryCache = new PackageRepositoryCache(options);
4646
userAgentGenerator = new UserAgentGeneratorForRepositoryRequests(packageRepositoryCache);
4747
registeredPackageRepositories = new RegisteredPackageRepositories(packageRepositoryCache, options);
4848

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

Lines changed: 28 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -26,30 +26,36 @@ namespace ICSharpCode.PackageManagement
2626
public class PackageRepositoryCache : IPackageRepositoryCache, IPackageRepositoryFactoryEvents
2727
{
2828
ISharpDevelopPackageRepositoryFactory factory;
29-
RegisteredPackageSources registeredPackageSources;
29+
RegisteredPackageSources packageSources;
30+
PackageManagementOptions options;
3031
IList<RecentPackageInfo> recentPackages;
3132
IRecentPackageRepository recentPackageRepository;
3233
ConcurrentDictionary<string, IPackageRepository> repositories =
3334
new ConcurrentDictionary<string, IPackageRepository>();
3435

3536
public PackageRepositoryCache(
36-
ISharpDevelopPackageRepositoryFactory factory,
37-
RegisteredPackageSources registeredPackageSources,
38-
IList<RecentPackageInfo> recentPackages)
37+
PackageManagementOptions options,
38+
ISharpDevelopPackageRepositoryFactory factory)
3939
{
40+
this.options = options;
4041
this.factory = factory;
41-
this.registeredPackageSources = registeredPackageSources;
42-
this.recentPackages = recentPackages;
42+
this.recentPackages = options.RecentPackages;
4343
}
44-
44+
45+
public PackageRepositoryCache(PackageManagementOptions options)
46+
: this(
47+
options,
48+
new SharpDevelopPackageRepositoryFactory())
49+
{
50+
}
51+
4552
public PackageRepositoryCache(
46-
RegisteredPackageSources registeredPackageSources,
53+
RegisteredPackageSources packageSources,
4754
IList<RecentPackageInfo> recentPackages)
48-
: this(
49-
new SharpDevelopPackageRepositoryFactory(),
50-
registeredPackageSources,
51-
recentPackages)
5255
{
56+
this.factory = new SharpDevelopPackageRepositoryFactory();
57+
this.recentPackages = recentPackages;
58+
this.packageSources = packageSources;
5359
}
5460

5561
public event EventHandler<PackageRepositoryFactoryEventArgs> RepositoryCreated;
@@ -102,10 +108,19 @@ public IPackageRepository CreateAggregateRepository()
102108

103109
IEnumerable<IPackageRepository> CreateAllEnabledRepositories()
104110
{
105-
foreach (PackageSource source in registeredPackageSources.GetEnabledPackageSources()) {
111+
foreach (PackageSource source in PackageSources.GetEnabledPackageSources()) {
106112
yield return CreateRepository(source.Source);
107113
}
108114
}
115+
116+
RegisteredPackageSources PackageSources {
117+
get {
118+
if (packageSources != null) {
119+
return packageSources;
120+
}
121+
return options.PackageSources;
122+
}
123+
}
109124

110125
public IPackageRepository CreateAggregateRepository(IEnumerable<IPackageRepository> repositories)
111126
{

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

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,13 @@ public string FirstPackageSourcePassedToCreateRepository {
3838
public Dictionary<string, FakePackageRepository> FakePackageRepositories =
3939
new Dictionary<string, FakePackageRepository>();
4040

41+
public FakePackageRepositoryFactory()
42+
{
43+
CreateAggregrateRepositoryAction = (repositories) => {
44+
return FakeAggregateRepository;
45+
};
46+
}
47+
4148
public IPackageRepository CreateRepository(string packageSource)
4249
{
4350
PackageSourcesPassedToCreateRepository.Add(packageSource);
@@ -84,16 +91,17 @@ public IRecentPackageRepository CreateRecentPackageRepository(
8491
}
8592

8693
public IEnumerable<IPackageRepository> RepositoriesPassedToCreateAggregateRepository;
94+
public Func<IEnumerable<IPackageRepository>, IPackageRepository> CreateAggregrateRepositoryAction;
8795

8896
public IPackageRepository CreateAggregateRepository(IEnumerable<IPackageRepository> repositories)
8997
{
9098
RepositoriesPassedToCreateAggregateRepository = repositories;
91-
return FakeAggregateRepository;
99+
return CreateAggregrateRepositoryAction(repositories);
92100
}
93101

94102
public FakePackageRepository AddFakePackageRepositoryForPackageSource(string source)
95103
{
96-
var repository = new FakePackageRepository();
104+
var repository = new FakePackageRepository();
97105
FakePackageRepositories.Add(source, repository);
98106
return repository;
99107
}

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,14 @@ namespace PackageManagement.Tests.Helpers
2626
{
2727
public class OneRegisteredPackageSourceHelper
2828
{
29-
public RegisteredPackageSources RegisteredPackageSources;
3029
public TestablePackageManagementOptions Options;
3130
public FakeSettings FakeSettings;
3231
public PackageSource PackageSource = new PackageSource("http://sharpdevelop.com", "Test Package Source");
3332

33+
public RegisteredPackageSources RegisteredPackageSources {
34+
get { return Options.PackageSources; }
35+
}
36+
3437
public OneRegisteredPackageSourceHelper()
3538
{
3639
CreateOneRegisteredPackageSource();
@@ -41,7 +44,6 @@ void CreateOneRegisteredPackageSource()
4144
Properties properties = new Properties();
4245
Options = new TestablePackageManagementOptions();
4346
FakeSettings = Options.FakeSettings;
44-
RegisteredPackageSources = Options.PackageSources;
4547
AddOnePackageSource();
4648
}
4749

@@ -58,7 +60,7 @@ public void AddOnePackageSource(string source)
5860
}
5961

6062
public void AddTwoPackageSources()
61-
{
63+
{
6264
AddOnePackageSource();
6365
var packageSource = new PackageSource("http://second.codeplex.com", "second");
6466
RegisteredPackageSources.Add(packageSource);

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ public class TestablePackageManagementOptions : PackageManagementOptions
2727
{
2828
public Properties Properties;
2929
public FakeSettings FakeSettings;
30+
public FakePackageManagementProjectService ProjectService;
3031

3132
public TestablePackageManagementOptions()
3233
: this(new Properties(), new FakeSettings(), new FakePackageManagementProjectService())
@@ -41,6 +42,7 @@ public TestablePackageManagementOptions(
4142
{
4243
this.Properties = properties;
4344
this.FakeSettings = fakeSettings;
45+
this.ProjectService = projectService;
4446
}
4547

4648
public static void ChangeSettingsReturnedBySettingsProvider(FakeSettings settings)

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

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
using System;
2020
using System.Collections.Generic;
2121
using System.IO.Packaging;
22+
using System.Linq;
2223
using ICSharpCode.PackageManagement;
2324
using ICSharpCode.PackageManagement.Design;
2425
using NuGet;
@@ -52,9 +53,7 @@ void CreateCacheUsingPackageSources()
5253
{
5354
nuGetPackageSource = new PackageSource("http://nuget.org", "NuGet");
5455
fakePackageRepositoryFactory = new FakePackageRepositoryFactory();
55-
RegisteredPackageSources packageSources = packageSourcesHelper.Options.PackageSources;
56-
IList<RecentPackageInfo> recentPackages = packageSourcesHelper.Options.RecentPackages;
57-
cache = new PackageRepositoryCache(fakePackageRepositoryFactory, packageSources, recentPackages);
56+
cache = new PackageRepositoryCache(packageSourcesHelper.Options, fakePackageRepositoryFactory);
5857
}
5958

6059
FakePackageRepository AddFakePackageRepositoryForPackageSource(string source)
@@ -395,5 +394,38 @@ public void CreateRepository_RepositoryCreatedTwice_RepositoryCreatedEventIsNotF
395394

396395
Assert.IsNull(eventArgs);
397396
}
397+
398+
[Test]
399+
public void CreateAggregateRepository_SolutionClosedAndEnabledPackageSourcesChangedAfterCacheCreated_AggregateRepositoryContainsCorrectEnabledPackageRepositories()
400+
{
401+
CreatePackageSources();
402+
packageSourcesHelper.AddTwoPackageSources("Source1", "Source2");
403+
CreateCacheUsingPackageSources();
404+
FakePackageRepository source1Repo = AddFakePackageRepositoryForPackageSource("Source1");
405+
FakePackageRepository source2Repo = AddFakePackageRepositoryForPackageSource("Source2");
406+
fakePackageRepositoryFactory.CreateAggregrateRepositoryAction = (repositories) => {
407+
return new AggregateRepository (repositories);
408+
};
409+
var initialAggregateRepository = cache.CreateAggregateRepository() as AggregateRepository;
410+
var expectedInitialRepositories = new FakePackageRepository[] {
411+
source1Repo,
412+
source2Repo
413+
};
414+
List<IPackageRepository> actualInitialRepositories = initialAggregateRepository.Repositories.ToList();
415+
var solution = new SolutionHelper().MSBuildSolution;
416+
packageSourcesHelper.Options.ProjectService.FireSolutionClosedEvent(solution);
417+
packageSourcesHelper.Options.PackageSources.Clear();
418+
packageSourcesHelper.Options.PackageSources.Add(new PackageSource ("Source3"));
419+
FakePackageRepository source3Repo = AddFakePackageRepositoryForPackageSource("Source3");
420+
var expectedRepositories = new FakePackageRepository[] {
421+
source3Repo
422+
};
423+
424+
var aggregateRepository = cache.CreateAggregateRepository() as AggregateRepository;
425+
List<IPackageRepository> actualRepositories = aggregateRepository.Repositories.ToList();
426+
427+
CollectionAssert.AreEqual(expectedInitialRepositories, actualInitialRepositories);
428+
CollectionAssert.AreEqual(expectedRepositories, actualRepositories);
429+
}
398430
}
399431
}

0 commit comments

Comments
 (0)