/// <summary> /// Output package updates to current project(s) found from the current remote source /// </summary> /// <param name="packagesToDisplay"></param> private async Task WriteUpdatePackagesFromRemoteSourceAsync(NuGetProject project) { var installedPackages = await project.GetInstalledPackagesAsync(Token); installedPackages = installedPackages.Where(p => !IsAutoReferenced(p)); VersionType versionType; if (CollapseVersions) { versionType = VersionType.Latest; } else { versionType = VersionType.Updates; } var projectHasUpdates = false; var metadataTasks = installedPackages.Select(installedPackage => Task.Run(async() => { var metadata = await GetLatestPackageFromRemoteSourceAsync(installedPackage.PackageIdentity, IncludePrerelease.IsPresent); if (metadata != null) { await metadata.GetVersionsAsync(); } return(metadata); })); foreach (var task in installedPackages.Zip(metadataTasks, (p, t) => Tuple.Create(t, p))) { var metadata = await task.Item1; if (metadata != null) { var package = PowerShellUpdatePackage.GetPowerShellPackageUpdateView(metadata, task.Item2.PackageIdentity.Version, versionType, project); var versions = package.Versions ?? Enumerable.Empty <NuGetVersion>(); if (versions.Any()) { projectHasUpdates = true; WriteObject(package); } } } if (!projectHasUpdates) { LogCore(MessageLevel.Info, string.Format(CultureInfo.CurrentCulture, Resources.Cmdlet_NoPackageUpdates, project.GetMetadata <string>(NuGetProjectMetadataKeys.Name))); } }
/// <summary> /// Gets package updates for the project found from the current remote source /// </summary> async Task <IEnumerable <PowerShellUpdatePackage> > GetUpdatePackagesFromRemoteSourceAsync(Project project) { var installedPackages = await project.GetInstalledPackagesAsync(Token); installedPackages = installedPackages.Where(p => !IsAutoReferenced(p)); VersionType versionType; if (CollapseVersions) { versionType = VersionType.Latest; } else { versionType = VersionType.Updates; } var packages = new List <PowerShellUpdatePackage> (); var metadataTasks = installedPackages.Select(installedPackage => Task.Run(async() => { var metadata = await GetLatestPackageFromRemoteSourceAsync(installedPackages, installedPackage.PackageIdentity, IncludePrerelease.IsPresent); if (metadata != null) { await metadata.GetVersionsAsync(); } return(metadata); })); foreach (var task in installedPackages.Zip(metadataTasks, (p, t) => Tuple.Create(t, p))) { var metadata = await task.Item1; if (metadata != null) { var package = PowerShellUpdatePackage.GetPowerShellPackageUpdateView(metadata, task.Item2.PackageIdentity.Version, versionType, project.Name); var versions = package.Versions ?? Enumerable.Empty <NuGetVersion> (); if (versions.Any()) { packages.Add(package); } } } return(packages); }
private void WritePackages(Dictionary <PSSearchMetadata, NuGetVersion> remoteUpdates, VersionType versionType, NuGetProject project) { List <PowerShellUpdatePackage> view = new List <PowerShellUpdatePackage>(); foreach (KeyValuePair <PSSearchMetadata, NuGetVersion> pair in remoteUpdates) { PowerShellUpdatePackage package = PowerShellUpdatePackage.GetPowerShellPackageUpdateView(pair.Key, pair.Value, versionType, project); if (package.Versions != null && package.Versions.Any()) { view.Add(package); } } if (view.Any()) { WriteObject(view, enumerateCollection: true); } else { LogCore(MessageLevel.Info, string.Format(Resources.Cmdlet_NoPackageUpdates, project.GetMetadata <string>(NuGetProjectMetadataKeys.Name))); } }