/// <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, SourceCacheContext sourceCacheContext, 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, sourceCacheContext, 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); }
public override async Task <IEnumerable <IPackageSearchMetadata> > GetMetadataAsync(string packageId, bool includePrerelease, bool includeUnlisted, Common.ILogger log, CancellationToken token) { var metadataCache = new MetadataReferenceCache(); var packages = (await _regResource.GetPackageMetadata(packageId, includePrerelease, includeUnlisted, log, token)) .Select(ParseMetadata) .Select(m => metadataCache.GetObject(m)) .ToArray(); return(packages); }
public override async Task <IEnumerable <NuGetVersion> > VersionStartsWith( string packageId, string versionPrefix, bool includePrerelease, SourceCacheContext sourceCacheContext, Common.ILogger log, CancellationToken token) { Common.ILogger logger = log ?? Common.NullLogger.Instance; //*TODOs : Take prerelease as parameter. Also it should return both listed and unlisted for powershell ? var packages = await _regResource.GetPackageMetadata(packageId, includePrerelease, false, sourceCacheContext, logger, token); var versions = new List <NuGetVersion>(); foreach (var package in packages) { var version = (string)package["version"]; if (version.StartsWith(versionPrefix, StringComparison.OrdinalIgnoreCase)) { versions.Add(new NuGetVersion(version)); } } return(versions); }
/// <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); }
public override async Task <IEnumerable <IPackageSearchMetadata> > GetMetadataAsync(string packageId, bool includePrerelease, bool includeUnlisted, Common.ILogger log, CancellationToken token) { var metadataList = await _regResource.GetPackageMetadata(packageId, includePrerelease, includeUnlisted, log, token); return(metadataList.Select(ParseMetadata)); }