/// <summary> /// Get all versions for a specific package Id. /// </summary> /// <param name="sourceRepository"></param> /// <param name="packageId"></param> /// <param name="project"></param> /// <param name="includePrerelease"></param> /// <returns></returns> public static IEnumerable <NuGetVersion> GetAllVersionsForPackageId(SourceRepository sourceRepository, string packageId, NuGetProject project, bool includePrerelease) { IEnumerable <string> targetFrameworks = GetProjectTargetFrameworks(project); SearchFilter searchfilter = new SearchFilter(); searchfilter.IncludePrerelease = includePrerelease; searchfilter.SupportedFrameworks = targetFrameworks; searchfilter.IncludeDelisted = false; PSSearchResource resource = sourceRepository.GetResource <PSSearchResource>(); PSSearchMetadata result = null; IEnumerable <NuGetVersion> allVersions = Enumerable.Empty <NuGetVersion>(); try { Task <IEnumerable <PSSearchMetadata> > task = resource.Search(packageId, searchfilter, 0, 30, CancellationToken.None); result = task.Result .Where(p => string.Equals(p.Identity.Id, packageId, StringComparison.OrdinalIgnoreCase)) .FirstOrDefault(); allVersions = result.Versions; } catch (Exception) { if (result == null || !allVersions.Any()) { throw new InvalidOperationException( String.Format(CultureInfo.CurrentCulture, Resources.UnknownPackage, packageId)); } } return(result.Versions); }
/// <summary> /// Get list of package updates that are installed to a project. Used for Get-Package -Updates. /// </summary> /// <param name="installedPackages"></param> /// <param name="targetFrameworks"></param> /// <param name="includePrerelease"></param> /// <param name="skip"></param> /// <param name="take"></param> /// <returns></returns> protected Dictionary <PSSearchMetadata, NuGetVersion> GetPackageUpdatesFromRemoteSource(IEnumerable <PackageReference> installedPackages, IEnumerable <string> targetFrameworks, bool includePrerelease, int skip = 0, int take = 30) { Dictionary <PSSearchMetadata, NuGetVersion> updates = new Dictionary <PSSearchMetadata, NuGetVersion>(); foreach (PackageReference package in installedPackages) { PSSearchMetadata metadata = GetPackagesFromRemoteSource(package.PackageIdentity.Id, targetFrameworks, includePrerelease, skip, take) .Where(p => string.Equals(p.Identity.Id, package.PackageIdentity.Id, StringComparison.OrdinalIgnoreCase)).FirstOrDefault(); updates.Add(metadata, package.PackageIdentity.Version); } return(updates); }
/// <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); }