public async Task GetDependency(string packageId, string version, string framework, string fxversion, string profile, bool hasDependencies) { NuGetController controller = new NuGetController(); var result = await controller.GetDependencies(packageId, version, "nuget", framework, fxversion, profile, 2) as JsonResult; D3DependencyChild ob = result.Data as D3DependencyChild; if (hasDependencies) { Assert.NotNull(ob.children); } else { Assert.NotNull(ob); } }
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); } } } }
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 virtual async Task <ActionResult> GetDependencies(string PackageID, string PackageVersion, string Source, string Framework, string FrameworkVersion, string FrameworkProfile, int MaxLevel = 3) { Trace.TraceInformation("[NuGet.GetDependencies] Package: " + PackageID + " Source: " + Source + " Version: " + PackageVersion + " FX: " + FrameworkProfile + " MaxLevel:" + MaxLevel); if (string.IsNullOrEmpty(PackageID)) { throw new UserActionException("Package Name is required to view dependencies", "CON.NUGET.GD1", new ArgumentNullException("PackageID")); } if (string.IsNullOrEmpty(PackageVersion)) { throw new UserActionException("Package Version is required to view dependencies", "CON.NUGET.GD2", new ArgumentNullException("PackageVersion")); } if (string.IsNullOrEmpty(Source)) { throw new UserActionException("Nuget Source is required to view dependencies", "CON.NUGET.GD3", new ArgumentNullException("Source")); } if (string.IsNullOrEmpty(Framework)) { throw new UserActionException("Framework is required to analyze", "CON.NUGET.GD4", new ArgumentNullException("Framework")); } if (string.IsNullOrEmpty(FrameworkVersion)) { throw new UserActionException("Framework Version is required to analyze", "CON.NUGET.GD5", new ArgumentNullException("FrameworkVersion")); } if (MaxLevel > 4) { MaxLevel = 4; } D3DependencyChild model = await _cache.ViewDependencies(PackageID, PackageVersion, Source, Framework, FrameworkVersion, FrameworkProfile, MaxLevel); return(Json(model)); }