Example #1
0
        public IPackageSearchMetadata GetPackageFromRepoWithVersion(string packageName,
                                                                    string version,
                                                                    PackageMetadataResource packageMetadataResource,
                                                                    SourceCacheContext sourceCacheContext,
                                                                    SourceRepository sourceRepository)
        {
            IPackageSearchMetadata rootPackage = null;


            if (NuGetVersion.TryParse(version, out var _nugetversion))
            {
                var packageIdentity = new PackageIdentity(packageName, NuGetVersion.Parse(version));

                var exacactsearchMetadata = packageMetadataResource.GetMetadataAsync(packageIdentity, sourceCacheContext, Logger, CancellationToken.None)
                                            .Result;

                if (exacactsearchMetadata == null)
                {
                    Logger.LogDebug("GetPackageFromRepoWithVersion - No Package found in Repo " + $"{sourceRepository.PackageSource.Source} for package : {packageName}  with version  {version}");
                }
                else
                {
                    rootPackage = exacactsearchMetadata;
                }
            }

            return(rootPackage);
        }
        public List <PackageIdentity> GetChildPackageIdentities(IPackageSearchMetadata rootPackage)
        {
            List <PackageIdentity> childPackageIdentities = new List <PackageIdentity>();

            //
            //load child package identity , if there is any dependency set
            if (rootPackage.DependencySets != null && rootPackage.DependencySets.Count() > 0)
            {
                //check specific dependency set for this version only  //note our _targetFramwork is .NETCoreApp,Version=v2.0
                //while the deps may be for .NETStandard,Version=v2.0 or .NETCoreApp,Version = v2.0 as well.

                var nugetFramwork           = NuGetFramework.ParseFrameworkName(NugetHelper.Instance.GetTargetFramwork(), new DefaultFrameworkNameProvider());
                var mostCompatibleFramework = NugetHelper.Instance.GetMostCompatibleFramework(nugetFramwork, rootPackage.DependencySets);


                if (rootPackage.DependencySets.Any(x => x.TargetFramework == mostCompatibleFramework))
                {
                    var depsForTargetFramwork = rootPackage.DependencySets.Where(x => x.TargetFramework == mostCompatibleFramework).FirstOrDefault();
                    if (depsForTargetFramwork.Packages.Count() > 0)
                    {
                        foreach (var package in depsForTargetFramwork.Packages)
                        {
                            PackageIdentity _identity = new PackageIdentity(package.Id, package.VersionRange.MinVersion);
                            if (_identity != null)
                            {
                                childPackageIdentities.Add(_identity);
                            }
                        }
                    }
                }
            }

            //
            return(childPackageIdentities);
        }
Example #3
0
        /// <summary>
        /// Downloads a specified NuGet package.
        /// </summary>
        /// <param name="packageMetadata">The package to download.</param>
        /// <param name="token">A cancellation token to allow cancellation of the task.</param>
        public async Task <DownloadResourceResult> DownloadPackageAsync(IPackageSearchMetadata packageMetadata, CancellationToken token = default)
        {
            var packageIdentity = new PackageIdentity(packageMetadata.Identity.Id, packageMetadata.Identity.Version);
            var downloadContext = new PackageDownloadContext(new SourceCacheContext(), Environment.CurrentDirectory, true);

            return(await _downloadResource.GetDownloadResourceResultAsync(packageIdentity, downloadContext, Path.GetTempPath(), _nullLogger, token));
        }
Example #4
0
        public CatalogEntry(IPackageSearchMetadata package, string catalogUri, string packageContent, Func <string, Uri> getRegistrationUrl)
        {
            if (package == null)
            {
                throw new ArgumentNullException(nameof(package));
            }

            CatalogUri = catalogUri ?? throw new ArgumentNullException(nameof(catalogUri));

            PackageId   = package.Identity.Id;
            Version     = package.Identity.Version.ToFullString();
            Authors     = string.Join(", ", package.Authors);
            Description = package.Description;
            Downloads   = package.DownloadCount.GetValueOrDefault(0);
            HasReadme   = false; //
            IconUrl     = NullSafeToString(package.IconUrl);
            Language    = null;  //
            LicenseUrl  = NullSafeToString(package.LicenseUrl);
            Listed      = package.IsListed;
            //MinClientVersion =
            PackageContent = packageContent;
            ProjectUrl     = NullSafeToString(package.ProjectUrl);
            //RepositoryUrl = package.RepositoryUrlString;
            //RepositoryType = package.RepositoryType;
            //Published = package.Published.GetValueOrDefault(DateTimeOffset.MinValue);
            RequireLicenseAcceptance = package.RequireLicenseAcceptance;
            Summary          = package.Summary;
            Tags             = package.Tags == null ? null : package.Tags.Split(',');
            Title            = package.Title;
            DependencyGroups = ToDependencyGroups(package.DependencySets, catalogUri, getRegistrationUrl);
        }
        private Package ConstructPackage(IPackageSearchMetadata packageMetaData, string downloadUrl, byte[] content)
        {
            if ((packageMetaData == null) || (content == null))
            {
                return(null);
            }

            var package = new Package()
            {
                Authors                  = packageMetaData.Authors,
                Content                  = content,
                Description              = packageMetaData.Description,
                DownloadCount            = packageMetaData.DownloadCount,
                IconUrl                  = packageMetaData.IconUrl,
                Id                       = packageMetaData.Identity.Id,
                IsListed                 = packageMetaData.IsListed,
                LicenseNames             = packageMetaData?.LicenseMetadata?.License,
                LicenseUrl               = packageMetaData.LicenseUrl,
                Owners                   = packageMetaData.Owners,
                PackageDownloadUrl       = downloadUrl,
                PackageUrl               = GetPackageUrl(packageMetaData),
                ProjectUrl               = packageMetaData.ProjectUrl,
                Published                = packageMetaData.Published,
                ReportAbuseUrl           = packageMetaData.ReportAbuseUrl,
                RequireLicenseAcceptance = packageMetaData.RequireLicenseAcceptance,
                Summary                  = packageMetaData.Summary,
                Tags                     = packageMetaData.Tags,
                Title                    = packageMetaData.Title,
                Version                  = packageMetaData.Identity.Version.OriginalVersion,
            };

            return(package);
        }
        public NugetDetailsViewModel(IPackageSearchMetadata metadata) : base()
        {
            this.metadata = metadata;
            url           = new Uri("https://git.io/fAlfh");

            OpenPageCommand = ReactiveCommand.Create(OpenPage);
        }
Example #7
0
        public async Task <(IPackageSearchMetadata metadata, PackageSource source)> GetLatestPackage(
            string packageName, IEnumerable <SourceRepository> sourceRepositories,
            bool includePrerelease, bool includeUnlisted,
            bool disableCache)
        {
            IPackageSearchMetadata packageMetadata = null;
            PackageSource          sourceRepo      = null;

            // var                    sourceRepos     = NugetHelper.Instance.GetSourceRepos(repositories);
            foreach (var sourceRepository in sourceRepositories)
            {
                var metadata = await GetLatestPackage(packageName, sourceRepository, includePrerelease, includeUnlisted,
                                                      disableCache);

                if (packageMetadata == null ||
                    metadata != null && metadata.Identity.HasVersion && !packageMetadata.Identity.HasVersion ||
                    metadata != null && metadata.Identity.HasVersion &&
                    packageMetadata.Identity.HasVersion &&
                    metadata.Identity.Version > packageMetadata.Identity.Version)
                {
                    packageMetadata = metadata;
                    sourceRepo      = sourceRepository.PackageSource;
                }
            }

            return(packageMetadata, sourceRepo);
        }
        public async ValueTask <PackageDeprecationMetadataContextInfo?> GetDeprecationMetadataAsync(
            PackageIdentity identity,
            IReadOnlyCollection <PackageSourceContextInfo> packageSources,
            bool includePrerelease,
            CancellationToken cancellationToken)
        {
            Assumes.NotNull(identity);
            Assumes.NotNullOrEmpty(packageSources);

            string cacheId = PackageSearchMetadataCacheItem.GetCacheId(identity.Id, includePrerelease, packageSources);
            PackageSearchMetadataCacheItem?backgroundDataCache = PackageSearchMetadataMemoryCache.Get(cacheId) as PackageSearchMetadataCacheItem;

            if (backgroundDataCache != null)
            {
                PackageSearchMetadataCacheItemEntry cacheItem = await backgroundDataCache.GetPackageSearchMetadataCacheVersionedItemAsync(identity, cancellationToken);

                return(await cacheItem.PackageDeprecationMetadataContextInfo);
            }

            IPackageMetadataProvider packageMetadataProvider = await GetPackageMetadataProviderAsync(packageSources, cancellationToken);

            IPackageSearchMetadata packageMetadata = await packageMetadataProvider.GetPackageMetadataAsync(identity, includePrerelease, cancellationToken);

            PackageDeprecationMetadata deprecationMetadata = await packageMetadata.GetDeprecationMetadataAsync();

            if (deprecationMetadata == null)
            {
                return(null);
            }
            return(PackageDeprecationMetadataContextInfo.Create(deprecationMetadata));
        }
Example #9
0
    /// <summary>
    /// Creates a web downloadable package from a NuGet source.
    /// </summary>
    /// <param name="pkg">The search result.</param>
    /// <param name="repository">The NuGet repository to use.</param>
    /// <param name="getReadme">If true, tries to pull readme from the server.</param>
    /// <param name="getReleaseNotes">If true, tries to pull release notes from the server.</param>
    public static async Task <WebDownloadablePackage> FromNuGetAsync(IPackageSearchMetadata pkg, INugetRepository repository, bool getReadme = false, bool getReleaseNotes = false)
    {
        var result = new WebDownloadablePackage()
        {
            Name      = !string.IsNullOrEmpty(pkg.Title) ? pkg.Title : pkg.Identity.Id,
            Source    = repository.FriendlyName,
            Id        = pkg.Identity.Id,
            Authors   = pkg.Authors,
            Submitter = new Submitter()
            {
                UserName = pkg.Authors
            },
            Description   = pkg.Description,
            Version       = pkg.Identity.Version,
            ProjectUri    = pkg.ProjectUrl,
            DownloadCount = pkg.DownloadCount,
            Tags          = pkg.Tags?.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries)
        };

        var resolver = GetNuGetUpdateResolver(pkg, repository);

        result._url = new Uri((await resolver.GetDownloadUrlAsync(pkg.Identity.Version, new ReleaseMetadataVerificationInfo(), CancellationToken.None)) !);
        _           = InitNuGetAsyncData(result, pkg, repository, resolver, getReadme, getReleaseNotes);

        if (pkg.IconUrl != null)
        {
            result.Images = new[] { new DownloadableImage()
                                    {
                                        Uri = pkg.IconUrl
                                    } }
        }
        ;

        return(result);
    }
        private static PackageInfo CreatePackageInfo(IPackageSearchMetadata packageSearchMetadata, FeedType feedType, IEnumerable <VersionInfo>?versionInfos, PackageDeprecationMetadata?deprecationMetadata)
        {
            DateTimeOffset?published = null;

            if (packageSearchMetadata.Published.HasValue && packageSearchMetadata.Published.Value.Year > 1900)
            {
                // Note nuget.org reports 1900 for unlisted packages. Pretty sure it's was published later ;)
                published = packageSearchMetadata.Published;
            }

            var versionInfo = versionInfos?.FirstOrDefault(v => v.Version == packageSearchMetadata.Identity.Version);

            var downloadCount = (int?)(versionInfo?.DownloadCount ?? packageSearchMetadata.DownloadCount);

            return(new PackageInfo(packageSearchMetadata.Identity)
            {
                Authors = packageSearchMetadata.Authors,
                Published = published,
                DownloadCount = downloadCount,
                DeprecationInfo = ConvertPackageDeprecationMetadata(deprecationMetadata),
                IsRemotePackage = (feedType == FeedType.HttpV3 || feedType == FeedType.HttpV2),
                IsPrefixReserved = packageSearchMetadata.PrefixReserved,
                Description = packageSearchMetadata.Description,
                Tags = packageSearchMetadata.Tags,
                Summary = packageSearchMetadata.Summary,
                LicenseUrl = packageSearchMetadata.LicenseUrl?.ToString() ?? string.Empty,
                ProjectUrl = packageSearchMetadata.ProjectUrl?.ToString() ?? string.Empty,
                ReportAbuseUrl = packageSearchMetadata.ReportAbuseUrl?.ToString() ?? string.Empty,
                IconUrl = packageSearchMetadata.IconUrl?.ToString() ?? string.Empty,
                ReadmeUrl = packageSearchMetadata.ReadmeUrl?.ToString() ?? string.Empty
            });
        }
Example #11
0
 public static IPackageSearchMetadata WithVersions(this IPackageSearchMetadata metadata, Func <IEnumerable <VersionInfo> > valueFactory)
 {
     return(PackageSearchMetadataBuilder
            .FromMetadata(metadata)
            .WithVersions(AsyncLazy.New(valueFactory))
            .Build());
 }
        internal override async Task <IPackageSearchMetadata> GetPackageMetadataAsync <T>(T identity, bool includePrerelease, CancellationToken cancellationToken)
        {
            cancellationToken.ThrowIfCancellationRequested();

            if (identity is PackageCollectionItem pkgColItem)
            {
                IEnumerable <ITransitivePackageReferenceContextInfo> transitivePRs = pkgColItem.PackageReferences.OfType <ITransitivePackageReferenceContextInfo>();
                ITransitivePackageReferenceContextInfo transitivePR      = transitivePRs.OrderByDescending(x => x.Identity.Version).FirstOrDefault();
                IReadOnlyCollection <PackageIdentity>  transitiveOrigins = transitivePR?.TransitiveOrigins?.Select(to => to.Identity).ToArray() ?? Array.Empty <PackageIdentity>();
                if (transitiveOrigins.Any())
                {
                    // Get only local metadata. We don't want Deprecation and Vulnerabilities Metadata on Transitive packages
                    IPackageSearchMetadata packageMetadata = await _metadataProvider.GetOnlyLocalPackageMetadataAsync(pkgColItem, cancellationToken);

                    if (packageMetadata == null)                                                         // Edge case: local metadata not found
                    {
                        packageMetadata = PackageSearchMetadataBuilder.FromIdentity(pkgColItem).Build(); // create metadata object only with ID
                    }

                    return(new TransitivePackageSearchMetadata(packageMetadata, transitiveOrigins));
                }
            }

            return(await base.GetPackageMetadataAsync(identity, includePrerelease, cancellationToken));
        }
 private PackageLicenseInfo GeneratePackageLicenseInfo(IPackageSearchMetadata metadata)
 {
     return(new PackageLicenseInfo(
                metadata.Identity.Id,
                PackageLicenseUtilities.GenerateLicenseLinks(metadata),
                metadata.Authors));
 }
Example #14
0
        public void CanDownloadNewestVersion()
        {
            Version actualNewestVersion;
            string  message;
            List <IPackageSearchMetadata> availablePackages = new List <IPackageSearchMetadata>()
            {
                this.GeneratePackageSeachMetadata(new Version(CurrentVersion)),
                this.GeneratePackageSeachMetadata(new Version(NewerVersion)),
            };

            string testDownloadPath = Path.Combine(this.downloadDirectoryPath, "testNuget.zip");
            IPackageSearchMetadata newestAvailableVersion = availablePackages.Last();

            this.mockNuGetFeed.Setup(foo => foo.QueryFeedAsync(NuGetFeedName)).ReturnsAsync(availablePackages);
            this.mockNuGetFeed.Setup(foo => foo.DownloadPackageAsync(It.Is <PackageIdentity>(packageIdentity => packageIdentity == newestAvailableVersion.Identity))).ReturnsAsync(testDownloadPath);
            this.mockNuGetFeed.Setup(foo => foo.VerifyPackage(It.IsAny <string>())).Returns(true);

            bool success = this.upgrader.TryQueryNewestVersion(out actualNewestVersion, out message);

            // Assert that no new version was returned
            success.ShouldBeTrue($"Expecting TryQueryNewestVersion to have completed sucessfully. Error: {message}");
            actualNewestVersion.ShouldEqual(newestAvailableVersion.Identity.Version.Version, "Actual new version does not match expected new version.");

            bool downloadSuccessful = this.upgrader.TryDownloadNewestVersion(out message);

            downloadSuccessful.ShouldBeTrue();
            this.upgrader.DownloadedPackagePath.ShouldEqual(testDownloadPath);
            this.mockNuGetFeed.Verify(nuGetFeed => nuGetFeed.VerifyPackage(It.IsAny <string>()), Times.Once());
        }
Example #15
0
        public void DownloadFailsOnNuGetPackageVerificationFailure()
        {
            Version actualNewestVersion;
            string  message;
            List <IPackageSearchMetadata> availablePackages = new List <IPackageSearchMetadata>()
            {
                this.GeneratePackageSeachMetadata(new Version(CurrentVersion)),
                this.GeneratePackageSeachMetadata(new Version(NewerVersion)),
            };

            IPackageSearchMetadata newestAvailableVersion = availablePackages.Last();

            string testDownloadPath = Path.Combine(this.downloadDirectoryPath, "testNuget.zip");

            this.mockNuGetFeed.Setup(foo => foo.QueryFeedAsync(NuGetFeedName)).ReturnsAsync(availablePackages);
            this.mockNuGetFeed.Setup(foo => foo.DownloadPackageAsync(It.Is <PackageIdentity>(packageIdentity => packageIdentity == newestAvailableVersion.Identity)))
            .Callback(new DownloadPackageAsyncCallback(
                          (packageIdentity) => this.mockFileSystem.WriteAllText(testDownloadPath, "Package contents that will fail validation")))
            .ReturnsAsync(testDownloadPath);
            this.mockNuGetFeed.Setup(foo => foo.VerifyPackage(It.IsAny <string>())).Returns(false);

            bool success = this.upgrader.TryQueryNewestVersion(out actualNewestVersion, out message);

            success.ShouldBeTrue($"Expecting TryQueryNewestVersion to have completed sucessfully. Error: {message}");
            actualNewestVersion.ShouldEqual(newestAvailableVersion.Identity.Version.Version, "Actual new version does not match expected new version.");

            bool downloadSuccessful = this.upgrader.TryDownloadNewestVersion(out message);

            this.mockNuGetFeed.Verify(nuGetFeed => nuGetFeed.VerifyPackage(this.upgrader.DownloadedPackagePath), Times.Once());
            downloadSuccessful.ShouldBeFalse("Failure to verify NuGet package should cause download to fail.");
            this.mockFileSystem.FileExists(testDownloadPath).ShouldBeFalse("VerifyPackage should delete invalid packages");
        }
Example #16
0
        private IReadOnlyList <DependencyGroupItem> GetDependencies(IPackageSearchMetadata package)
        {
            var groupItems = new List <DependencyGroupItem>();

            foreach (var set in package.DependencySets)
            {
                var item = new DependencyGroupItem
                {
                    TargetFramework = set.TargetFramework.Framework,
                    Dependencies    = new List <DependencyItem>()
                };

                foreach (var dependency in set.Packages)
                {
                    item.Dependencies.Add(new DependencyItem
                    {
                        Id    = dependency.Id,
                        Range = dependency.VersionRange.ToNormalizedString(),
                    });
                }

                groupItems.Add(item);
            }

            return(groupItems);
        }
Example #17
0
        /// <summary>
        /// Finds all of the dependencies of a given package, including dependencies not available in the target repository.
        /// </summary>
        /// <param name="packageSearchMetadata">The package for which to obtain the dependencies for.</param>
        /// <param name="includeUnlisted">Include unlisted packages.</param>
        /// <param name="dependenciesAccumulator">A set which will contain all packages that are dependencies of the current package.</param>
        /// <param name="packagesNotFoundAccumulator">A set which will contain all dependencies of the package that were not found in the NuGet feed.</param>
        /// <param name="includePrerelease">Include pre-release packages.</param>
        /// <param name="token">A cancellation token to allow cancellation of the task.</param>
        private async Task FindDependenciesRecursiveAsync(IPackageSearchMetadata packageSearchMetadata, bool includePrerelease, bool includeUnlisted, HashSet <IPackageSearchMetadata> dependenciesAccumulator, HashSet <string> packagesNotFoundAccumulator, CancellationToken token = default)
        {
            // Check if package metadata resolved or has dependencies.
            if (packageSearchMetadata?.DependencySets == null)
            {
                return;
            }

            // Go over all agnostic dependency sets.
            foreach (var dependencySet in packageSearchMetadata.DependencySets)
            {
                foreach (var package in dependencySet.Packages)
                {
                    var metadata = (await GetPackageDetails(package.Id, includePrerelease, includeUnlisted, token)).ToArray();
                    if (metadata.Any())
                    {
                        var lastVersion = Nuget.GetNewestVersion(metadata);
                        if (dependenciesAccumulator.Contains(lastVersion))
                        {
                            continue;
                        }

                        dependenciesAccumulator.Add(lastVersion);
                        await FindDependenciesRecursiveAsync(lastVersion, includePrerelease, includeUnlisted, dependenciesAccumulator, packagesNotFoundAccumulator, token);
                    }
                    else
                    {
                        packagesNotFoundAccumulator.Add(package.Id);
                    }
                }
            }
        }
Example #18
0
        public async ValueTask <IReadOnlyCollection <VersionInfoContextInfo> > GetPackageVersionsAsync(
            PackageIdentity identity,
            IReadOnlyCollection <PackageSourceContextInfo> packageSources,
            bool includePrerelease,
            CancellationToken cancellationToken)
        {
            Assumes.NotNull(identity);
            Assumes.NotNullOrEmpty(packageSources);

            string cacheId = PackageSearchMetadataCacheItem.GetCacheId(identity.Id, includePrerelease, packageSources);
            PackageSearchMetadataCacheItem?backgroundDataCache = PackageSearchMetadataMemoryCache.Get(cacheId) as PackageSearchMetadataCacheItem;

            if (backgroundDataCache != null)
            {
                return(await backgroundDataCache.AllVersionsContextInfo);
            }

            IPackageMetadataProvider packageMetadataProvider = await GetPackageMetadataProviderAsync(packageSources, cancellationToken);

            IPackageSearchMetadata packageMetadata = await packageMetadataProvider.GetPackageMetadataAsync(identity, includePrerelease, cancellationToken);

            // Update the cache
            var cacheEntry = new PackageSearchMetadataCacheItem(packageMetadata, packageMetadataProvider);

            cacheEntry.UpdateSearchMetadata(packageMetadata);
            PackageSearchMetadataMemoryCache.AddOrGetExisting(cacheId, cacheEntry, CacheItemPolicy);

            return(await cacheEntry.AllVersionsContextInfo);
        }
Example #19
0
        private Package ToPackage(IPackageSearchMetadata package)
        {
            return(new Package
            {
                Id = package.Identity.Id,
                Version = package.Identity.Version,
                Authors = ParseAuthors(package.Authors),
                Description = package.Description,
                Downloads = 0,
                HasReadme = false,
                Language = null,
                Listed = package.IsListed,
                MinClientVersion = null,
                Published = package.Published?.UtcDateTime ?? DateTime.MinValue,
                RequireLicenseAcceptance = package.RequireLicenseAcceptance,
                Summary = package.Summary,
                Title = package.Title,
                IconUrl = package.IconUrl,
                LicenseUrl = package.LicenseUrl,
                ProjectUrl = package.ProjectUrl,
                PackageTypes = new List <PackageType>(),
                RepositoryUrl = null,
                RepositoryType = null,
                Tags = package.Tags?.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries),

                Dependencies = ToDependencies(package)
            });
        }
Example #20
0
 private List <PackageDependency> ToDependencies(IPackageSearchMetadata package)
 {
     return(package
            .DependencySets
            .SelectMany(ToDependencies)
            .ToList());
 }
Example #21
0
        public async Task <IReadOnlyList <IPackage> > GetListAsync(int resultCount, IPackageSearchMetadata package, SourceRepository repository, Func <IPackageSearchMetadata, IPackageSearchMetadata, bool> versionFilter = null, bool isPrereleaseIncluded = false, CancellationToken cancellationToken = default)
        {
            if (versionFilter == null)
            {
                versionFilter = (source, target) => true;
            }

            try
            {
                List <IPackage> result = new List <IPackage>();
                if (await SearchOlderVersionsDirectly(result, resultCount, package, repository, versionFilter))
                {
                    return(result);
                }

                if (await SearchOlderVersionsUsingMetadataResource(result, resultCount, package, repository, versionFilter, isPrereleaseIncluded, cancellationToken))
                {
                    return(result);
                }

                return(new List <IPackage>());
            }
            catch (FatalProtocolException e) when(e.InnerException is TaskCanceledException)
            {
                cancellationToken.ThrowIfCancellationRequested();
                throw e;
            }
        }
        /// <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);
        }
        private static Dependency[] ParseMetadataDependencies(IPackageSearchMetadata pkg)
        {
            List <Dependency> dependencies = new List <Dependency>();

            foreach (var pkgDependencyGroup in pkg.DependencySets)
            {
                foreach (var pkgDependencyItem in pkgDependencyGroup.Packages)
                {
                    // check if version range is not null. In case we have package with dependency but no version specified
                    VersionRange depVersionRange;
                    if (pkgDependencyItem.VersionRange == null)
                    {
                        depVersionRange = VersionRange.All;
                    }
                    else
                    {
                        depVersionRange = pkgDependencyItem.VersionRange;
                    }

                    dependencies.Add(
                        new Dependency(pkgDependencyItem.Id, depVersionRange));
                }
            }

            return(dependencies.ToArray());
        }
Example #24
0
    private static async Task <string?> InitNuGetReleaseNotes(IPackageSearchMetadata packageSearchMetadata,
                                                              INugetRepository repository)
    {
        var reader = await repository.DownloadNuspecReaderAsync(packageSearchMetadata.Identity);

        return(reader?.GetReleaseNotes());
    }
Example #25
0
        public override bool TryQueryNewestVersion(out Version newVersion, out string message)
        {
            try
            {
                if (!this.EnsureNuGetFeedInitialized(out message))
                {
                    newVersion = null;
                    return(false);
                }

                IList <IPackageSearchMetadata> queryResults = this.QueryFeed(firstAttempt: true);

                // Find the package with the highest version
                IPackageSearchMetadata highestVersionAvailable = null;
                foreach (IPackageSearchMetadata result in queryResults)
                {
                    if (highestVersionAvailable == null || result.Identity.Version > highestVersionAvailable.Identity.Version)
                    {
                        highestVersionAvailable = result;
                    }
                }

                if (highestVersionAvailable != null &&
                    highestVersionAvailable.Identity.Version.Version > this.installedVersion)
                {
                    this.highestVersionAvailable = highestVersionAvailable;
                }

                newVersion = this.highestVersionAvailable?.Identity?.Version?.Version;

                if (newVersion != null)
                {
                    this.tracer.RelatedInfo($"{nameof(this.TryQueryNewestVersion)} - new version available: installedVersion: {this.installedVersion}, highestVersionAvailable: {newVersion}");
                    message = $"New version {highestVersionAvailable.Identity.Version} is available.";
                    return(true);
                }
                else if (highestVersionAvailable != null)
                {
                    this.tracer.RelatedInfo($"{nameof(this.TryQueryNewestVersion)} - up-to-date");
                    message = $"highest version available is {highestVersionAvailable.Identity.Version}, you are up-to-date";
                    return(true);
                }
                else
                {
                    this.tracer.RelatedInfo($"{nameof(this.TryQueryNewestVersion)} - no versions available from feed.");
                    message = $"No versions available via feed.";
                }
            }
            catch (Exception ex)
            {
                this.TraceException(
                    ex,
                    nameof(this.TryQueryNewestVersion),
                    "Exception encountered querying for newest version of upgrade package.");
                message    = ex.Message;
                newVersion = null;
            }

            return(false);
        }
        public async ValueTask <IReadOnlyCollection <VersionInfoContextInfo> > GetPackageVersionsAsync(
            PackageIdentity identity,
            IReadOnlyCollection <PackageSourceContextInfo> packageSources,
            bool includePrerelease,
            CancellationToken cancellationToken)
        {
            Assumes.NotNull(identity);
            Assumes.NotNullOrEmpty(packageSources);

            string cacheId = PackageSearchMetadataCacheItem.GetCacheId(identity.Id, includePrerelease, packageSources);
            PackageSearchMetadataCacheItem?backgroundDataCache = PackageSearchMetadataMemoryCache.Get(cacheId) as PackageSearchMetadataCacheItem;

            if (backgroundDataCache != null)
            {
                return(await backgroundDataCache.AllVersionsContextInfo);
            }

            IPackageMetadataProvider packageMetadataProvider = await GetPackageMetadataProviderAsync(packageSources, cancellationToken);

            IPackageSearchMetadata packageMetadata = await packageMetadataProvider.GetPackageMetadataAsync(identity, includePrerelease, cancellationToken);

            IEnumerable <VersionInfo> versions = await packageMetadata.GetVersionsAsync();

            return(await Task.WhenAll(versions.Select(v => VersionInfoContextInfo.CreateAsync(v).AsTask())));
        }
Example #27
0
        public NuGetPackage(IPackageSearchMetadata packageMetadata, MetadataOrigin fromPage)
        {
            FromPage         = fromPage;
            _packageMetadata = packageMetadata;

            Title         = packageMetadata.Title;
            Description   = packageMetadata.Description;
            IconUrl       = packageMetadata.IconUrl;
            Authors       = packageMetadata.Authors;
            DownloadCount = (int?)packageMetadata.DownloadCount;
            Summary       = packageMetadata.Summary;

            LastVersion = packageMetadata.Identity.Version;

            ValidationContext = new ValidationContext();

            switch (fromPage)
            {
            case MetadataOrigin.Browse:
                InstalledVersion = null;
                break;

            case MetadataOrigin.Installed:
                InstalledVersion = LastVersion;
                break;

            case MetadataOrigin.Updates when packageMetadata is UpdatePackageSearchMetadata updatePackageSearchMetadata:
                InstalledVersion = updatePackageSearchMetadata.FromVersion.Version;
                Status           = PackageStatus.UpdateAvailable;
                break;
            }
        }
 public NugetPackageDto(IPackageSearchMetadata metadata)
 {
     IconUrl     = metadata.IconUrl ?? new Uri("https://git.io/fAlfh");
     Description = metadata.Description;
     ProjectUrl  = metadata.ProjectUrl;
     Title       = metadata.Title;
 }
Example #29
0
        public void QueryNewestVersionReacquiresCredentialsOnAuthFailure(Exception exception)
        {
            Version actualNewestVersion;
            string  message;
            List <IPackageSearchMetadata> availablePackages = new List <IPackageSearchMetadata>()
            {
                this.GeneratePackageSeachMetadata(new Version(CurrentVersion)),
                this.GeneratePackageSeachMetadata(new Version(NewerVersion)),
            };

            string testDownloadPath = Path.Combine(this.downloadDirectoryPath, "testNuget.zip");
            IPackageSearchMetadata newestAvailableVersion = availablePackages.Last();

            this.mockNuGetFeed.SetupSequence(foo => foo.QueryFeedAsync(It.IsAny <string>()))
            .Throws(exception)
            .ReturnsAsync(availablePackages);

            // Setup the credential manager
            string emptyString = string.Empty;

            this.mockCredentialManager.Setup(foo => foo.TryDeleteCredential(It.IsAny <ITracer>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), out emptyString)).Returns(true);

            bool success = this.upgrader.TryQueryNewestVersion(out actualNewestVersion, out message);

            // Verify expectations
            success.ShouldBeTrue($"Expecting TryQueryNewestVersion to have completed sucessfully. Error: {message}");
            actualNewestVersion.ShouldEqual(newestAvailableVersion.Identity.Version.Version, "Actual new version does not match expected new version.");

            this.mockNuGetFeed.Verify(nuGetFeed => nuGetFeed.QueryFeedAsync(It.IsAny <string>()), Times.Exactly(2));

            string outString = string.Empty;

            this.mockCredentialManager.Verify(credentialManager => credentialManager.TryGetCredential(It.IsAny <ITracer>(), It.IsAny <string>(), out outString, out outString, out outString), Times.Exactly(2));
            this.mockCredentialManager.Verify(credentialManager => credentialManager.TryDeleteCredential(It.IsAny <ITracer>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), out outString), Times.Exactly(1));
        }
Example #30
0
 public static IPackageSearchMetadata WithVersions(this IPackageSearchMetadata metadata, IEnumerable <VersionInfo> versions)
 {
     return(PackageSearchMetadataBuilder
            .FromMetadata(metadata)
            .WithVersions(AsyncLazy.New(versions))
            .Build());
 }
		public NuGetPackageLicense (IPackageSearchMetadata metadata)
		{
			PackageIdentity = metadata.Identity;
			PackageId = metadata.Identity.Id;
			PackageTitle = metadata.Title;
			PackageAuthor = metadata.Authors;
			LicenseUrl = metadata.LicenseUrl;
		}
		static bool IsMatch (IPackageSearchMetadata package, string packageId, bool includePrerelease)
		{
			if (package.Identity.Id == packageId) {
				if (package.Identity.Version.IsPrerelease) {
					return includePrerelease;
				}
				return true;
			}
			return false;
		}
		public DetailedPackageMetadata(IPackageSearchMetadata serverData, long? downloadCount)
		{
			Version = serverData.Identity.Version;
			Summary = serverData.Summary;
			Description = serverData.Description;
			Authors = serverData.Authors;
			Owners = serverData.Owners;
			IconUrl = serverData.IconUrl;
			LicenseUrl = serverData.LicenseUrl;
			ProjectUrl = serverData.ProjectUrl;
			ReportAbuseUrl = serverData.ReportAbuseUrl;
			Tags = serverData.Tags;
			DownloadCount = downloadCount;
			Published = serverData.Published;
			DependencySets = serverData.DependencySets?
				.Select(e => new PackageDependencySetMetadata(e))
				?? new PackageDependencySetMetadata[] { };
			HasDependencies = DependencySets.Any(
				dependencySet => dependencySet.Dependencies != null && dependencySet.Dependencies.Count > 0);
		}
		bool IsPackageVersionAllowed (IPackageSearchMetadata package, PackageReference packageReference)
		{
			if (!packageReference.HasAllowedVersions)
				return true;

			return packageReference.AllowedVersions.Satisfies (package.Identity.Version);
		}
Example #35
0
 public PackageData(IPackageSearchMetadata package)
 {
     _package = package;
     Id = package.Identity.Id;
     Version = package.Identity.Version;
 }