public void DownloadPackage(string packageId, NuGetVersion version, string feedId, Uri feedUri, ICredentials feedCredentials, bool forcePackageDownload, out string downloadedTo, out string hash, out long size) { var cacheDirectory = GetPackageRoot(feedId); LocalNuGetPackage downloaded = null; downloadedTo = null; if (!forcePackageDownload) { AttemptToGetPackageFromCache(packageId, version, feedId, cacheDirectory, out downloaded, out downloadedTo); } if (downloaded == null) { DownloadPackage(packageId, version, feedUri, feedCredentials, cacheDirectory, out downloaded, out downloadedTo); } else { Log.VerboseFormat("Package was found in cache. No need to download. Using file: '{0}'", downloadedTo); } size = fileSystem.GetFileSize(downloadedTo); string packageHash = null; downloaded.GetStream(stream => packageHash = HashCalculator.Hash(stream)); hash = packageHash; }
private void DownloadPackage( string packageId, IVersion version, Uri feedUri, ICredentials feedCredentials, string cacheDirectory, int maxDownloadAttempts, TimeSpan downloadAttemptBackoff, out LocalNuGetPackage downloaded, out string downloadedTo) { Log.Info("Downloading NuGet package {0} {1} from feed: '{2}'", packageId, version, feedUri); Log.VerboseFormat("Downloaded package will be stored in: '{0}'", cacheDirectory); fileSystem.EnsureDirectoryExists(cacheDirectory); fileSystem.EnsureDiskHasEnoughFreeSpace(cacheDirectory); var fullPathToDownloadTo = GetFilePathToDownloadPackageTo(cacheDirectory, packageId, version.ToString()); var downloader = new NuGet.NuGetPackageDownloader(fileSystem); downloader.DownloadPackage(packageId, version, feedUri, feedCredentials, fullPathToDownloadTo, maxDownloadAttempts, downloadAttemptBackoff); downloaded = new LocalNuGetPackage(fullPathToDownloadTo); downloadedTo = fullPathToDownloadTo; CheckWhetherThePackageHasDependencies(downloaded.Metadata); }
void CheckWhetherThePackageHasDependencies(PackagePhysicalFileMetadata pkg) { var nuGetMetadata = new LocalNuGetPackage(pkg.FullFilePath).Metadata; #if USE_NUGET_V3_LIBS var dependencies = nuGetMetadata.DependencyGroups.SelectMany(ds => ds.Packages).ToArray(); #else var dependencies = nuGetMetadata.DependencySets.SelectMany(ds => ds.Dependencies).ToArray(); #endif if (dependencies.Any()) { Log.Info( "NuGet packages with dependencies are not currently supported, and dependencies won't be installed on the Tentacle. The package '{0} {1}' appears to have the following dependencies: {2}. For more information please see {3}", pkg.PackageId, pkg.Version, string.Join(", ", dependencies.Select(dependency => $"{dependency.Id}")), WhyAmINotAllowedToUseDependencies); } }
private void AttemptToGetPackageFromCache(string packageId, IVersion version, string cacheDirectory, out LocalNuGetPackage downloaded, out string downloadedTo) { downloaded = null; downloadedTo = null; Log.VerboseFormat("Checking package cache for package {0} {1}", packageId, version.ToString()); var name = GetNameOfPackage(packageId, version.ToString()); fileSystem.EnsureDirectoryExists(cacheDirectory); var files = fileSystem.EnumerateFilesRecursively(cacheDirectory, name + "*.nupkg"); foreach (var file in files) { var package = ReadPackageFile(file); if (package == null) { continue; } var idMatches = string.Equals(package.Metadata.Id, packageId, StringComparison.OrdinalIgnoreCase); var versionExactMatch = string.Equals(package.Metadata.Version.ToString(), version.ToString(), StringComparison.OrdinalIgnoreCase); var packageMetadata = new MetadataFactory().GetMetadataFromPackageID(packageId); var nugetVerMatches = VersionFactory.TryCreateVersion(package.Metadata.Version.ToString(), out IVersion packageVersion, packageMetadata.VersionFormat) && version.Equals(packageVersion); if (idMatches && (nugetVerMatches || versionExactMatch)) { downloaded = package; downloadedTo = file; return; } } }
public static PackageFileNameMetadata FromFile(string path) { var fileName = Path.GetFileName(path) ?? ""; if (!TryParseEncodedFileName(fileName, out var packageId, out var version, out var extension) && !TryParseUnsafeFileName(fileName, out packageId, out version, out extension)) { throw new Exception($"Unexpected file format in {fileName}.\nExpected Octopus cached file format: `<PackageId>{SectionDelimiter}<Version>{SectionDelimiter}<CacheBuster>.<Extension>` or `<PackageId>.<SemverVersion>.<Extension>`"); } //TODO: Extract... Obviously _could_ be an issue for .net core if (extension.Equals(".nupkg", StringComparison.InvariantCultureIgnoreCase) && File.Exists(path)) { // var metaData = new FileSystemNuGetPackage(path); // version = metaData.Version; // packageId = metaData.PackageId; var metaData = new LocalNuGetPackage(path).Metadata; version = SemVerFactory.CreateVersion(metaData.Version.ToString()); packageId = metaData.Id; } return(new PackageFileNameMetadata(packageId, version, extension)); }
private void AttemptToGetPackageFromCache(string packageId, NuGetVersion version, string feedId, string cacheDirectory, out LocalNuGetPackage downloaded, out string downloadedTo) { downloaded = null; downloadedTo = null; Log.VerboseFormat("Checking package cache for package {0} {1}", packageId, version.ToString()); var name = GetNameOfPackage(packageId, version.ToString()); fileSystem.EnsureDirectoryExists(cacheDirectory); var files = fileSystem.EnumerateFilesRecursively(cacheDirectory, name + "*.nupkg"); foreach (var file in files) { var package = ReadPackageFile(file); if (package == null) { continue; } if (!string.Equals(package.Metadata.Id, packageId, StringComparison.OrdinalIgnoreCase) || !string.Equals(package.Metadata.Version.ToString(), version.ToString(), StringComparison.OrdinalIgnoreCase)) { continue; } downloaded = package; downloadedTo = file; } }
private void AttemptToGetPackageFromCache(string packageId, NuGetVersion version, string cacheDirectory, out LocalNuGetPackage downloaded, out string downloadedTo) { downloaded = null; downloadedTo = null; Log.VerboseFormat("Checking package cache for package {0} {1}", packageId, version.ToString()); var name = GetNameOfPackage(packageId, version.ToString()); fileSystem.EnsureDirectoryExists(cacheDirectory); var files = fileSystem.EnumerateFilesRecursively(cacheDirectory, name + "*.nupkg"); foreach (var file in files) { var package = ReadPackageFile(file); if (package == null) continue; var idMatches = string.Equals(package.Metadata.Id, packageId, StringComparison.OrdinalIgnoreCase); var versionExactMatch = string.Equals(package.Metadata.Version.ToString(), version.ToString(), StringComparison.OrdinalIgnoreCase); #if USE_NUGET_V2_LIBS var nugetVerMatches = NuGetVersion.TryParse(package.Metadata.Version, out NuGetVersion packageVersion) && VersionComparer.Default.Equals(version, packageVersion); #else var nugetVerMatches = package.Metadata.Version.Equals(version); #endif if (idMatches && (nugetVerMatches || versionExactMatch)) { downloaded = package; downloadedTo = file; return; } } }