/// <summary> /// Gets the package .nupkg file path if it exists; otherwise, <c>null</c>. /// </summary> /// <param name="packageIdentity">A package identity.</param> /// <returns>The package .nupkg file path if it exists; otherwise, <c>null</c>.</returns> /// <exception cref="ArgumentNullException">Thrown if <paramref name="packageIdentity" /> /// is <c>null</c>.</exception> public string GetInstalledPackageFilePath(PackageIdentity packageIdentity) { if (packageIdentity == null) { throw new ArgumentNullException(nameof(packageIdentity)); } // Check the expected location before searching all directories var packageDirectory = PackagePathResolver.GetInstallPath(packageIdentity); var packageName = PackagePathResolver.GetPackageFileName(packageIdentity); var installPath = Path.GetFullPath(Path.Combine(packageDirectory, packageName)); // Keep the previous optimization of just going by the existance of the file if we find it. if (File.Exists(installPath)) { return(installPath); } // If the file was not found check for non-normalized paths and verify the id/version LocalPackageInfo package = null; if (PackagePathResolver.UseSideBySidePaths) { // Search for a folder with the id and version package = LocalFolderUtility.GetPackagesConfigFolderPackage( Root, packageIdentity, NullLogger.Instance); } else { // Search for just the id package = LocalFolderUtility.GetPackageV2( Root, packageIdentity, NullLogger.Instance, CancellationToken.None); } if (package != null && packageIdentity.Equals(package.Identity)) { return(package.Path); } // Default to empty return(string.Empty); }
private PackageInfo BuildPackageInfo(FeedType type, string rootPath, string id, NuGet.Versioning.NuGetVersion version, List <ProjectInfo> projects) { LocalPackageInfo localPackageInfo; switch (type) { case FeedType.FileSystemV2: localPackageInfo = LocalFolderUtility.GetPackageV2(rootPath, id, version, _logger); if (localPackageInfo == null) { return(null); } return(new PackageInfo { ProjectList = projects, LocalPackageInfo = localPackageInfo }); case FeedType.FileSystemV3: localPackageInfo = LocalFolderUtility.GetPackageV3(rootPath, id, version, _logger); if (localPackageInfo == null) { return(null); } return (new PackageInfo { ProjectList = projects, LocalPackageInfo = localPackageInfo }); default: { Debug.WriteLine($"Unknown Type:{type}"); return(null); } } }
public void FeedPackagePruning_GivenThatAV3FeedPrunesAPackageDuringRestoreVerifyRestoreRecovers() { // Arrange using (var server = new MockServer()) using (var pathContext = new SimpleTestPathContext()) { // Set up solution, project, and packages var testLogger = new TestLogger(); var solution = new SimpleTestSolutionContext(pathContext.SolutionRoot); var serverRepoPath = Path.Combine(pathContext.WorkingDirectory, "serverPackages"); var packageX100 = new SimpleTestPackageContext("x", "1.0.0"); var packageX200 = new SimpleTestPackageContext("x", "2.0.0"); SimpleTestPackageUtility.CreatePackages( serverRepoPath, packageX100, packageX200); var projectA = SimpleTestProjectContext.CreateNETCore( "a", pathContext.SolutionRoot, NuGetFramework.Parse("net45")); projectA.AddPackageToAllFrameworks(packageX200); solution.Projects.Add(projectA); var projectB = SimpleTestProjectContext.CreateNETCore( "b", pathContext.SolutionRoot, NuGetFramework.Parse("net45")); projectB.AddPackageToAllFrameworks(packageX100); solution.Projects.Add(projectB); solution.Create(pathContext.SolutionRoot); // Server setup var indexJson = Util.CreateIndexJson(); Util.AddFlatContainerResource(indexJson, server); Util.AddRegistrationResource(indexJson, server); server.Get.Add("/", request => { return(ServerHandlerV3(request, server, indexJson, serverRepoPath)); }); server.Start(); var feedUrl = server.Uri + "index.json"; // Restore x 2.0.0 and populate the http cache var r = Util.Restore(pathContext, projectA.ProjectPath, 0, "-Source", feedUrl); // Delete x 1.0.0 File.Delete(LocalFolderUtility.GetPackageV2(serverRepoPath, packageX100.Identity, testLogger).Path); // Act // Restore x 1.0.0 r = Util.Restore(pathContext, projectB.ProjectPath, 0, "-Source", feedUrl); var xLib = projectB.AssetsFile.Libraries.SingleOrDefault(e => e.Name == "x"); // Assert Assert.Equal("2.0.0", xLib.Version.ToNormalizedString()); } }