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 @@ -11,6 +11,8 @@ namespace ICSharpCode.PackageManagement
{
public class AvailablePackagesViewModel : PackagesViewModel
{
IPackageRepository repository;
public AvailablePackagesViewModel(
IPackageManagementService packageManagementService,
ITaskFactory taskFactory)
@ -20,9 +22,14 @@ namespace ICSharpCode.PackageManagement @@ -20,9 +22,14 @@ namespace ICSharpCode.PackageManagement
ShowPackageSources = packageManagementService.HasMultiplePackageSources;
}
protected override void UpdateRepositoryBeforeReadPackagesTaskStarts()
{
repository = PackageManagementService.ActivePackageRepository;
}
protected override IQueryable<IPackage> GetAllPackages()
{
return PackageManagementService.ActivePackageRepository.GetPackages();
return repository.GetPackages();
}
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 @@ -8,15 +8,22 @@ namespace ICSharpCode.PackageManagement.Design
{
public class FakeProjectManager : ISharpDevelopProjectManager
{
public FakePackageRepository FakeLocalRepository = new FakePackageRepository();
public FakePackageRepository FakeSourceRepository = new FakePackageRepository();
public FakePackageRepository FakeLocalRepository {
get { return LocalRepository as FakePackageRepository; }
set { LocalRepository = value; }
}
public FakePackageRepository FakeSourceRepository {
get { return SourceRepository as FakePackageRepository; }
set { SourceRepository = value; }
}
public bool IsInstalledReturnValue;
public FakeProjectManager()
{
LocalRepository = FakeLocalRepository;
SourceRepository = FakeSourceRepository;
LocalRepository = new FakePackageRepository();
SourceRepository = new FakePackageRepository();
}
public event EventHandler<PackageOperationEventArgs> PackageReferenceAdded;

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

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

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

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

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

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

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

@ -344,5 +344,20 @@ namespace PackageManagement.Tests @@ -344,5 +344,20 @@ namespace PackageManagement.Tests
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 @@ -114,5 +114,19 @@ namespace PackageManagement.Tests
ApplicationException ex = Assert.Throws<ApplicationException>(() => CompleteReadPackagesTask());
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 @@ -86,5 +86,21 @@ namespace PackageManagement.Tests
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