From 2b3edb278467830c6f53d393920c75eadb48cff7 Mon Sep 17 00:00:00 2001 From: Matt Ward Date: Thu, 20 Dec 2012 20:58:54 +0000 Subject: [PATCH] Fix pre-release NuGet packages always being installed. Pre-release NuGet packages can now only be installed with the Package Management console when the -IncludePrerelease argument is specified. --- .../Project/Src/InstallPackageAction.cs | 1 - .../Project/Src/ProcessPackageAction.cs | 10 ++++- .../Project/Src/UninstallPackageAction.cs | 1 + .../Project/Src/UpdatePackageAction.cs | 1 - .../Test/Src/InstallPackageActionTests.cs | 41 +++++++++++++++++++ .../Test/Src/UninstallPackageActionTests.cs | 9 ++++ 6 files changed, 60 insertions(+), 3 deletions(-) diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/InstallPackageAction.cs b/src/AddIns/Misc/PackageManagement/Project/Src/InstallPackageAction.cs index 9eb0ffc0cc..dccc8bb396 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/InstallPackageAction.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/InstallPackageAction.cs @@ -19,7 +19,6 @@ namespace ICSharpCode.PackageManagement } public bool IgnoreDependencies { get; set; } - public bool AllowPrereleaseVersions { get; set; } protected override IEnumerable GetPackageOperations() { diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/ProcessPackageAction.cs b/src/AddIns/Misc/PackageManagement/Project/Src/ProcessPackageAction.cs index b335f617b1..502245861b 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/ProcessPackageAction.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/ProcessPackageAction.cs @@ -26,6 +26,7 @@ namespace ICSharpCode.PackageManagement public SemanticVersion PackageVersion { get; set; } public string PackageId { get; set; } public IPackageScriptRunner PackageScriptRunner { get; set; } + public bool AllowPrereleaseVersions { get; set; } public virtual bool HasPackageScriptsToRun() { @@ -97,13 +98,20 @@ namespace ICSharpCode.PackageManagement void GetPackageIfMissing() { if (Package == null) { - Package = Project.SourceRepository.FindPackage(PackageId, PackageVersion); + FindPackage(); } if (Package == null) { ThrowPackageNotFoundError(PackageId); } } + void FindPackage() + { + Package =Project + .SourceRepository + .FindPackage(PackageId, PackageVersion, AllowPrereleaseVersions, allowUnlisted: true); + } + void ThrowPackageNotFoundError(string packageId) { string message = String.Format("Unable to find package '{0}'.", packageId); diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/UninstallPackageAction.cs b/src/AddIns/Misc/PackageManagement/Project/Src/UninstallPackageAction.cs index 52d81bc07d..8c3025115f 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/UninstallPackageAction.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/UninstallPackageAction.cs @@ -15,6 +15,7 @@ namespace ICSharpCode.PackageManagement IPackageManagementEvents packageManagementEvents) : base(project, packageManagementEvents) { + this.AllowPrereleaseVersions = true; } public bool ForceRemove { get; set; } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/UpdatePackageAction.cs b/src/AddIns/Misc/PackageManagement/Project/Src/UpdatePackageAction.cs index ea1c979877..8a6c02a3e9 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/UpdatePackageAction.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/UpdatePackageAction.cs @@ -20,7 +20,6 @@ namespace ICSharpCode.PackageManagement public bool UpdateDependencies { get; set; } public bool UpdateIfPackageDoesNotExistInProject { get; set; } - public bool AllowPrereleaseVersions { get; set; } protected override IEnumerable GetPackageOperations() { diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/InstallPackageActionTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/InstallPackageActionTests.cs index 1fbcea8d84..6ad0850e46 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/InstallPackageActionTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/InstallPackageActionTests.cs @@ -342,6 +342,47 @@ namespace PackageManagement.Tests Assert.AreEqual(expectedPackage, actualPackage); } + [Test] + public void Execute_InstallPrereleasePackageAndAllowPreleasePackagesIsFalse_DoesNotFindPreleasePackage() + { + CreateAction(); + FakePackage package = fakeProject.FakeSourceRepository.AddFakePackageWithVersion("Prerelease", "1.0-beta"); + action.PackageId = "Prerelease"; + action.AllowPrereleaseVersions = false; + + Exception ex = Assert.Throws(typeof(ApplicationException), () => action.Execute()); + + Assert.AreEqual("Unable to find package 'Prerelease'.", ex.Message); + } + + [Test] + public void Execute_InstallPrereleasePackageAndAllowPreleasePackagesIsTrue_InstallsPackageIntoProject() + { + CreateAction(); + FakePackage expectedPackage = fakeProject.FakeSourceRepository.AddFakePackageWithVersion("Prerelease", "1.0-beta"); + action.PackageId = "Prerelease"; + action.AllowPrereleaseVersions = true; + + action.Execute(); + + IPackage actualPackage = fakeProject.PackagePassedToInstallPackage; + Assert.AreEqual(expectedPackage, actualPackage); + } + + [Test] + public void Execute_InstallUnlistedPackage_InstallsPackageIntoProject() + { + CreateAction(); + FakePackage expectedPackage = fakeProject.FakeSourceRepository.AddFakePackageWithVersion("test", "1.0"); + expectedPackage.Listed = false; + action.PackageId = "test"; + + action.Execute(); + + IPackage actualPackage = fakeProject.PackagePassedToInstallPackage; + Assert.AreEqual(expectedPackage, actualPackage); + } + [Test] public void Execute_PackageIdSpecifiedButDoesNotExistInRepository_ExceptionThrown() { diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/UninstallPackageActionTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/UninstallPackageActionTests.cs index 9d43b194c3..6ce5a30611 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/UninstallPackageActionTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/UninstallPackageActionTests.cs @@ -212,5 +212,14 @@ namespace PackageManagement.Tests Assert.IsTrue(hasPackageScripts); } + + [Test] + public void AllowPreleasePackages_DefaultValue_IsTrue() + { + CreateAction(); + + Assert.IsTrue(action.AllowPrereleaseVersions); + } + } }