/// <summary> /// Retrieve the <see cref="RemoteSourceDependencyInfo" /> for a registration. /// </summary> /// <returns>Returns an empty sequence if the package does not exist.</returns> public static async Task <IEnumerable <RemoteSourceDependencyInfo> > GetDependencies( HttpSource httpClient, Uri registrationUri, VersionRange range, ILogger log, CancellationToken token) { var ranges = await RegistrationUtility.LoadRanges(httpClient, registrationUri, range, log, token); var results = new HashSet <RemoteSourceDependencyInfo>(); foreach (var rangeObj in ranges) { if (rangeObj == null) { throw new InvalidDataException(registrationUri.AbsoluteUri); } foreach (JObject packageObj in rangeObj["items"]) { var catalogEntry = (JObject)packageObj["catalogEntry"]; var version = NuGetVersion.Parse(catalogEntry["version"].ToString()); if (range.Satisfies(version)) { results.Add(ProcessPackageVersion(packageObj, version)); } } } return(results); }
/// <summary> /// Returns inlined catalog entry items for each registration blob /// </summary> /// <remarks>The inlined entries are potentially going away soon</remarks> public virtual async Task <IEnumerable <JObject> > GetPackageMetadata( string packageId, VersionRange range, bool includePrerelease, bool includeUnlisted, SourceCacheContext cacheContext, Common.ILogger log, CancellationToken token) { var results = new List <JObject>(); var registrationUri = GetUri(packageId); var ranges = await RegistrationUtility.LoadRanges(_client, registrationUri, packageId, range, cacheContext, log, token); foreach (var rangeObj in ranges) { if (rangeObj == null) { throw new InvalidDataException(registrationUri.AbsoluteUri); } foreach (JObject packageObj in rangeObj["items"]) { var catalogEntry = (JObject)packageObj["catalogEntry"]; var version = NuGetVersion.Parse(catalogEntry["version"].ToString()); var listed = catalogEntry.GetBoolean("listed") ?? true; if (range.Satisfies(version) && (includePrerelease || !version.IsPrerelease) && (includeUnlisted || listed)) { // add in the download url if (packageObj["packageContent"] != null) { catalogEntry["packageContent"] = packageObj["packageContent"]; } results.Add(catalogEntry); } } } return(results); }
/// <summary> /// Process an individual package version entry /// </summary> /// <param name="packageObj"></param> /// <param name="version"></param> /// <returns>Returns the RemoteSourceDependencyInfo object corresponding to this package version</returns> private static RemoteSourceDependencyInfo ProcessPackageVersion(JObject packageObj, NuGetVersion version) { var catalogEntry = (JObject)packageObj["catalogEntry"]; var listed = catalogEntry.GetBoolean("listed") ?? true; var id = catalogEntry.Value <string>("id"); var identity = new PackageIdentity(id, version); var dependencyGroups = new List <PackageDependencyGroup>(); var dependencyGroupsArray = (JArray)catalogEntry["dependencyGroups"]; if (dependencyGroupsArray != null) { foreach (JObject dependencyGroupObj in dependencyGroupsArray) { var currentFramework = GetFramework(dependencyGroupObj); var groupDependencies = new List <PackageDependency>(); JToken dependenciesObj; // Packages with no dependencies have 'dependencyGroups' but no 'dependencies' if (dependencyGroupObj.TryGetValue("dependencies", out dependenciesObj)) { foreach (JObject dependencyObj in dependenciesObj) { var dependencyId = dependencyObj.Value <string>("id"); var dependencyRange = RegistrationUtility.CreateVersionRange(dependencyObj.Value <string>("range")); groupDependencies.Add(new PackageDependency(dependencyId, dependencyRange)); } } dependencyGroups.Add(new PackageDependencyGroup(currentFramework, groupDependencies)); } } var contentUri = packageObj.Value <string>("packageContent"); return(new RemoteSourceDependencyInfo(identity, listed, dependencyGroups, contentUri)); }