Browse Source

Cache package repositories.

pull/15/head
mrward 15 years ago
parent
commit
d4fccb2f42
  1. 2
      src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj
  2. 11
      src/AddIns/Misc/PackageManagement/Project/Src/IPackageRepositoryCache.cs
  3. 12
      src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementService.cs
  4. 56
      src/AddIns/Misc/PackageManagement/Project/Src/PackageRepositoryCache.cs
  5. 1
      src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj
  6. 6
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageRepositoryFactory.cs
  7. 6
      src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementServiceTests.cs
  8. 79
      src/AddIns/Misc/PackageManagement/Test/Src/PackageRepositoryCacheTests.cs

2
src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj

@ -80,6 +80,8 @@ @@ -80,6 +80,8 @@
<Compile Include="Src\Design\FakePackageRepository.cs" />
<Compile Include="Src\Design\FakeProjectManager.cs" />
<Compile Include="Src\Design\WpfDesigner.cs" />
<Compile Include="Src\IPackageRepositoryCache.cs" />
<Compile Include="Src\PackageRepositoryCache.cs" />
<Compile Include="Src\PackagesForSelectedPageResult.cs" />
<Compile Include="Src\ILicenseAcceptanceService.cs" />
<Compile Include="Src\InstalledPackagesViewModel.cs" />

11
src/AddIns/Misc/PackageManagement/Project/Src/IPackageRepositoryCache.cs

@ -0,0 +1,11 @@ @@ -0,0 +1,11 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
namespace ICSharpCode.PackageManagement
{
public interface IPackageRepositoryCache : ISharpDevelopPackageRepositoryFactory
{
}
}

12
src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementService.cs

@ -13,26 +13,26 @@ namespace ICSharpCode.PackageManagement @@ -13,26 +13,26 @@ namespace ICSharpCode.PackageManagement
public class PackageManagementService : IPackageManagementService
{
PackageManagementOptions options;
ISharpDevelopPackageRepositoryFactory packageRepositoryFactory;
IPackageRepositoryCache packageRepositoryCache;
IPackageManagerFactory packageManagerFactory;
IPackageManagementProjectService projectService;
IPackageRepository activePackageRepository;
PackageSource activePackageSource;
public PackageManagementService(PackageManagementOptions options,
ISharpDevelopPackageRepositoryFactory packageRepositoryFactory,
IPackageRepositoryCache packageRepositoryCache,
IPackageManagerFactory packageManagerFactory,
IPackageManagementProjectService projectService)
{
this.options = options;
this.packageRepositoryFactory = packageRepositoryFactory;
this.packageRepositoryCache = packageRepositoryCache;
this.packageManagerFactory = packageManagerFactory;
this.projectService = projectService;
}
public PackageManagementService()
: this(new PackageManagementOptions(),
new SharpDevelopPackageRepositoryFactory(),
new PackageRepositoryCache(),
new SharpDevelopPackageManagerFactory(),
new PackageManagementProjectService())
{
@ -67,7 +67,7 @@ namespace ICSharpCode.PackageManagement @@ -67,7 +67,7 @@ namespace ICSharpCode.PackageManagement
IPackageRepository GetActivePackageRepository()
{
if (activePackageRepository == null) {
activePackageRepository = packageRepositoryFactory.CreateRepository(ActivePackageSource);
activePackageRepository = packageRepositoryCache.CreateRepository(ActivePackageSource);
}
return activePackageRepository;
}
@ -141,7 +141,7 @@ namespace ICSharpCode.PackageManagement @@ -141,7 +141,7 @@ namespace ICSharpCode.PackageManagement
IPackageRepository CreatePackageRepository(PackageSource source)
{
return packageRepositoryFactory.CreateRepository(source);
return packageRepositoryCache.CreateRepository(source);
}
}
}

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

@ -0,0 +1,56 @@ @@ -0,0 +1,56 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Collections.Generic;
using NuGet;
namespace ICSharpCode.PackageManagement
{
public class PackageRepositoryCache : IPackageRepositoryCache
{
ISharpDevelopPackageRepositoryFactory factory;
Dictionary<PackageSource, IPackageRepository> repositories =
new Dictionary<PackageSource, IPackageRepository>();
public PackageRepositoryCache(ISharpDevelopPackageRepositoryFactory factory)
{
this.factory = factory;
}
public PackageRepositoryCache()
: this(new SharpDevelopPackageRepositoryFactory())
{
}
public IPackageRepository CreateRepository(PackageSource packageSource)
{
IPackageRepository repository = GetExistingRepository(packageSource);
if (repository != null) {
return repository;
}
return CreateNewCachedRepository(packageSource);
}
IPackageRepository GetExistingRepository(PackageSource packageSource)
{
IPackageRepository repository = null;
if (repositories.TryGetValue(packageSource, out repository)) {
return repository;
}
return null;
}
IPackageRepository CreateNewCachedRepository(PackageSource packageSource)
{
IPackageRepository repository = factory.CreateRepository(packageSource);
repositories.Add(packageSource, repository);
return repository;
}
public ISharedPackageRepository CreateSharedRepository(string path)
{
return factory.CreateSharedRepository(path);
}
}
}

1
src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj

@ -110,6 +110,7 @@ @@ -110,6 +110,7 @@
<Compile Include="Src\PackageManagementOptionsTests.cs" />
<Compile Include="Src\PackageManagementOptionsViewModelTests.cs" />
<Compile Include="Src\PackageManagementServiceTests.cs" />
<Compile Include="Src\PackageRepositoryCacheTests.cs" />
<Compile Include="Src\PackageRepositoryPathsTests.cs" />
<Compile Include="Src\PackageSourceViewModelTests.cs" />
<Compile Include="Src\PackagesViewModelTests.cs" />

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

@ -9,11 +9,15 @@ using NuGet; @@ -9,11 +9,15 @@ using NuGet;
namespace PackageManagement.Tests.Helpers
{
public class FakePackageRepositoryFactory : ISharpDevelopPackageRepositoryFactory
public class FakePackageRepositoryFactory : IPackageRepositoryCache
{
public List<PackageSource> PackageSourcesPassedToCreateRepository
= new List<PackageSource>();
public PackageSource FirstPackageSourcePassedToCreateRepository {
get { return PackageSourcesPassedToCreateRepository[0]; }
}
public FakePackageRepository FakePackageRepository = new FakePackageRepository();
public Dictionary<PackageSource, FakePackageRepository> FakePackageRepositories =

6
src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementServiceTests.cs

@ -125,7 +125,7 @@ namespace PackageManagement.Tests @@ -125,7 +125,7 @@ namespace PackageManagement.Tests
CreatePackageManagementService();
IPackageRepository activeRepository = packageManagementService.ActivePackageRepository;
PackageSource actualPackageSource = fakePackageRepositoryFactory.PackageSourcesPassedToCreateRepository[0];
PackageSource actualPackageSource = fakePackageRepositoryFactory.FirstPackageSourcePassedToCreateRepository;
Assert.AreEqual(packageSourcesHelper.PackageSource, actualPackageSource);
}
@ -287,7 +287,7 @@ namespace PackageManagement.Tests @@ -287,7 +287,7 @@ namespace PackageManagement.Tests
packageManagementService.ActivePackageSource = expectedPackageSource;
IPackageRepository repository = packageManagementService.ActivePackageRepository;
var packageSource = fakePackageRepositoryFactory.PackageSourcesPassedToCreateRepository[0];
var packageSource = fakePackageRepositoryFactory.FirstPackageSourcePassedToCreateRepository;
Assert.AreEqual(expectedPackageSource, packageSource);
}
@ -305,7 +305,7 @@ namespace PackageManagement.Tests @@ -305,7 +305,7 @@ namespace PackageManagement.Tests
packageManagementService.ActivePackageSource = expectedPackageSource;
IPackageRepository repository = packageManagementService.ActivePackageRepository;
var packageSource = fakePackageRepositoryFactory.PackageSourcesPassedToCreateRepository[0];
var packageSource = fakePackageRepositoryFactory.FirstPackageSourcePassedToCreateRepository;
Assert.AreEqual(expectedPackageSource, packageSource);
}

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

@ -0,0 +1,79 @@ @@ -0,0 +1,79 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using ICSharpCode.PackageManagement;
using NuGet;
using NUnit.Framework;
using PackageManagement.Tests.Helpers;
namespace PackageManagement.Tests
{
[TestFixture]
public class PackageRepositoryCacheTests
{
PackageRepositoryCache cache;
FakePackageRepositoryFactory fakePackageRepositoryFactory;
PackageSource nuGetPackageSource;
void CreateCache()
{
nuGetPackageSource = new PackageSource("http://nuget.org", "NuGet");
fakePackageRepositoryFactory = new FakePackageRepositoryFactory();
cache = new PackageRepositoryCache(fakePackageRepositoryFactory);
}
[Test]
public void CreateRepository_CacheCastToISharpDevelopPackageRepositoryFactory_CreatesPackageRepositoryUsingPackageRepositoryFactoryPassedInConstructor()
{
CreateCache();
var factory = cache as ISharpDevelopPackageRepositoryFactory;
IPackageRepository repository = factory.CreateRepository(nuGetPackageSource);
Assert.AreEqual(fakePackageRepositoryFactory.FakePackageRepository, repository);
}
[Test]
public void CreateRepository_PackageSourcePassed_PackageSourceUsedToCreateRepository()
{
CreateCache();
cache.CreateRepository(nuGetPackageSource);
var actualPackageSource = fakePackageRepositoryFactory.FirstPackageSourcePassedToCreateRepository;
Assert.AreEqual(nuGetPackageSource, actualPackageSource);
}
[Test]
public void CreateRepository_RepositoryAlreadyCreatedForPackageSource_NoRepositoryCreated()
{
CreateCache();
cache.CreateRepository(nuGetPackageSource);
fakePackageRepositoryFactory.PackageSourcesPassedToCreateRepository.Clear();
cache.CreateRepository(nuGetPackageSource);
Assert.AreEqual(0, fakePackageRepositoryFactory.PackageSourcesPassedToCreateRepository.Count);
}
[Test]
public void CreateRepository_RepositoryAlreadyCreatedForPackageSource_RepositoryOriginallyCreatedIsReturned()
{
CreateCache();
IPackageRepository originallyCreatedRepository = cache.CreateRepository(nuGetPackageSource);
fakePackageRepositoryFactory.PackageSourcesPassedToCreateRepository.Clear();
IPackageRepository repository = cache.CreateRepository(nuGetPackageSource);
Assert.AreSame(originallyCreatedRepository, repository);
}
[Test]
public void CreatedSharedRepository_PathPassed_PathUsedToCreatedSharedRepository()
{
CreateCache();
FakeSharedPackageRepository repository = cache.CreateSharedRepository("abc") as FakeSharedPackageRepository;
Assert.AreEqual("abc", repository.PathPassedToConstructor);
}
}
}
Loading…
Cancel
Save