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); }
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); }
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); }
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)); }
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()); }
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); }
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}"); } }
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); }