Browse Source

Do not create package repositories in background thread.

pull/15/head
mrward 15 years ago
parent
commit
871c373b11
  1. 9
      src/AddIns/Misc/PackageManagement/Project/Src/AvailablePackagesViewModel.cs
  2. 15
      src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeProjectManager.cs
  3. 12
      src/AddIns/Misc/PackageManagement/Project/Src/InstalledPackagesViewModel.cs
  4. 18
      src/AddIns/Misc/PackageManagement/Project/Src/PackageUpdatesViewModel.cs
  5. 5
      src/AddIns/Misc/PackageManagement/Project/Src/PackagesViewModel.cs
  6. 15
      src/AddIns/Misc/PackageManagement/Test/Src/AvailablePackagesViewModelTests.cs
  7. 14
      src/AddIns/Misc/PackageManagement/Test/Src/InstalledPackagesViewModelTests.cs
  8. 16
      src/AddIns/Misc/PackageManagement/Test/Src/PackageUpdatesViewModelTests.cs

9
src/AddIns/Misc/PackageManagement/Project/Src/AvailablePackagesViewModel.cs

@ -11,6 +11,8 @@ namespace ICSharpCode.PackageManagement
{ {
public class AvailablePackagesViewModel : PackagesViewModel public class AvailablePackagesViewModel : PackagesViewModel
{ {
IPackageRepository repository;
public AvailablePackagesViewModel( public AvailablePackagesViewModel(
IPackageManagementService packageManagementService, IPackageManagementService packageManagementService,
ITaskFactory taskFactory) ITaskFactory taskFactory)
@ -20,9 +22,14 @@ namespace ICSharpCode.PackageManagement
ShowPackageSources = packageManagementService.HasMultiplePackageSources; ShowPackageSources = packageManagementService.HasMultiplePackageSources;
} }
protected override void UpdateRepositoryBeforeReadPackagesTaskStarts()
{
repository = PackageManagementService.ActivePackageRepository;
}
protected override IQueryable<IPackage> GetAllPackages() protected override IQueryable<IPackage> GetAllPackages()
{ {
return PackageManagementService.ActivePackageRepository.GetPackages(); return repository.GetPackages();
} }
protected override IEnumerable<IPackage> GetFilteredPackagesBeforePagingResults(IQueryable<IPackage> allPackages) protected override IEnumerable<IPackage> GetFilteredPackagesBeforePagingResults(IQueryable<IPackage> allPackages)

15
src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeProjectManager.cs

@ -8,15 +8,22 @@ namespace ICSharpCode.PackageManagement.Design
{ {
public class FakeProjectManager : ISharpDevelopProjectManager public class FakeProjectManager : ISharpDevelopProjectManager
{ {
public FakePackageRepository FakeLocalRepository = new FakePackageRepository(); public FakePackageRepository FakeLocalRepository {
public FakePackageRepository FakeSourceRepository = new FakePackageRepository(); get { return LocalRepository as FakePackageRepository; }
set { LocalRepository = value; }
}
public FakePackageRepository FakeSourceRepository {
get { return SourceRepository as FakePackageRepository; }
set { SourceRepository = value; }
}
public bool IsInstalledReturnValue; public bool IsInstalledReturnValue;
public FakeProjectManager() public FakeProjectManager()
{ {
LocalRepository = FakeLocalRepository; LocalRepository = new FakePackageRepository();
SourceRepository = FakeSourceRepository; SourceRepository = new FakePackageRepository();
} }
public event EventHandler<PackageOperationEventArgs> PackageReferenceAdded; public event EventHandler<PackageOperationEventArgs> PackageReferenceAdded;

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

@ -11,6 +11,7 @@ namespace ICSharpCode.PackageManagement
public class InstalledPackagesViewModel : PackagesViewModel public class InstalledPackagesViewModel : PackagesViewModel
{ {
IProjectManager projectManager; IProjectManager projectManager;
IPackageRepository repository;
string errorMessage = String.Empty; string errorMessage = String.Empty;
public InstalledPackagesViewModel( public InstalledPackagesViewModel(
@ -44,18 +45,19 @@ namespace ICSharpCode.PackageManagement
ReadPackages(); ReadPackages();
} }
protected override IQueryable<IPackage> GetAllPackages() protected override void UpdateRepositoryBeforeReadPackagesTaskStarts()
{ {
IPackageRepository repository = GetRepository(); if (projectManager != null) {
return repository.GetPackages(); repository = projectManager.LocalRepository;
}
} }
IPackageRepository GetRepository() protected override IQueryable<IPackage> GetAllPackages()
{ {
if (projectManager == null) { if (projectManager == null) {
ThrowOriginalExceptionWhenTryingToGetProjectManager(); ThrowOriginalExceptionWhenTryingToGetProjectManager();
} }
return projectManager.LocalRepository; return repository.GetPackages();
} }
void ThrowOriginalExceptionWhenTryingToGetProjectManager() void ThrowOriginalExceptionWhenTryingToGetProjectManager()

18
src/AddIns/Misc/PackageManagement/Project/Src/PackageUpdatesViewModel.cs

@ -13,6 +13,8 @@ namespace ICSharpCode.PackageManagement
{ {
List<IPackage> packages = new List<IPackage>(); List<IPackage> packages = new List<IPackage>();
IPackageManagementService packageManagementService; IPackageManagementService packageManagementService;
IPackageRepository localRepository;
IPackageRepository sourceRepository;
public PackageUpdatesViewModel( public PackageUpdatesViewModel(
IPackageManagementService packageManagementService, IPackageManagementService packageManagementService,
@ -22,22 +24,22 @@ namespace ICSharpCode.PackageManagement
this.packageManagementService = packageManagementService; this.packageManagementService = packageManagementService;
} }
protected override IQueryable<IPackage> GetAllPackages() protected override void UpdateRepositoryBeforeReadPackagesTaskStarts()
{ {
IQueryable<IPackage> localPackages = GetLocalRepositoryPackages(); IProjectManager projectManager = packageManagementService.ActiveProjectManager;
return GetUpdatedPackages(localPackages); localRepository = projectManager.LocalRepository;
sourceRepository = packageManagementService.CreateAggregatePackageRepository();
} }
IQueryable<IPackage> GetLocalRepositoryPackages() protected override IQueryable<IPackage> GetAllPackages()
{ {
IProjectManager projectManager = packageManagementService.ActiveProjectManager; IQueryable<IPackage> localPackages = localRepository.GetPackages();
IPackageRepository localRepository = projectManager.LocalRepository; return GetUpdatedPackages(localPackages);
return localRepository.GetPackages();
} }
IQueryable<IPackage> GetUpdatedPackages(IQueryable<IPackage> localPackages) IQueryable<IPackage> GetUpdatedPackages(IQueryable<IPackage> localPackages)
{ {
IPackageRepository sourceRepository = packageManagementService.CreateAggregatePackageRepository();
return sourceRepository.GetUpdates(localPackages).AsQueryable(); return sourceRepository.GetUpdates(localPackages).AsQueryable();
} }
} }

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

@ -113,6 +113,7 @@ namespace ICSharpCode.PackageManagement
{ {
allPackages = null; allPackages = null;
SelectedPageNumber = 1; SelectedPageNumber = 1;
UpdateRepositoryBeforeReadPackagesTaskStarts();
StartReadPackagesTask(); StartReadPackagesTask();
} }
@ -126,6 +127,10 @@ namespace ICSharpCode.PackageManagement
task.Start(); task.Start();
} }
protected virtual void UpdateRepositoryBeforeReadPackagesTaskStarts()
{
}
void CancelReadPackagesTask() void CancelReadPackagesTask()
{ {
if (task != null) { if (task != null) {

15
src/AddIns/Misc/PackageManagement/Test/Src/AvailablePackagesViewModelTests.cs

@ -344,5 +344,20 @@ namespace PackageManagement.Tests
Assert.IsFalse(fired); Assert.IsFalse(fired);
} }
[Test]
public void GetAllPackages_OnePackageInRepository_RepositoryNotCreatedByBackgroundThread()
{
CreatePackageManagementService();
AddOnePackageSourceToRegisteredSources();
packageManagementService.FakeActivePackageRepository.FakePackages.Add(new FakePackage());
CreateViewModel(packageManagementService);
viewModel.ReadPackages();
packageManagementService.FakeActivePackageRepository = null;
CompleteReadPackagesTask();
Assert.AreEqual(1, viewModel.PackageViewModels.Count);
}
} }
} }

14
src/AddIns/Misc/PackageManagement/Test/Src/InstalledPackagesViewModelTests.cs

@ -114,5 +114,19 @@ namespace PackageManagement.Tests
ApplicationException ex = Assert.Throws<ApplicationException>(() => CompleteReadPackagesTask()); ApplicationException ex = Assert.Throws<ApplicationException>(() => CompleteReadPackagesTask());
Assert.AreEqual("Test", ex.Message); Assert.AreEqual("Test", ex.Message);
} }
[Test]
public void ReadPackages_OnePackageInLocalRepository_RepositoryIsNotCreatedByBackgroundThread()
{
CreatePackageManagementService();
packageManagementService.AddPackageToProjectLocalRepository(new FakePackage());
CreateViewModel(packageManagementService);
viewModel.ReadPackages();
packageManagementService.FakeActiveProjectManager.FakeLocalRepository = null;
CompleteReadPackagesTask();
Assert.AreEqual(1, viewModel.PackageViewModels.Count);
}
} }
} }

16
src/AddIns/Misc/PackageManagement/Test/Src/PackageUpdatesViewModelTests.cs

@ -86,5 +86,21 @@ namespace PackageManagement.Tests
PackageCollectionAssert.AreEqual(expectedPackages, viewModel.PackageViewModels); PackageCollectionAssert.AreEqual(expectedPackages, viewModel.PackageViewModels);
} }
[Test]
public void ReadPackages_OneNewerPackage_RepositoriesNotCreatedByBackgroundThread()
{
CreateViewModel();
AddPackageToLocalRepository("1.0.0.0");
var newerPackage = AddPackageToSourceRepository("1.1.0.0");
viewModel.ReadPackages();
packageManagementService.FakeAggregateRepository = null;
packageManagementService.FakeActiveProjectManager.LocalRepository = null;
CompleteReadPackagesTask();
Assert.AreEqual(1, viewModel.PackageViewModels.Count);
}
} }
} }

Loading…
Cancel
Save