/// <summary> /// Convert a V2 feed package into a V3 PackageDependencyInfo /// </summary> private SourcePackageDependencyInfo CreateDependencyInfo( V2FeedPackageInfo packageVersion, NuGetFramework projectFramework) { var deps = Enumerable.Empty <PackageDependency>(); var identity = new PackageIdentity(packageVersion.Id, NuGetVersion.Parse(packageVersion.Version.ToString())); if (packageVersion.DependencySets != null && packageVersion.DependencySets.Any()) { // Take only the dependency group valid for the project TFM var nearestFramework = _frameworkReducer.GetNearest( projectFramework, packageVersion.DependencySets.Select(group => group.TargetFramework)); if (nearestFramework != null) { var matches = packageVersion.DependencySets.Where(e => (e.TargetFramework.Equals(nearestFramework))); deps = matches.First().Packages; } } var result = new SourcePackageDependencyInfo( identity, deps, packageVersion.IsListed, _source, new Uri(packageVersion.DownloadUrl), packageVersion.PackageHash); return(result); }
public PackageSearchMetadataV2Feed(V2FeedPackageInfo package) { Authors = string.Join(", ", package.Authors); DependencySets = package.DependencySets; Description = package.Description; IconUrl = GetUriSafe(package.IconUrl); LicenseUrl = GetUriSafe(package.LicenseUrl); Owners = string.Join(", ", package.Owners); PackageId = package.Id; ProjectUrl = GetUriSafe(package.ProjectUrl); Published = package.Published; ReportAbuseUrl = GetUriSafe(package.ReportAbuseUrl); ReleaseNotes = package.ReleaseNotes; RequireLicenseAcceptance = package.RequireLicenseAcceptance; Summary = package.Summary; Tags = package.Tags; Title = package.Title; Version = package.Version; long count; if (long.TryParse(package.DownloadCount, out count)) { DownloadCount = count; } }
public async Task <IEnumerable <VersionInfo> > GetVersions( V2FeedPackageInfo package, SearchFilter filter, Common.ILogger log, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); // apply the filters to the version list returned var packages = await _feedParser.FindPackagesByIdAsync( package.Id, filter.IncludeDelisted, filter.IncludePrerelease, log, cancellationToken); var uniqueVersions = new HashSet <NuGetVersion>(); var results = new List <VersionInfo>(); foreach (var versionPackage in packages.OrderByDescending(p => p.Version)) { if (uniqueVersions.Add(versionPackage.Version)) { var versionInfo = new VersionInfo(versionPackage.Version, versionPackage.DownloadCount) { PackageSearchMetadata = new PackageSearchMetadataV2Feed(versionPackage) }; results.Add(versionInfo); } } return(results); }
public PackageSearchMetadataV2Feed(V2FeedPackageInfo package, MetadataReferenceCache metadataCache) { Authors = metadataCache.GetString(string.Join(", ", package.Authors)); DependencySets = package.DependencySets; Description = package.Description; IconUrl = GetUriSafe(package.IconUrl); LicenseUrl = GetUriSafe(package.LicenseUrl); Owners = metadataCache.GetString(string.Join(", ", package.Owners)); PackageId = package.Id; ProjectUrl = GetUriSafe(package.ProjectUrl); Created = package.Created; LastEdited = package.LastEdited; Published = package.Published; ReportAbuseUrl = GetUriSafe(package.ReportAbuseUrl); RequireLicenseAcceptance = package.RequireLicenseAcceptance; Summary = package.Summary; Tags = package.Tags; Title = package.Title; Version = package.Version; IsListed = package.IsListed; long count; if (long.TryParse(package.DownloadCount, out count)) { DownloadCount = count; } }
private IPackageSearchMetadata CreatePackageSearchResult( V2FeedPackageInfo package, SearchFilter filter, Common.ILogger log, CancellationToken cancellationToken) { var metadata = new PackageSearchMetadataV2Feed(package); return(metadata .WithVersions(() => GetVersions(package, filter, log, cancellationToken))); }
public static IPackageSearchMetadata CreatePackageSearchResult( V2FeedPackageInfo package, MetadataReferenceCache metadataCache, SearchFilter filter, V2FeedParser feedParser, Common.ILogger log, CancellationToken cancellationToken) { var metadata = new PackageSearchMetadataV2Feed(package, metadataCache); return(metadata .WithVersions(() => GetVersions(package, metadataCache, filter, feedParser, log, cancellationToken))); }
private static async Task <IEnumerable <VersionInfo> > GetVersions( V2FeedPackageInfo package, MetadataReferenceCache metadataCache, SearchFilter filter, V2FeedParser feedParser, Common.ILogger log, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); using (var sourceCacheContext = new SourceCacheContext()) { // Update http source cache context MaxAge so that it can always go online to fetch // latest version of packages. sourceCacheContext.MaxAge = DateTimeOffset.UtcNow; // apply the filters to the version list returned var packages = await feedParser.FindPackagesByIdAsync( package.Id, filter.IncludeDelisted, filter.IncludePrerelease, sourceCacheContext, log, cancellationToken); var uniqueVersions = new HashSet <NuGetVersion>(); var results = new List <VersionInfo>(); foreach (var versionPackage in packages.OrderByDescending(p => p.Version)) { if (uniqueVersions.Add(versionPackage.Version)) { var versionInfo = new VersionInfo(versionPackage.Version, versionPackage.DownloadCount) { PackageSearchMetadata = new PackageSearchMetadataV2Feed(versionPackage, metadataCache) }; results.Add(versionInfo); } } return(results); } }
public override async Task <DownloadResourceResult> GetDownloadResourceResultAsync( PackageIdentity identity, ISettings settings, ILogger logger, CancellationToken token) { if (identity == null) { throw new ArgumentNullException(nameof(identity)); } if (settings == null) { throw new ArgumentNullException(nameof(settings)); } if (logger == null) { throw new ArgumentNullException(nameof(logger)); } token.ThrowIfCancellationRequested(); var sourcePackage = identity as SourcePackageDependencyInfo; bool isFromUri = sourcePackage?.PackageHash != null && sourcePackage?.DownloadUri != null; Uri sourceUri; if (isFromUri) { sourceUri = sourcePackage.DownloadUri; } else { V2FeedPackageInfo packageInfo = await _parser.GetPackage(identity, logger, token); if (packageInfo == null) { return(new DownloadResourceResult(DownloadResourceResultStatus.NotFound)); } sourceUri = new Uri(packageInfo.DownloadUrl); } try { return(await GetDownloadResultUtilityPrivate.GetDownloadResultAsync(_source, sourcePackage, sourceUri, settings, logger, token)); } catch (OperationCanceledException) { return(new DownloadResourceResult(DownloadResourceResultStatus.Cancelled)); } catch (Exception ex) when(!(ex is FatalProtocolException)) { // if the expcetion is not FatalProtocolException, catch it. string message = string.Format(CultureInfo.CurrentCulture, "Error downloading '{0}' from '{1}'.", identity, sourceUri); logger.LogError(message + Environment.NewLine + ExceptionUtilities.DisplayMessage(ex)); throw new FatalProtocolException(message, ex); } }