/// <summary>
        /// Find the latest version of the package
        /// </summary>
        /// <param name="includePrerelease">include versions with prerelease labels</param>
        /// <param name="includeUnlisted">not implemented yet</param>
        public override async Task <IEnumerable <KeyValuePair <string, NuGetVersion> > > GetLatestVersions(IEnumerable <string> packageIds, bool includePrerelease, bool includeUnlisted, Common.ILogger log, CancellationToken token)
        {
            var results = new List <KeyValuePair <string, NuGetVersion> >();

            foreach (var id in packageIds)
            {
                IEnumerable <NuGetVersion> allVersions;
                try
                {
                    var catalogEntries = await _regResource.GetPackageMetadata(id, includePrerelease, includeUnlisted, log, token);

                    allVersions = catalogEntries.Select(p => NuGetVersion.Parse(p["version"].ToString()));
                }
                catch (Exception ex)
                {
                    throw new FatalProtocolException(string.Format(CultureInfo.CurrentCulture, Strings.Protocol_PackageMetadataError, id, _regResource.BaseUri), ex);
                }

                // find the latest
                var latest = allVersions.OrderByDescending(p => p, VersionComparer.VersionRelease).FirstOrDefault();

                results.Add(new KeyValuePair <string, NuGetVersion>(id, latest));
            }

            return(results);
        }
Esempio n. 2
0
        /// <summary>
        /// Get the download url of the package.
        /// 1. If the identity is a SourcePackageDependencyInfo the SourcePackageDependencyInfo.DownloadUri is used.
        /// 2. A url will be constructed for the flat container location if the source has that resource.
        /// 3. The download url will be found in the registration blob as a fallback.
        /// </summary>
        private async Task <Uri> GetDownloadUrl(PackageIdentity identity, Common.ILogger log, CancellationToken token)
        {
            Uri downloadUri   = null;
            var sourcePackage = identity as SourcePackageDependencyInfo;

            if (sourcePackage?.DownloadUri != null)
            {
                // Read the already provided url
                downloadUri = sourcePackage?.DownloadUri;
            }
            else if (_packageBaseAddressUrl != null)
            {
                // Construct the url
                var id      = identity.Id.ToLowerInvariant();
                var version = identity.Version.ToNormalizedString().ToLowerInvariant();

                var url = $"{_packageBaseAddressUrl}/{id}/{version}/{id}.{version}.nupkg";
                downloadUri = new Uri(url);
            }
            else if (_regResource != null)
            {
                // Read the url from the registration information
                var blob = await _regResource.GetPackageMetadata(identity, log, token);

                if (blob != null &&
                    blob["packageContent"] != null)
                {
                    downloadUri = new Uri(blob["packageContent"].ToString());
                }
            }

            return(downloadUri);
        }
Esempio n. 3
0
        /// <summary>
        /// Find the latest version of the package
        /// </summary>
        /// <param name="includePrerelease">include versions with prerelease labels</param>
        /// <param name="includeUnlisted">not implemented yet</param>
        public override async Task <IEnumerable <KeyValuePair <string, NuGetVersion> > > GetLatestVersions(IEnumerable <string> packageIds, bool includePrerelease, bool includeUnlisted, CancellationToken token)
        {
            List <KeyValuePair <string, NuGetVersion> > results = new List <KeyValuePair <string, NuGetVersion> >();

            foreach (var id in packageIds)
            {
                var catalogEntries = await _regResource.GetPackageMetadata(id, includePrerelease, includeUnlisted, token);

                var allVersions = catalogEntries.Select(p => NuGetVersion.Parse(p["version"].ToString()));

                // find the latest
                var latest = allVersions.OrderByDescending(p => p, VersionComparer.VersionRelease).FirstOrDefault();

                results.Add(new KeyValuePair <string, NuGetVersion>(id, latest));
            }

            return(results);
        }
Esempio n. 4
0
        public override async Task <Uri> GetDownloadUrl(PackageIdentity identity, CancellationToken token)
        {
            Uri downloadUri = null;

            var blob = await _regResource.GetPackageMetadata(identity, token);

            if (blob != null && blob["packageContent"] != null)
            {
                downloadUri = new Uri(blob["packageContent"].ToString());
            }

            return(downloadUri);
        }