Browse Source

Show package not found error message for Update-Package -reinstall

Fixed null reference exception when package not found when
reinstalling a package for a single project.

Throw an exception when the package id cannot be found when
reinstalling a package for a single project or if the package id
cannot be found in any project when reinstalling for all projects.
pull/701/head
Matt Ward 10 years ago
parent
commit
5d65596d2c
  1. 25
      src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/UpdatePackageCmdlet.cs
  2. 31
      src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/UpdatePackageCmdletTests.cs
  3. 6
      src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementProject.cs

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

@ -228,10 +228,26 @@ namespace ICSharpCode.PackageManagement.Cmdlets @@ -228,10 +228,26 @@ namespace ICSharpCode.PackageManagement.Cmdlets
void ReinstallPackageInSingleProject()
{
IPackageManagementProject project = GetProject();
IPackage package = project.FindPackage(Id, null);
IPackage package = FindPackageOrThrow(project);
ReinstallPackageInProject(project, package);
}
IPackage FindPackageOrThrow(IPackageManagementProject project)
{
IPackage package = project.FindPackage(Id, null);
if (package != null) {
return package;
}
throw CreatePackageNotFoundException(Id);
}
static InvalidOperationException CreatePackageNotFoundException(string packageId)
{
string message = String.Format("Unable to find package '{0}'.", packageId);
throw new InvalidOperationException(message);
}
void ReinstallPackageInProject(IPackageManagementProject project, IPackage package)
{
ReinstallPackageAction action = CreateReinstallPackageAction(project, package);
@ -269,13 +285,20 @@ namespace ICSharpCode.PackageManagement.Cmdlets @@ -269,13 +285,20 @@ namespace ICSharpCode.PackageManagement.Cmdlets
void ReinstallPackageInAllProjects()
{
bool foundPackage = false;
IPackageRepository repository = GetActivePackageRepository();
foreach (IPackageManagementProject project in ConsoleHost.Solution.GetProjects(repository)) {
IPackage package = project.FindPackage(Id, null);
if (package != null) {
foundPackage = true;
ReinstallPackageInProject(project, package);
}
}
if (!foundPackage) {
throw CreatePackageNotFoundException(Id);
}
}
}
}

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

@ -888,6 +888,20 @@ namespace PackageManagement.Cmdlets.Tests @@ -888,6 +888,20 @@ namespace PackageManagement.Cmdlets.Tests
Assert.IsTrue(ReinstallPackageInSingleProjectAction.UpdateDependencies);
}
[Test]
public void ProcessRecord_ReinstallPackageIdIntoProjectWhenPackageIdNotFound_ExceptionThrownAboutMissingPackage()
{
CreateCmdletWithActivePackageSourceAndProject();
SetIdParameter("UnknownPackageId");
SetProjectNameParameter("MyProject");
cmdlet.Reinstall = true;
FakePackage testPackage = fakeProject.FakeLocalRepository.AddFakePackageWithVersion("Test", "1.2.3");
var ex = Assert.Throws<InvalidOperationException>(RunCmdlet);
Assert.AreEqual("Unable to find package 'UnknownPackageId'.", ex.Message);
}
[Test]
public void ProcessRecord_ReinstallWhenPackageIdAndProjectNameSpecifiedAndSourceRepositoryIsOperationAware_ReinstallOperationStartedAndDisposedForPackage()
{
@ -1064,5 +1078,22 @@ namespace PackageManagement.Cmdlets.Tests @@ -1064,5 +1078,22 @@ namespace PackageManagement.Cmdlets.Tests
operationAwareRepository1.OperationsStarted.Single().AssertOperationWasStartedAndDisposed(RepositoryOperationNames.Reinstall, "B");
operationAwareRepository2.OperationsStarted.Single().AssertOperationWasStartedAndDisposed(RepositoryOperationNames.Reinstall, "B");
}
[Test]
public void ProcessRecord_ReinstallPackageInAllProjectsButPackageNotFound_ExceptionThrown()
{
CreateCmdletWithActivePackageSourceAndProject();
AddPackageSourceToConsoleHost();
SetSourceParameter("Test");
SetIdParameter("UnknownPackageId");
cmdlet.Reinstall = true;
FakePackageManagementProject project1 = fakeSolution.AddFakeProject("Project1");
FakePackageManagementProject project2 = fakeSolution.AddFakeProject("Project2");
FakePackageManagementProject project3 = fakeSolution.AddFakeProject("Project3");
var ex = Assert.Throws<InvalidOperationException>(RunCmdlet);
Assert.AreEqual("Unable to find package 'UnknownPackageId'.", ex.Message);
}
}
}

6
src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementProject.cs

@ -221,12 +221,6 @@ namespace ICSharpCode.PackageManagement @@ -221,12 +221,6 @@ namespace ICSharpCode.PackageManagement
string message = String.Format("Multiple versions of '{0}' found. Please specify the version.", packageId);
return new InvalidOperationException(message);
}
InvalidOperationException CreatePackageNotFoundException(string packageId)
{
string message = String.Format("Unable to find package '{0}'.", packageId);
return new InvalidOperationException(message);
}
public ReinstallPackageAction CreateReinstallPackageAction()
{

Loading…
Cancel
Save