internal static XDocument GenerateDGML(ISolutionDependencyTree tree) { var pn = tree.GetProjectToNugetRelationships().ToList(); var nn = tree.GetNugetToNugetRelationships().ToList(); var pp = tree.GetProjectToProjectRelationships().ToList(); var graph = new XElement( dgmlns + "DirectedGraph", new XAttribute("GraphDirection", "LeftToRight"), new XElement(dgmlns + "Nodes", tree.Projects.Select(p => CreateNode(p.Name, "Project")), pn.Select(r => CreateNode(r.Target.Package.Id, "Package")), nn.Select(r => CreateNode(r.Target.Package.Id, "Package")) ), new XElement(dgmlns + "Links", pn.Select(r => CreateLink(r.Source.Name, r.Target.Package.Id, "Package Reference")), nn.Select(r => CreateLink(r.Source.Package.Id, r.Target.Package.Id, "Transitive Dependency")), pp.Select(r => CreateLink(r.Source.Name, r.Target.Name, "Project Reference")) ), // No need to declare Categories, auto generated new XElement(dgmlns + "Styles", CreateStyle("Project", "Blue"), CreateStyle("Package", "Purple") )); var doc = new XDocument(graph); doc.Save("mydgml.dgml"); return(doc); }
private static bool IsOfInterest(this INugetDependency package, ISolutionDependencyTree tree) { if (tree.Filter.Contains(package.Package.Id)) { return(true); } return(package.FoundDependencies.Any(x => x.IsOfInterest(tree))); }
internal static List <ProjectProjectRelationship> GetProjectToProjectRelationships( this ISolutionDependencyTree tree) { return(tree.Projects.SelectMany(p => p.ProjectDependencyTree.References.Select(proj => new ProjectProjectRelationship { Source = p, Target = proj })).ToList()); }
internal static string SerializeToJSON(ISolutionDependencyTree tree) { return(JsonConvert.SerializeObject( tree, Formatting.Indented, new JsonSerializerSettings { ContractResolver = new ShouldSerializeContractResolver() } )); }
internal static IEnumerable <NugetRelationship> GetNugetToNugetRelationships(this ISolutionDependencyTree tree) { //get all the child of this package IEnumerable <NugetRelationship> GetChildren(INugetDependency package) { var toReturn = new List <NugetRelationship>(); var subpackages = package.FoundDependencies.ToList().GetPackagesThatMatchFilter(tree).ToList(); foreach (var p in subpackages) { toReturn.Add(new NugetRelationship { Source = package, Target = p }); } foreach (var dependency in subpackages) { GetChildren(dependency); } return(toReturn); } List <NugetRelationship> x = new List <NugetRelationship>(); //get all the packages of this tree foreach (var proj in tree.Projects) { var DependenciesToChase = proj.NugetDependencyTree.Packages.GetPackagesThatMatchFilter(tree); x.AddRange(DependenciesToChase.SelectMany(GetChildren)); } //and finally de-duplicate var groups = x.GroupBy(r => $"{r.Source.Package.Id}{r.Target.Package.Id}"); return(groups.Select(g => g.First())); }
internal static List <ProjectNugetRelationship> GetProjectToNugetRelationships(this ISolutionDependencyTree tree) { var toReturn = new List <ProjectNugetRelationship>(); foreach (var proj in tree.Projects) { var packages = proj.NugetDependencyTree.Packages.GetPackagesThatMatchFilter(tree); var transform = packages.Select(nug => new ProjectNugetRelationship { Source = proj, Target = nug }); toReturn.AddRange(transform); } return(toReturn); }
internal static IEnumerable <INugetDependency> GetPackagesThatMatchFilter(this List <INugetDependency> packages, ISolutionDependencyTree tree) { //either we don't have a filter, it is directly something I'm interested in // or one of its subdependencies is if (tree.Filter == null || tree.Filter.Length == 0) { return(packages); } return(packages.Where(p => p.IsOfInterest(tree))); }
public static void PersistToFile(ISolutionDependencyTree tree) { Log.Debug("Finished all walking, now generating to file"); File.Delete("output.json"); File.WriteAllText("output.json", SerializeToJSON(tree)); }