Browse Source

Support Update-Package -reinstall for all packages in all projects.

pull/701/head
Matt Ward 10 years ago
parent
commit
c76f8c2da8
  1. 20
      src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/UpdatePackageCmdlet.cs
  2. 68
      src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/UpdatePackageCmdletTests.cs

20
src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/UpdatePackageCmdlet.cs

@ -112,7 +112,11 @@ namespace ICSharpCode.PackageManagement.Cmdlets @@ -112,7 +112,11 @@ namespace ICSharpCode.PackageManagement.Cmdlets
UpdateAllPackagesInProject();
}
} else {
UpdateAllPackagesInSolution();
if (Reinstall) {
ReinstallAllPackagesInSolution();
} else {
UpdateAllPackagesInSolution();
}
}
}
}
@ -273,11 +277,15 @@ namespace ICSharpCode.PackageManagement.Cmdlets @@ -273,11 +277,15 @@ namespace ICSharpCode.PackageManagement.Cmdlets
}
void ReinstallAllPackagesInProject()
{
ReinstallAllPackagesInProject(GetProject());
}
void ReinstallAllPackagesInProject(IPackageManagementProject project)
{
// No need to update dependencies since all packages will be reinstalled.
IgnoreDependencies = true;
IPackageManagementProject project = GetProject();
foreach (IPackage package in project.GetPackages()) {
ReinstallPackageInProject(project, package);
}
@ -300,5 +308,13 @@ namespace ICSharpCode.PackageManagement.Cmdlets @@ -300,5 +308,13 @@ namespace ICSharpCode.PackageManagement.Cmdlets
throw CreatePackageNotFoundException(Id);
}
}
void ReinstallAllPackagesInSolution()
{
IPackageRepository repository = GetActivePackageRepository();
foreach (IPackageManagementProject project in ConsoleHost.Solution.GetProjects(repository)) {
ReinstallAllPackagesInProject(project);
}
}
}
}

68
src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/UpdatePackageCmdletTests.cs

@ -1053,7 +1053,7 @@ namespace PackageManagement.Cmdlets.Tests @@ -1053,7 +1053,7 @@ namespace PackageManagement.Cmdlets.Tests
}
[Test]
public void ProcessRecord_ReinstallPackageInAllProjectsWhenThreeProjectsButOnlyTwoHavePackage_ReinstallOperationStartedAndDisposedForEachPackage()
public void ProcessRecord_ReinstallPackageInAllProjects_ReinstallOperationStartedAndDisposedForEachPackage()
{
CreateCmdletWithActivePackageSourceAndProject();
AddPackageSourceToConsoleHost();
@ -1071,7 +1071,6 @@ namespace PackageManagement.Cmdlets.Tests @@ -1071,7 +1071,6 @@ namespace PackageManagement.Cmdlets.Tests
project1.FakeSourceRepository = operationAwareRepository1;
var operationAwareRepository2 = new FakeOperationAwarePackageRepository();
project2.FakeSourceRepository = operationAwareRepository2;
cmdlet.Reinstall = true;
RunCmdlet();
@ -1095,5 +1094,70 @@ namespace PackageManagement.Cmdlets.Tests @@ -1095,5 +1094,70 @@ namespace PackageManagement.Cmdlets.Tests
Assert.AreEqual("Unable to find package 'UnknownPackageId'.", ex.Message);
}
[Test]
public void ProcessRecord_ReinstallAllPackagesInAllProjects_PackagesAreReinstalledInAllProjects()
{
CreateCmdletWithActivePackageSourceAndProject();
AddPackageSourceToConsoleHost();
SetSourceParameter("Test");
cmdlet.Reinstall = true;
cmdlet.IgnoreDependencies = false;
FakePackageManagementProject project1 = fakeSolution.AddFakeProject("Project1");
FakePackageManagementProject project2 = fakeSolution.AddFakeProject("Project2");
ProjectHasPackageInstalled(project1, "A", "1.1");
ProjectHasPackageInstalled(project1, "B", "1.2");
ProjectHasPackageInstalled(project2, "A", "1.4");
RunCmdlet();
FakeReinstallPackageAction project2ReinstallAction = project2.FakeReinstallPackageActionsCreated.Single();
Assert.AreEqual(2, project1.FakeReinstallPackageActionsCreated.Count);
Assert.IsTrue(project1.FakeReinstallPackageActionsCreated[0].IsExecuted);
Assert.IsTrue(project1.FakeReinstallPackageActionsCreated[1].IsExecuted);
Assert.IsTrue(project2ReinstallAction.IsExecuted);
Assert.AreEqual(project1, project1.FakeReinstallPackageActionsCreated[0].Project);
Assert.AreEqual(project1, project1.FakeReinstallPackageActionsCreated[1].Project);
Assert.AreEqual(project2, project2ReinstallAction.Project);
Assert.AreEqual(cmdlet, project1.FakeReinstallPackageActionsCreated[0].PackageScriptRunner);
Assert.AreEqual(cmdlet, project1.FakeReinstallPackageActionsCreated[1].PackageScriptRunner);
Assert.AreEqual(cmdlet, project2ReinstallAction.PackageScriptRunner);
Assert.AreEqual("A", project1.FakeReinstallPackageActionsCreated[0].PackageId);
Assert.AreEqual("B", project1.FakeReinstallPackageActionsCreated[1].PackageId);
Assert.AreEqual("A", project2ReinstallAction.PackageId);
Assert.AreEqual("1.1", project1.FakeReinstallPackageActionsCreated[0].PackageVersion.ToString());
Assert.AreEqual("1.2", project1.FakeReinstallPackageActionsCreated[1].PackageVersion.ToString());
Assert.AreEqual("1.4", project2ReinstallAction.PackageVersion.ToString());
Assert.IsFalse(project1.FakeReinstallPackageActionsCreated[0].AllowPrereleaseVersions);
Assert.IsFalse(project1.FakeReinstallPackageActionsCreated[1].AllowPrereleaseVersions);
Assert.IsFalse(project2ReinstallAction.AllowPrereleaseVersions);
Assert.IsFalse(project1.FakeReinstallPackageActionsCreated[0].UpdateDependencies);
Assert.IsFalse(project1.FakeReinstallPackageActionsCreated[1].UpdateDependencies);
Assert.IsFalse(project2ReinstallAction.UpdateDependencies);
Assert.AreEqual("Test", fakeConsoleHost.PackageSourcePassedToGetActivePackageSource);
Assert.AreEqual(fakeConsoleHost.FakePackageRepository, fakeSolution.SourceRepositoryPassedToGetProjects);
}
[Test]
public void ProcessRecord_ReinstallAllPackagesInAllProjects_ReinstallOperationStartedAndDisposedForEachPackage()
{
CreateCmdletWithActivePackageSourceAndProject();
AddPackageSourceToConsoleHost();
SetSourceParameter("Test");
cmdlet.Reinstall = true;
FakePackageManagementProject project1 = fakeSolution.AddFakeProject("Project1");
FakePackageManagementProject project2 = fakeSolution.AddFakeProject("Project2");
ProjectHasPackageInstalled(project1, "B", "1.2");
ProjectHasPackageInstalled(project2, "B", "1.3");
var operationAwareRepository1 = new FakeOperationAwarePackageRepository();
project1.FakeSourceRepository = operationAwareRepository1;
var operationAwareRepository2 = new FakeOperationAwarePackageRepository();
project2.FakeSourceRepository = operationAwareRepository2;
RunCmdlet();
operationAwareRepository1.OperationsStarted.Single().AssertOperationWasStartedAndDisposed(RepositoryOperationNames.Reinstall, "B");
operationAwareRepository2.OperationsStarted.Single().AssertOperationWasStartedAndDisposed(RepositoryOperationNames.Reinstall, "B");
}
}
}

Loading…
Cancel
Save