Exemplo n.º 1
0
        public async Task <IDictionary <PackageIdentity, PackageLookupResult> > FindVersionUpdates(
            IEnumerable <PackageIdentity> packages,
            NuGetSources sources,
            VersionChange allowedChange,
            UsePrerelease usePrerelease
            )
        {
            var lookupTasks = packages
                              .Distinct()
                              .GroupBy(pi => (pi.Id, MaxVersion: GetMaxVersion(pi, allowedChange)))
                              .Select(HighestVersion)
                              .Select(id => new { Package = id, Update = _packageLookup.FindVersionUpdate(id, sources, allowedChange, usePrerelease) })
                              .ToList();

            await Task.WhenAll(lookupTasks.Select(l => l.Update));

            var result = new Dictionary <PackageIdentity, PackageLookupResult>();

            foreach (var lookupTask in lookupTasks)
            {
                ProcessLookupResult(lookupTask.Package, lookupTask.Update.Result, result);
            }

            return(result);
        }
Exemplo n.º 2
0
        public async Task <IDictionary <string, PackageLookupResult> > FindVersionUpdates(
            IEnumerable <PackageIdentity> packages,
            NuGetSources sources,
            VersionChange allowedChange,
            UsePrerelease usePrerelease)
        {
            var latestOfEach = packages
                               .GroupBy(pi => pi.Id.ToUpperInvariant())
                               .Select(HighestVersion);

            var lookupTasks = latestOfEach
                              .Select(id => _packageLookup.FindVersionUpdate(id, sources, allowedChange, usePrerelease))
                              .ToList();

            await Task.WhenAll(lookupTasks);

            var result = new Dictionary <string, PackageLookupResult>(StringComparer.OrdinalIgnoreCase);

            foreach (var lookupTask in lookupTasks)
            {
                var serverVersions = lookupTask.Result;
                ProcessLookupResult(serverVersions, result);
            }

            return(result);
        }
Exemplo n.º 3
0
        public async Task <IReadOnlyCollection <PackageUpdateSet> > FindUpdatesForPackages(
            IReadOnlyCollection <PackageInProject> packages,
            NuGetSources sources,
            VersionChange allowedChange,
            UsePrerelease usePrerelease)
        {
            var packageIds = packages
                             .Select(p => p.Identity)
                             .Distinct();

            var latestVersions = await _bulkPackageLookup.FindVersionUpdates(
                packageIds, sources, allowedChange, usePrerelease);

            var results = new List <PackageUpdateSet>();

            foreach (var packageId in latestVersions.Keys)
            {
                var latestPackage = latestVersions[packageId];
                var matchVersion  = latestPackage.Selected().Identity.Version;

                var updatesForThisPackage = packages
                                            .Where(p => p.Id == packageId && p.Version < matchVersion)
                                            .ToList();

                if (updatesForThisPackage.Count > 0)
                {
                    var updateSet = new PackageUpdateSet(latestPackage, updatesForThisPackage);
                    results.Add(updateSet);
                }
            }

            return(results);
        }
Exemplo n.º 4
0
        public async Task <PackageLookupResult> FindVersionUpdate(
            PackageIdentity package,
            NuGetSources sources,
            VersionChange allowedChange,
            UsePrerelease usePrerelease)
        {
            var includePrerelease = ShouldAllowPrerelease(package, usePrerelease);

            var foundVersions = await _packageVersionsLookup.Lookup(package.Id, includePrerelease, sources);

            return(VersionChanges.MakeVersions(package.Version, foundVersions, allowedChange));
        }
Exemplo n.º 5
0
        private async Task <IReadOnlyCollection <PackageUpdateSet> > GetSortedUpdates(
            IFolder folder,
            NuGetSources sources,
            VersionChange allowedChange,
            UsePrerelease usePrerelease)
        {
            var updates = await _updateFinder.FindPackageUpdateSets(
                folder, sources, allowedChange, usePrerelease);

            return(_sorter.Sort(updates)
                   .ToList());
        }
Exemplo n.º 6
0
        public async Task <IReadOnlyCollection <PackageUpdateSet> > FindPackageUpdateSets(
            IFolder workingFolder,
            NuGetSources sources,
            VersionChange allowedChange,
            UsePrerelease usePrerelease)
        {
            var packages = FindPackages(workingFolder);

            _logger.Log(PackagesFoundLogger.Log(packages));

            // look for updates to these packages
            var updates = await _packageUpdatesLookup.FindUpdatesForPackages(
                packages, sources, allowedChange, usePrerelease);

            _logger.Log(UpdatesLogger.Log(updates));
            return(updates);
        }
Exemplo n.º 7
0
        private static bool ShouldAllowPrerelease(PackageIdentity package, UsePrerelease usePrerelease)
        {
            switch (usePrerelease)
            {
            case UsePrerelease.Always:
                return(true);

            case UsePrerelease.Never:
                return(false);

            case UsePrerelease.FromPrerelease:
                return(package.Version.IsPrerelease);

            default:
                throw new NuKeeperException($"Invalid UsePrerelease value: {usePrerelease}");
            }
        }
Exemplo n.º 8
0
        public async Task <IReadOnlyCollection <PackageUpdateSet> > FindPackageUpdateSets(
            IFolder workingFolder,
            NuGetSources sources,
            VersionChange allowedChange,
            UsePrerelease usePrerelease,
            Regex includes = null,
            Regex excludes = null)
        {
            var packages = FindPackages(workingFolder);

            _logger.Normal($"Found {packages.Count} packages");

            var filtered = FilteredByIncludeExclude(packages, includes, excludes);

            _logger.Log(PackagesFoundLogger.Log(filtered));

            // look for updates to these packages
            var updates = await _packageUpdatesLookup.FindUpdatesForPackages(
                filtered, sources, allowedChange, usePrerelease);

            _logger.Log(UpdatesLogger.Log(updates));
            return(updates);
        }