Example #1
0
        /// <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);
        }
Example #4
0
        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)));
        }
Example #6
0
        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)));
        }
Example #7
0
        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);
            }
        }