Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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)));
        }
Ejemplo n.º 3
0
 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());
 }
Ejemplo n.º 4
0
 internal static string SerializeToJSON(ISolutionDependencyTree tree)
 {
     return(JsonConvert.SerializeObject(
                tree,
                Formatting.Indented,
                new JsonSerializerSettings {
         ContractResolver = new ShouldSerializeContractResolver()
     }
                ));
 }
Ejemplo n.º 5
0
        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()));
        }
Ejemplo n.º 6
0
        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);
        }
Ejemplo n.º 7
0
        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)));
        }
Ejemplo n.º 8
0
 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));
 }