/// <summary>
        /// Get the view of PowerShellPackage. Used for Get-Package -Updates command.
        /// </summary>
        internal static PowerShellUpdatePackage GetPowerShellPackageUpdateView(IPackageSearchMetadata data, NuGetVersion version, VersionType versionType, NuGetProject project)
        {
            var package = new PowerShellUpdatePackage()
            {
                Id                = data.Identity.Id,
                Description       = data.Summary,
                ProjectName       = project.GetMetadata <string> (NuGetProjectMetadataKeys.Name),
                AsyncLazyVersions = new AsyncLazy <IEnumerable <NuGetVersion> > (async delegate {
                    var versions = (await data.GetVersionsAsync()) ?? Enumerable.Empty <VersionInfo> ();
                    var results  = versions.Select(v => v.Version).OrderByDescending(v => v)
                                   .Where(r => r > version)
                                   .ToArray();

                    return(results);
                }),
                LicenseUrl = data.LicenseUrl?.AbsoluteUri
            };

            switch (versionType)
            {
            case VersionType.Updates:
                package.AllVersions = true;
                break;

            case VersionType.Latest:
                package.AllVersions = false;
                break;

            default:
                Debug.Fail("Unexpected version type passed.");
                break;
            }

            return(package);
        }
Example #2
0
        /// <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);
        }
Example #4
0
        /// <summary>
        /// Get the view of PowerShellPackage. Used for Get-Package -Updates command.
        /// </summary>
        /// <param name="data"></param>
        /// <param name="version"></param>
        /// <param name="versionType"></param>
        /// <returns></returns>
        internal static PowerShellUpdatePackage GetPowerShellPackageUpdateView(PSSearchMetadata data, NuGetVersion version, VersionType versionType, NuGetProject project)
        {
            PowerShellUpdatePackage package = new PowerShellUpdatePackage();

            package.Id          = data.Identity.Id;
            package.Description = data.Summary;
            package.ProjectName = project.GetMetadata <string>(NuGetProjectMetadataKeys.Name);
            switch (versionType)
            {
            case VersionType.updates:
            {
                package.Versions = data.Versions.Where(p => p > version).OrderByDescending(v => v);
                if (package.Versions != null && package.Versions.Any())
                {
                    LegacyNuGet.SemanticVersion sVersion;
                    LegacyNuGet.SemanticVersion.TryParse(package.Versions.FirstOrDefault().ToNormalizedString(), out sVersion);
                    package.Version = sVersion;
                }
            }
            break;

            case VersionType.latest:
            {
                NuGetVersion nVersion = data.Versions.Where(p => p > version).OrderByDescending(v => v).FirstOrDefault();
                if (nVersion != null)
                {
                    package.Versions = new List <NuGetVersion>()
                    {
                        nVersion
                    };
                    LegacyNuGet.SemanticVersion sVersion;
                    LegacyNuGet.SemanticVersion.TryParse(nVersion.ToNormalizedString(), out sVersion);
                    package.Version = sVersion;
                }
            }
            break;
            }

            return(package);
        }
Example #5
0
        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)));
            }
        }
        /// <summary>
        /// Get the view of PowerShellPackage. Used for Get-Package -Updates command. 
        /// </summary>
        /// <param name="data"></param>
        /// <param name="version"></param>
        /// <param name="versionType"></param>
        /// <returns></returns>
        internal static PowerShellUpdatePackage GetPowerShellPackageUpdateView(PSSearchMetadata data, NuGetVersion version, VersionType versionType, NuGetProject project)
        {
            PowerShellUpdatePackage package = new PowerShellUpdatePackage();
            package.Id = data.Identity.Id;
            package.Description = data.Summary;
            package.ProjectName = project.GetMetadata<string>(NuGetProjectMetadataKeys.Name);
            switch (versionType)
            {
                case VersionType.updates:
                    {
                        package.Versions = data.Versions.Where(p => p > version).OrderByDescending(v => v);
                        if (package.Versions != null && package.Versions.Any())
                        {
                            LegacyNuGet.SemanticVersion sVersion;
                            LegacyNuGet.SemanticVersion.TryParse(package.Versions.FirstOrDefault().ToNormalizedString(), out sVersion);
                            package.Version = sVersion;
                        }
                    }
                    break;
                case VersionType.latest:
                    {
                        NuGetVersion nVersion = data.Versions.Where(p => p > version).OrderByDescending(v => v).FirstOrDefault();
                        if (nVersion != null)
                        {
                            package.Versions = new List<NuGetVersion>() { nVersion };
                            LegacyNuGet.SemanticVersion sVersion;
                            LegacyNuGet.SemanticVersion.TryParse(nVersion.ToNormalizedString(), out sVersion);
                            package.Version = sVersion;
                        }
                    }
                    break;
            }

            return package;
        }