Esempio n. 1
0
    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");
    }
Esempio n. 2
0
        /// <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());
        }