public async Task <string> GetLatestVersionAsync(string packageName, string packageUrl, bool comparePrerelease) { ArgumentGuard.StringMissing(packageName, nameof(packageName)); ArgumentGuard.StringMissing(packageUrl, nameof(packageUrl)); var prefix = string.Empty; if (packageUrl.Contains("api.nuget.org/v3/")) { if (packageUrl.Last().Equals('/')) { prefix += "index.json"; } else { prefix += "/index.json"; } } NuGet.Common.ILogger logger = new Logger(m_logger); var sourceRepository = Repository.Factory.GetCoreV3(packageUrl + prefix); var feed = await sourceRepository.GetResourceAsync <ListResource>(); var allPackages = new List <IEnumerableAsync <IPackageSearchMetadata> >(); var packagesFromSource = await feed.ListAsync(packageName, comparePrerelease, false, false, logger, CancellationToken.None); allPackages.Add(packagesFromSource); ComparePackageSearchMetadata comparer = new ComparePackageSearchMetadata(); var asyncEnumerator = new AggregateEnumerableAsync <IPackageSearchMetadata>(allPackages, comparer, comparer).GetEnumeratorAsync(); if (asyncEnumerator != null) { while (await asyncEnumerator.MoveNextAsync()) { var p = asyncEnumerator.Current; if (p.Identity.Id == packageName) { return(p.Identity.Version.ToString()); } } } return("N/A"); }
/// <summary> /// Executes the logic for nuget list command. /// </summary> /// <returns></returns> public async Task ExecuteCommand(ListArgs listArgs) { //Create SourceFeed for each packageSource var sourceFeeds = new List <ListResource>(); // this is to avoid duplicate remote calls in case of duplicate final endpoints (Ex. api/index.json and /api/v2/ point to the same target) var sources = new HashSet <string>(); foreach (PackageSource packageSource in listArgs.ListEndpoints) { var sourceRepository = Repository.Factory.GetCoreV3(packageSource); var feed = await sourceRepository.GetResourceAsync <ListResource>(listArgs.CancellationToken); if (feed != null) { if (sources.Add(feed.Source)) { sourceFeeds.Add(feed); } } else { listArgs.Logger.LogWarning(string.Format(listArgs.ListCommandListNotSupported, packageSource.Source)); } } WarnForHTTPSources(listArgs); var allPackages = new List <IEnumerableAsync <IPackageSearchMetadata> >(); var log = listArgs.IsDetailed ? listArgs.Logger : NullLogger.Instance; foreach (var feed in sourceFeeds) { var packagesFromSource = await feed.ListAsync(listArgs.Arguments.FirstOrDefault(), listArgs.Prerelease, listArgs.AllVersions, listArgs.IncludeDelisted, log, listArgs.CancellationToken); allPackages.Add(packagesFromSource); } ComparePackageSearchMetadata comparer = new ComparePackageSearchMetadata(); await PrintPackages(listArgs, new AggregateEnumerableAsync <IPackageSearchMetadata>(allPackages, comparer, comparer).GetEnumeratorAsync()); }