Exemplo n.º 1
0
        public async Task GetCachedPackageInfo(string PackageID)
        {
            NuGetFactory factory = new NuGetFactory("NuGet", "https://api.nuget.org/v3/index.json");
            var metaResource = await factory.GetUIMetadata();
            var searchResource = await factory.GetSearch();

            var packageMeta = await searchResource.Search(PackageID, new SearchFilter { IncludePrerelease = true }, 0, 100, CancellationToken.None);
            var packagesFound = packageMeta.Where(x => x.Identity.Id.Equals(PackageID, StringComparison.InvariantCultureIgnoreCase)).ToList();

            Assert.False(packagesFound.Count == 0);
            Assert.True(packagesFound.Count > 0);

            var nugetPackage = packagesFound.First();
            var versions = await (await factory.GetMetadata()).GetVersions(PackageID, CancellationToken.None);

            foreach (var version in versions)
            {
                var versionIdentity = new PackageIdentity(nugetPackage.Identity.Id, version);
                var meta = await metaResource.GetMetadata(versionIdentity, CancellationToken.None);
                foreach (var item in meta.DependencySets)
                {
                    Assert.NotNull(item.TargetFramework.Framework);
                }
            }
        }
        internal async Task <Stream> DownloadPackage(string source, string packageID, string version)
        {
            NuGetFactory factory  = new NuGetFactory(source);
            var          package  = new PackageIdentity(packageID, NuGetVersion.Parse(version));
            var          settings = SharedInfo.Instance.GetNuGetSettings();

            var download = await factory.GetDownload();

            var info = await download.GetDownloadResourceResultAsync(package, settings, CancellationToken.None);

            return(info.PackageStream);
        }
        public async Task <NuGetPackageViewResponse> ViewPackageInfo(string packageID, string source)
        {
            if (string.IsNullOrEmpty(packageID))
            {
                throw new ArgumentNullException("packageID");
            }

            if (string.IsNullOrEmpty(source))
            {
                throw new ArgumentNullException("source");
            }

            NuGetFactory factory = new NuGetFactory(source);
            var          model   = new NuGetPackageViewResponse();

            model.Request.PackageID = packageID;
            model.Request.SourceUrl = factory.SourceUrl;
            model.Request.Source    = source;

            var metaResource = await factory.GetUIMetadata();

            var versions = (await CacheGetAllVersionsOfPackage(factory, packageID)).Reverse().Take(10);

            foreach (var version in versions)
            {
                var packageVersion = new NuGetPackageVersion();

                #region Meta
                var versionIdentity = new PackageIdentity(packageID, version);
                packageVersion = await CacheGetVersionMeta(metaResource, versionIdentity, true);

                #endregion

                #region Version Specific
                packageVersion.IsReleaseVersion = !version.IsPrerelease;
                packageVersion.IsLegacy         = version.IsLegacyVersion;
                packageVersion.IsPreRelease     = version.IsPrerelease;
                packageVersion.Version          = version.ToNormalizedString();
                packageVersion.OrderKey         = packageVersion.LastUpdatedDate.ToString("yyyyMMdd") + packageVersion.Version;
                packageVersion.LastUpdated      = (packageVersion.LastUpdatedDate == DateTime.MinValue)
                    ? string.Empty : packageVersion.LastUpdatedDate.ToString("MMM dd, yyyy");
                #endregion

                model.Versions.Add(packageVersion);
            }

            model.Versions      = model.Versions.OrderByDescending(x => x.OrderKey).ToList();
            model.LatestVersion = model.Versions.FirstOrDefault();

            return(model);
        }
        private async Task DoSearch(NuGetFactory factory, D3DependencyChild current,
                                    int maxLevel,
                                    PackageIdentity package, NuGetFramework fx)
        {
            if (current.Level > maxLevel)
            {
                return;
            }

            // same package may be traversed multiple times, so we can cache it
            // don't cache the tree as depth may change for the same package
            SourcePackageDependencyInfo packageDependencyInfo = await CacheResolvePackage(factory, package, fx);

            if (packageDependencyInfo.Dependencies.Any())
            {
                if (current.children == null)
                {
                    current.children = new List <D3DependencyChild>();
                }

                foreach (var dependency in packageDependencyInfo.Dependencies)
                {
                    // unlikely that the version of a particular dependency will change in 30 minutes
                    // so we can cache it
                    IEnumerable <NuGetVersion> allVersions = await CacheGetAllVersionsOfDependency(factory, dependency);

                    if (allVersions.Any())
                    {
                        var bestMatch = dependency.VersionRange.FindBestMatch(allVersions);

                        var child = new D3DependencyChild
                        {
                            key     = dependency.Id,
                            version = bestMatch.Version.ToString(),
                            parent  = current.key,
                            Level   = current.Level + 1
                        };

                        current.children.Add(child);

                        var nextPackage = new PackageIdentity(child.key, bestMatch);
                        await DoSearch(factory, child, maxLevel, nextPackage, fx);
                    }
                }
            }
        }
        private async Task <SourcePackageDependencyInfo> CacheResolvePackage(NuGetFactory factory, PackageIdentity package, NuGetFramework fx)
        {
            string key = String.Format(@"{0}-{1}", package.ToString(), fx.ToString());

            if (base.IsInCache <SourcePackageDependencyInfo>("CacheResolvePackage", key))
            {
                return(Get <SourcePackageDependencyInfo>("CacheResolvePackage", key));
            }
            else
            {
                var depResource = await factory.GetDependency();

                var output = await depResource.ResolvePackage(package, fx, CancellationToken.None);

                return(Get <SourcePackageDependencyInfo>("CacheResolvePackage", key, () => { return output; }));
            }
        }
        public async Task <NuGetPackageSearchResponse> SearchPackages(string searchTerm, string source)
        {
            if (string.IsNullOrEmpty(searchTerm))
            {
                throw new ArgumentNullException("searchTerm");
            }
            if (string.IsNullOrEmpty(source))
            {
                throw new ArgumentNullException("source");
            }

            NuGetFactory factory = new NuGetFactory(source);
            var          model   = new NuGetPackageSearchResponse
            {
                Request = new NuGetPackageSearchRequest
                {
                    SearchKeyword = searchTerm,
                    Source        = source,
                    SourceUrl     = factory.SourceUrl
                }
            };

            var searchResource = await factory.GetSearch();

            var packageMeta = await searchResource.Search(searchTerm, new SearchFilter { IncludePrerelease = true }, 0, 100, CancellationToken.None);

            var packagesFound = packageMeta.ToList();

            foreach (var searchInfo in packagesFound)
            {
                var result = new NuGetPackageSearchResult();
                result.Title         = searchInfo.Title;
                result.Summary       = searchInfo.Summary;
                result.DownloadCount = searchInfo.LatestPackageMetadata.DownloadCount;
                result.IconUri       = searchInfo.LatestPackageMetadata.IconUrl;
                result.PackageID     = searchInfo.Identity.Id;
                result.LatestVersion = searchInfo.LatestPackageMetadata.Identity.Version.ToNormalizedString();
                result.Authors       = searchInfo.LatestPackageMetadata.Authors;
                result.Tags          = searchInfo.LatestPackageMetadata.Tags;

                model.Results.Add(result);
            }

            return(model);
        }
        public async Task<NuGetPackageViewResponse> ViewPackageInfo(string packageID, string source)
        {
            if (string.IsNullOrEmpty(packageID))
                throw new ArgumentNullException("packageID");

            if (string.IsNullOrEmpty(source))
                throw new ArgumentNullException("source");

            NuGetFactory factory = new NuGetFactory(source);
            var model = new NuGetPackageViewResponse();
            model.Request.PackageID = packageID;
            model.Request.SourceUrl = factory.SourceUrl;
            model.Request.Source = source;

            var metaResource = await factory.GetUIMetadata();
            var versions = (await CacheGetAllVersionsOfPackage(factory, packageID)).Reverse().Take(10);

            foreach (var version in versions)
            {
                var packageVersion = new NuGetPackageVersion();

                #region Meta
                var versionIdentity = new PackageIdentity(packageID, version);
                packageVersion = await CacheGetVersionMeta(metaResource, versionIdentity, true);
                #endregion

                #region Version Specific
                packageVersion.IsReleaseVersion = !version.IsPrerelease;
                packageVersion.IsLegacy = version.IsLegacyVersion;
                packageVersion.IsPreRelease = version.IsPrerelease;
                packageVersion.Version = version.ToNormalizedString();
                packageVersion.OrderKey = packageVersion.LastUpdatedDate.ToString("yyyyMMdd") + packageVersion.Version;
                packageVersion.LastUpdated = (packageVersion.LastUpdatedDate == DateTime.MinValue)
                    ? string.Empty : packageVersion.LastUpdatedDate.ToString("MMM dd, yyyy");
                #endregion

                model.Versions.Add(packageVersion);
            }

            model.Versions = model.Versions.OrderByDescending(x => x.OrderKey).ToList();
            model.LatestVersion = model.Versions.FirstOrDefault();

            return model;
        }
        public async Task <D3DependencyChild> ViewDependencies(string packageID, string packageVersion, string source,
                                                               string framework, string frameworkVersion, string frameworkProfile, int maxLevel = 3)
        {
            if (string.IsNullOrEmpty(packageID))
            {
                throw new ArgumentNullException("packageID");
            }

            if (string.IsNullOrEmpty(packageVersion))
            {
                throw new ArgumentNullException("packageVersion");
            }

            if (string.IsNullOrEmpty(source))
            {
                throw new ArgumentNullException("source");
            }

            if (string.IsNullOrEmpty(framework))
            {
                throw new ArgumentNullException("framework");
            }

            if (string.IsNullOrEmpty(frameworkVersion))
            {
                throw new ArgumentNullException("frameworkVersion");
            }

            var             factory = new NuGetFactory(source);
            NuGetFramework  fx      = new NuGetFramework(framework, Version.Parse(frameworkVersion), frameworkProfile);
            PackageIdentity package = new PackageIdentity(packageID, NuGetVersion.Parse(packageVersion));
            var             root    = new D3DependencyChild
            {
                key     = packageID,
                version = packageVersion,
                Level   = 0
            };

            await DoSearch(factory, root, maxLevel, package, fx);

            return(root);
        }
        public async Task<NuGetPackageSearchResponse> SearchPackages(string searchTerm, string source)
        {
            if (string.IsNullOrEmpty(searchTerm))
                throw new ArgumentNullException("searchTerm");
            if (string.IsNullOrEmpty(source))
                throw new ArgumentNullException("source");

            NuGetFactory factory = new NuGetFactory(source);
            var model = new NuGetPackageSearchResponse
            {
                Request = new NuGetPackageSearchRequest
                {
                    SearchKeyword = searchTerm,
                    Source = source,
                    SourceUrl = factory.SourceUrl
                }
            };

            var searchResource = await factory.GetSearch();
            var packageMeta = await searchResource.Search(searchTerm, new SearchFilter { IncludePrerelease = true }, 0, 100, CancellationToken.None);
            var packagesFound = packageMeta.ToList();

            foreach (var searchInfo in packagesFound)
            {
                var result = new NuGetPackageSearchResult();
                result.Title = searchInfo.Title;
                result.Summary = searchInfo.Summary;
                result.DownloadCount = searchInfo.LatestPackageMetadata.DownloadCount;
                result.IconUri = searchInfo.LatestPackageMetadata.IconUrl;
                result.PackageID = searchInfo.Identity.Id;
                result.LatestVersion = searchInfo.LatestPackageMetadata.Identity.Version.ToNormalizedString();
                result.Authors = searchInfo.LatestPackageMetadata.Authors;
                result.Tags = searchInfo.LatestPackageMetadata.Tags;

                model.Results.Add(result);
            }

            return model;
        }
Exemplo n.º 10
0
        private async Task <IEnumerable <NuGetVersion> > CacheGetAllVersionsOfPackage(NuGetFactory factory, string packageID)
        {
            if (base.IsInCache <IEnumerable <NuGetVersion> >("CacheGetAllVersionsOfPackage", packageID))
            {
                return(Get <IEnumerable <NuGetVersion> >("CacheGetAllVersionsOfPackage", packageID));
            }
            else
            {
                var baseMetaResource = await factory.GetMetadata();

                var output = await baseMetaResource.GetVersions(packageID, CancellationToken.None);

                return(Get <IEnumerable <NuGetVersion> >("CacheGetAllVersionsOfPackage", packageID, () => { return output; }));
            }
        }
Exemplo n.º 11
0
        private async Task<SourcePackageDependencyInfo> CacheResolvePackage(NuGetFactory factory, PackageIdentity package, NuGetFramework fx)
        {
            string key = String.Format(@"{0}-{1}", package.ToString(), fx.ToString());
            if (base.IsInCache<SourcePackageDependencyInfo>("CacheResolvePackage", key))
            {
                return Get<SourcePackageDependencyInfo>("CacheResolvePackage", key);
            }
            else
            {
                var depResource = await factory.GetDependency();
                var output = await depResource.ResolvePackage(package, fx, CancellationToken.None);
                return Get<SourcePackageDependencyInfo>("CacheResolvePackage", key, () => { return output; });
            }

        }
Exemplo n.º 12
0
        private async Task DoSearch(NuGetFactory factory, D3DependencyChild current,
                                 int maxLevel,
                                 PackageIdentity package, NuGetFramework fx)
        {
            if (current.Level > maxLevel)
            {
                return;
            }

            // same package may be traversed multiple times, so we can cache it
            // don't cache the tree as depth may change for the same package
            SourcePackageDependencyInfo packageDependencyInfo = await CacheResolvePackage(factory, package, fx);
            if (packageDependencyInfo.Dependencies.Any())
            {
                if (current.children == null)
                {
                    current.children = new List<D3DependencyChild>();
                }

                foreach (var dependency in packageDependencyInfo.Dependencies)
                {
                    // unlikely that the version of a particular dependency will change in 30 minutes
                    // so we can cache it
                    IEnumerable<NuGetVersion> allVersions = await CacheGetAllVersionsOfDependency(factory, dependency);
                    if (allVersions.Any())
                    {
                        var bestMatch = dependency.VersionRange.FindBestMatch(allVersions);

                        var child = new D3DependencyChild
                        {
                            key = dependency.Id,
                            version = bestMatch.Version.ToString(),
                            parent = current.key,
                            Level = current.Level + 1
                        };

                        current.children.Add(child);

                        var nextPackage = new PackageIdentity(child.key, bestMatch);
                        await DoSearch(factory, child, maxLevel, nextPackage, fx);
                    }
                }
            }
        }
Exemplo n.º 13
0
        internal async Task<Stream> DownloadPackage(string source, string packageID, string version)
        {
            NuGetFactory factory = new NuGetFactory(source);
            var package = new PackageIdentity(packageID, NuGetVersion.Parse(version));
            var settings = SharedInfo.Instance.GetNuGetSettings();

            var download = await factory.GetDownload();
            var info = await download.GetDownloadResourceResultAsync(package, settings, CancellationToken.None);

            return info.PackageStream;
        }
Exemplo n.º 14
0
        public async Task<D3DependencyChild> ViewDependencies(string packageID, string packageVersion, string source,
            string framework, string frameworkVersion, string frameworkProfile, int maxLevel = 3)
        {
            if (string.IsNullOrEmpty(packageID))
                throw new ArgumentNullException("packageID");

            if (string.IsNullOrEmpty(packageVersion))
                throw new ArgumentNullException("packageVersion");

            if (string.IsNullOrEmpty(source))
                throw new ArgumentNullException("source");

            if (string.IsNullOrEmpty(framework))
                throw new ArgumentNullException("framework");

            if (string.IsNullOrEmpty(frameworkVersion))
                throw new ArgumentNullException("frameworkVersion");

            var factory = new NuGetFactory(source);
            NuGetFramework fx = new NuGetFramework(framework, Version.Parse(frameworkVersion), frameworkProfile);
            PackageIdentity package = new PackageIdentity(packageID, NuGetVersion.Parse(packageVersion));
            var root = new D3DependencyChild
            {
                key = packageID,
                version = packageVersion,
                Level = 0
            };

            await DoSearch(factory, root, maxLevel, package, fx);

            return root;

        }
Exemplo n.º 15
0
        public async Task<NuGetPackageVersion> ViewPackageVersionInfo(string packageID, string packageVersion,
                string source)
        {
            if (string.IsNullOrEmpty(packageID))
                throw new ArgumentNullException("packageID");

            if (string.IsNullOrEmpty(source))
                throw new ArgumentNullException("source");

            if (string.IsNullOrEmpty(packageVersion))
                throw new ArgumentNullException("packageVersion");

            NuGetFactory factory = new NuGetFactory(source);
            var metaResource = await factory.GetUIMetadata();
            var versionIdentity = new PackageIdentity(packageID, NuGetVersion.Parse(packageVersion));

            return await CacheGetVersionMeta(metaResource, versionIdentity, false);
        }
Exemplo n.º 16
0
 private async Task <IEnumerable <NuGetVersion> > CacheGetAllVersionsOfDependency(NuGetFactory factory,
                                                                                  NuGet.Packaging.Core.PackageDependency dependency)
 {
     return(await CacheGetAllVersionsOfPackage(factory, dependency.Id));
 }
Exemplo n.º 17
0
 private async Task<IEnumerable<NuGetVersion>> CacheGetAllVersionsOfDependency(NuGetFactory factory,
         NuGet.Packaging.Core.PackageDependency dependency)
 {
     return await CacheGetAllVersionsOfPackage(factory, dependency.Id);
 }
Exemplo n.º 18
0
 private async Task<IEnumerable<NuGetVersion>> CacheGetAllVersionsOfPackage(NuGetFactory factory, string packageID)
 {
     if (base.IsInCache<IEnumerable<NuGetVersion>>("CacheGetAllVersionsOfPackage", packageID))
     {
         return Get<IEnumerable<NuGetVersion>>("CacheGetAllVersionsOfPackage", packageID);
     }
     else
     {
         var baseMetaResource = await factory.GetMetadata();
         var output = await baseMetaResource.GetVersions(packageID, CancellationToken.None);
         return Get<IEnumerable<NuGetVersion>>("CacheGetAllVersionsOfPackage", packageID, () => { return output; });
     }
 }
Exemplo n.º 19
0
        public async Task DependencyTest(string keyword, string version, string framework, bool hasDependencies)
        {
            var factory = new NuGetFactory("NuGet", "https://api.nuget.org/v3/index.json");
            var baseMetaResource = await factory.GetMetadata();
            var metaResource = await factory.GetUIMetadata();
            var depResource = await factory.GetDependency();
            var searchResource = await factory.GetSearch();

            var versionNG = new NuGetVersion(version);
            var fx = NuGetFramework.Parse(framework);
            var packageId = new PackageIdentity(keyword, versionNG);

            Assert.NotNull(fx);
            Assert.NotNull(versionNG);

            // Search with keyword
            var filter = new SearchFilter { IncludePrerelease = true };
            var packagesFound = await searchResource.Search(keyword, filter, 0, 10, CancellationToken.None);
            foreach (var package in packagesFound)
            {
                Assert.NotNull(package.Identity.Id);
                Assert.NotNull(package.Identity.Version);
                Debug.WriteLine(package.Identity.ToString());
                Debug.WriteLine(package.Identity.Version.ToNormalizedString());
            }

            // Get metadata for packageId
            var metaResult = await metaResource.GetMetadata(packageId.Id, true, false, CancellationToken.None);
            var versions = await (await factory.GetMetadata()).GetVersions(packageId.Id, CancellationToken.None);

            foreach (var uiPackageMetadata in metaResult)
            {
                foreach (var dset in uiPackageMetadata.DependencySets)
                {
                    Assert.NotNull(dset.TargetFramework.DotNetFrameworkName);
                    foreach (var depends in dset.Packages)
                    {
                        Debug.WriteLine(depends.ToString());
                        Assert.NotNull(depends.ToString());
                    }
                }
            }

            foreach (var versionF in versions)
            {
                Assert.NotNull(versionF.ToNormalizedString());
            }


            // Get dependency for packageId + version + fx
            var packageDependencyInfo = await depResource.ResolvePackage(packageId, fx, CancellationToken.None);
            foreach (var dependency in packageDependencyInfo.Dependencies)
            {
                var allVersions = await baseMetaResource.GetVersions(dependency.Id, CancellationToken.None);
                var bestMatch = dependency.VersionRange.FindBestMatch(allVersions);

                Assert.NotNull(bestMatch);
            }
        }