Beispiel #1
0
        public async Task TestAllBasicScenariosForLocalShare()
        {
            List <PackageIdentity> packages = new List <PackageIdentity>();

            packages.Add(new PackageIdentity("Nuget.core", new NuGetVersion("2.8.5")));
            packages.Add(new PackageIdentity("Nuget.core", new NuGetVersion("2.5.0")));

            //create a local package source by downloading the specific packages from remote feed.
            SetupLocalShare(packages);

            //Create source repo based on the local share.

            string curDir = string.Empty;

#if !DNXCORE50
            curDir = Environment.CurrentDirectory;
#endif

            SourceRepository repo = GetSourceRepository(curDir);

            UIMetadataResource resource = repo.GetResource <UIMetadataResource>();
            Assert.True(resource != null);

            //check if UIPackageMetadata works fine.
            IEnumerable <UIPackageMetadata> packageMetadataList = resource.GetMetadata("Nuget.core", true, true, CancellationToken.None).Result;
            Assert.True(packageMetadataList != null);
            Assert.Equal(3, packageMetadataList.Count());
            Assert.True(packageMetadataList.All(item => item.Tags.Contains("nuget")));
            Assert.True(packageMetadataList.All(item => item.RequireLicenseAcceptance.Equals(false)));
            Assert.True(packageMetadataList.All(item => item.ProjectUrl.ToString().Equals("http://nuget.codeplex.com/")));
            Assert.True(packageMetadataList.Any(item => item.DependencySets.Count() == 1));
            Assert.True(packageMetadataList.First(item => item.DependencySets.Count() == 1).DependencySets.First().Packages.Any(item2 => item2.Id.Equals("Microsoft.Web.Xdt", StringComparison.OrdinalIgnoreCase)));

            //Check if downloadresource works fine.
            DownloadResource downloadResource = repo.GetResource <DownloadResource>();
            Uri downloadUrl = await downloadResource.GetDownloadUrl(new PackageIdentity("Nuget.core", new NuGetVersion("2.5.0")));

            Assert.True(downloadUrl.IsFile);
            Assert.True(File.Exists(downloadUrl.LocalPath)); //path doesnt contain the folder name and also the version is normalized in path for local scenario.

            //Check if metadata resource works fine.
            MetadataResource metadataResource = repo.GetResource <MetadataResource>();
            NuGetVersion     latestVersion    = await metadataResource.GetLatestVersion("Nuget.core", true, false, CancellationToken.None);

            Assert.True(latestVersion.ToNormalizedString().Contains("2.8.5"));
        }
        private async Task <NuGetPackageVersion> CacheGetVersionMeta(UIMetadataResource metaResource, PackageIdentity versionIdentity, bool showDependencies)
        {
            string key = String.Format(@"{0}-{1}", versionIdentity.ToString(), showDependencies);

            if (base.IsInCache <NuGetPackageVersion>("GetVersionMeta", key))
            {
                return(Get <NuGetPackageVersion>("GetVersionMeta", key));
            }
            else
            {
                var meta = await metaResource.GetMetadata(versionIdentity, CancellationToken.None);

                var output = await GetVersionMeta(versionIdentity, metaResource, showDependencies);

                return(Get <NuGetPackageVersion>("GetVersionMeta", key, () => { return output; }));
            }
        }
        private static async Task <NuGetPackageVersion> GetVersionMeta(PackageIdentity versionIdentity,
                                                                       UIMetadataResource metaResource, bool getDependencies)
        {
            var packageVersion = new NuGetPackageVersion();
            var meta           = await metaResource.GetMetadata(versionIdentity, CancellationToken.None);

            packageVersion.PackageID   = meta.Identity.Id;
            packageVersion.Description = meta.Description;

            //Uri
            packageVersion.IconUri        = meta.IconUrl;
            packageVersion.ProjectUri     = meta.ProjectUrl == null ? "#" : meta.ProjectUrl.AbsoluteUri;
            packageVersion.LicenseUri     = meta.LicenseUrl == null ? "#" : meta.LicenseUrl.AbsoluteUri;
            packageVersion.ReportAbuseUri = meta.ReportAbuseUrl.AbsoluteUri;

            //TODO:Currently NuGet API return blank
            packageVersion.Authors = String.Join(",", meta.Authors);
            packageVersion.Owners  = String.Join(",", meta.Owners);

            //Supported Frameworks
            packageVersion.SupportedFrameworks = new List <NuGetFrameworkInfo>();
            if (getDependencies)
            {
                foreach (var item in meta.DependencySets)
                {
                    if (item.TargetFramework.IsUnsupported)
                    {
                        continue;
                    }

                    NuGetFrameworkInfo fxInfo = NuGetFrameworkInfo.CreateFrom(item.TargetFramework);
                    var dependentOn           = item.Packages.Count();
                    if (dependentOn > 0)
                    {
                        fxInfo.DependencyCount = dependentOn;
                    }
                    packageVersion.SupportedFrameworks.Add(fxInfo);
                }
                if (!packageVersion.SupportedFrameworks.Any())
                {
                    packageVersion.SupportedFrameworks.Add(NuGetFrameworkInfo.Any());
                }
            }
            return(packageVersion);
        }
        public async Task LoadPackageMetadaAsync(UIMetadataResource metadataResource, CancellationToken token)
        {
            var downloadCountDict = _searchResultPackage.Versions.ToDictionary(
                v => v.Version,
                v => v.DownloadCount);

            var dict = new Dictionary <NuGetVersion, DetailedPackageMetadata>();

            if (metadataResource != null)
            {
                // load up the full details for each version
                try
                {
                    var metadata = await metadataResource.GetMetadata(Id, true, false, token);

                    foreach (var item in metadata)
                    {
                        if (!dict.ContainsKey(item.Identity.Version))
                        {
                            int downloadCount;
                            if (!downloadCountDict.TryGetValue(item.Identity.Version, out downloadCount))
                            {
                                downloadCount = 0;
                            }
                            dict.Add(item.Identity.Version, new DetailedPackageMetadata(item, downloadCount));
                        }
                    }
                }
                catch (InvalidOperationException)
                {
                    // Ignore failures.
                }
            }

            _metadataDict = dict;

            DetailedPackageMetadata p;

            if (SelectedVersion != null &&
                _metadataDict.TryGetValue(SelectedVersion.Version, out p))
            {
                PackageMetadata = p;
            }
        }
Beispiel #5
0
        public async Task TestVisualStudioUIMetadataResource(string SourceUrl)
        {
            SourceRepository   repo     = GetSourceRepository(SourceUrl);
            UIMetadataResource resource = repo.GetResource <UIMetadataResource>();

            Assert.True(resource != null);
            var result = await resource.GetMetadata("Microsoft.AspNet.Razor", true, true, CancellationToken.None);

            UIPackageMetadata packageMetadata = result.FirstOrDefault(
                p => p.Identity.Version == new NuGetVersion("4.0.0-beta1"));

            Assert.True(packageMetadata.DependencySets.Count() == 1);
            Assert.True(packageMetadata.DependencySets.First().Packages.Count().Equals(12));

            IEnumerable <UIPackageMetadata> packageMetadataList = resource.GetMetadata("Nuget.core", true, true, CancellationToken.None).Result;

            Assert.True(packageMetadataList != null);
            Assert.Equal(47, packageMetadataList.Count());
        }
        public async Task TestAllResourcesForNonExistentPackage(string SourceUrl)
        {
            string           packageId = "nonexistentpackage";
            string           version   = "1.0";
            SourceRepository repo      = GetSourceRepository(SourceUrl);

            DownloadResource downloadResource = await repo.GetResource <DownloadResource>();

            Assert.True(downloadResource != null);
            Uri downloadMetadata = await downloadResource.GetDownloadUrl(new PackageIdentity(packageId, new NuGetVersion(version)));

            Assert.True(downloadMetadata == null);

            MetadataResource metadataResource = await repo.GetResource <MetadataResource>();

            Assert.True(metadataResource != null);
            NuGetVersion latestVersion = await metadataResource.GetLatestVersion(packageId, true, true, CancellationToken.None);

            Assert.True(latestVersion == null);

            UIMetadataResource uiMetadataResource = await repo.GetResource <UIMetadataResource>();

            Assert.True(uiMetadataResource != null);

            var result = await uiMetadataResource.GetMetadata(packageId, true, true, CancellationToken.None);

            Assert.False(result.Any());

            DepedencyInfoResource resource = await repo.GetResource <DepedencyInfoResource>();

            //Check if we are able to obtain a resource
            Assert.True(resource != null);
            List <PackageIdentity> packageIdentities = new List <PackageIdentity>();

            packageIdentities.Add(new PackageIdentity(packageId, new NuGetVersion(version)));
            IEnumerable <PackageDependencyInfo> packages = await resource.ResolvePackages(packageIdentities, NuGet.Frameworks.NuGetFramework.AnyFramework, true, new CancellationToken());

            Assert.True(packages == null || packages.Count() == 0);
        }
        private async Task <SiteExtensionInfo> CheckRemotePackageLatestVersion(SiteExtensionInfo info, UIMetadataResource metadataResource)
        {
            bool isNuGetPackage = false;

            if (!string.IsNullOrEmpty(info.FeedUrl))
            {
                isNuGetPackage = FeedExtensions.IsNuGetRepo(info.FeedUrl);
            }

            UIPackageMetadata localPackage = await metadataResource.GetLatestPackageByIdFromMetaRes(info.Id,
                                                                                                    explicitTag : isNuGetPackage);

            if (localPackage != null)
            {
                SetLocalInfo(info);
                // Assume input package (from remote) is always the latest version.
                info.LocalIsLatestVersion = NuGetVersion.Parse(info.Version).Equals(localPackage.Identity.Version);
            }

            return(info);
        }
        private async Task <SiteExtensionInfo> ConvertRemotePackageToSiteExtensionInfo(UIPackageMetadata package, string feedUrl, UIMetadataResource metadataResource)
        {
            // convert uipackagemetadata structure to siteextensioninfo structure
            var siteExtensionInfo = new SiteExtensionInfo(package);

            siteExtensionInfo.FeedUrl = feedUrl;
            // check existing local site extension version and update the field "LocalIsLatestVersion" in siteextensioninfo
            return(await CheckRemotePackageLatestVersion(siteExtensionInfo, metadataResource));
        }
Beispiel #9
0
        private async Task <SiteExtensionInfo> CheckRemotePackageLatestVersion(SiteExtensionInfo info, UIMetadataResource metadataResource)
        {
            UIPackageMetadata localPackage = await metadataResource.GetLatestPackageByIdFromMetaRes(info.Id);

            if (localPackage != null)
            {
                SetLocalInfo(info);
                // Assume input package (from remote) is always the latest version.
                info.LocalIsLatestVersion = NuGetVersion.Parse(info.Version).Equals(localPackage.Identity.Version);
            }

            return(info);
        }
Beispiel #10
0
        // can be called concurrently if metaDataResource is provided
        internal static async Task <UIPackageMetadata> GetLatestPackageByIdFromMetaRes(this UIMetadataResource metadataResource, string packageId, bool includePrerelease = true, bool includeUnlisted = false)
        {
            UIPackageMetadata latestPackage          = null;
            IEnumerable <UIPackageMetadata> packages = await metadataResource.GetMetadata(packageId, includePrerelease, includeUnlisted, token : CancellationToken.None);

            foreach (var p in packages)
            {
                if (latestPackage == null ||
                    latestPackage.Identity.Version < p.Identity.Version)
                {
                    latestPackage = p;
                }
            }

            return(latestPackage);
        }
Beispiel #11
0
        // can be called concurrently if metaDataResource is provided
        internal static async Task <UIPackageMetadata> GetLatestPackageByIdFromMetaRes(this UIMetadataResource metadataResource, string packageId, bool includePrerelease = true, bool includeUnlisted = false)
        {
            UIPackageMetadata latestPackage          = null;
            IEnumerable <UIPackageMetadata> packages = await metadataResource.GetMetadata(packageId, includePrerelease, includeUnlisted, token : CancellationToken.None);

            foreach (var p in packages)
            {
                if (latestPackage == null ||
                    latestPackage.Identity.Version < p.Identity.Version)
                {
                    latestPackage = p;
                }
            }

            // If we couldn't find any listed version, fall back to looking for unlisted versions, to avoid failing completely.
            // Reasoning is that if all the versions have been unlisted, it should still be possible to install it by
            // explicit id, even without specifying a version
            if (latestPackage == null && !includeUnlisted)
            {
                latestPackage = await GetLatestPackageByIdFromMetaRes(metadataResource, packageId, includePrerelease, includeUnlisted : true);
            }

            return(latestPackage);
        }
Beispiel #12
0
        // can be called concurrently if metaDataResource is provided
        internal static async Task <UIPackageMetadata> GetLatestPackageByIdFromMetaRes(this UIMetadataResource metadataResource, string packageId, bool includePrerelease = true, bool includeUnlisted = false, bool explicitTag = false)
        {
            UIPackageMetadata latestPackage          = null;
            IEnumerable <UIPackageMetadata> packages = await metadataResource.GetMetadata(packageId, includePrerelease, includeUnlisted, token : CancellationToken.None);

            // When using nuget.org, we only look at packages that have our tag.
            if (explicitTag)
            {
                packages = packages.Where(item => item.Tags.IndexOf("azuresiteextension", StringComparison.OrdinalIgnoreCase) >= 0);
            }

            foreach (var p in packages)
            {
                if (latestPackage == null ||
                    latestPackage.Identity.Version < p.Identity.Version)
                {
                    latestPackage = p;
                }
            }

            // If we couldn't find any listed version, fall back to looking for unlisted versions, to avoid failing completely.
            // Reasoning is that if all the versions have been unlisted, it should still be possible to install it by
            // explicit id, even without specifying a version
            if (latestPackage == null && !includeUnlisted)
            {
                latestPackage = await GetLatestPackageByIdFromMetaRes(metadataResource, packageId, includePrerelease, includeUnlisted : true, explicitTag : explicitTag);
            }

            return(latestPackage);
        }
Beispiel #13
0
        protected override void ProcessRecordCore()
        {
            Preprocess();

            UIPackageMetadata package = null;

            try
            {
                UIMetadataResource resource = ActiveSourceRepository.GetResource <UIMetadataResource>();
                Task <IEnumerable <UIPackageMetadata> > task = resource.GetMetadata(Id, IncludePrerelease.IsPresent, false, CancellationToken.None);
                var metadata = task.Result;
                if (!string.IsNullOrEmpty(Version))
                {
                    NuGetVersion nVersion = PowerShellCmdletsUtility.GetNuGetVersionFromString(Version);
                    metadata = metadata.Where(p => p.Identity.Version == nVersion);
                }
                package = metadata.Where(p => string.Equals(p.Identity.Id, Id, StringComparison.OrdinalIgnoreCase))
                          .OrderByDescending(v => v.Identity.Version)
                          .FirstOrDefault();
            }
            catch (Exception)
            {
            }

            if (package != null)
            {
                Uri targetUrl = null;
                if (License.IsPresent)
                {
                    targetUrl = package.LicenseUrl;
                }
                else if (ReportAbuse.IsPresent)
                {
                    targetUrl = package.ReportAbuseUrl;
                }
                else
                {
                    targetUrl = package.ProjectUrl;
                }

                if (targetUrl != null)
                {
                    OpenUrl(targetUrl);

                    if (PassThru.IsPresent)
                    {
                        WriteObject(targetUrl);
                    }
                }
                else
                {
                    WriteError(String.Format(CultureInfo.CurrentCulture, Resources.Cmdlet_UrlMissing, Id + " " + Version));
                }
            }
            else
            {
                // show appropriate error message depending on whether Version parameter is set.
                if (string.IsNullOrEmpty(Version))
                {
                    WriteError(String.Format(CultureInfo.CurrentCulture, Resources.Cmdlet_PackageIdNotFound, Id));
                }
                else
                {
                    WriteError(String.Format(CultureInfo.CurrentCulture, Resources.Cmdlet_PackageIdAndVersionNotFound, Id, Version));
                }
            }
        }