示例#1
0
 private static void AddToNeo4j(GraphClient graphClient, ProjectGraphItem projectGraphItem)
 {
     graphClient.Cypher
     .Merge($"(project:{Labels.Project} {{ id: {{id}} }})")
     .OnCreate().Set("project = {project}")
     .WithParams(new
     {
         Id      = projectGraphItem.Id,
         Project = projectGraphItem
     })
     .ExecuteWithoutResults();
 }
示例#2
0
        static void Main(string[] args)
        {
            // TODO: Validate inputs
            var basePath      = args[0];
            var neo4jUri      = args[1];
            var neo4jUsername = args[2];
            var neo4jPassword = args[3];

            using (var graphClient = new GraphClient(new Uri(neo4jUri), neo4jUsername, neo4jPassword))
            {
                graphClient.JsonContractResolver = new CamelCasePropertyNamesContractResolver();
                graphClient.Connect();

                ConfigureAsync(graphClient).Wait();

                foreach (var filePath in Directory.GetFiles(basePath, "packages.config", SearchOption.AllDirectories))
                {
                    var projectName    = Path.GetFileName(Path.GetDirectoryName(filePath));
                    var repositoryName = GetRepositoryName(Path.GetDirectoryName(filePath));

                    WriteSeperator();
                    System.Console.WriteLine($"{projectName} ({repositoryName})");
                    WriteSeperator();

                    var projectGraphItem = new ProjectGraphItem
                    {
                        Name           = projectName,
                        RepositoryName = repositoryName
                    };

                    AddToNeo4j(graphClient, projectGraphItem);

                    var packagesFile = new PackageReferenceFile(filePath);
                    foreach (var reference in packagesFile.GetPackageReferences())
                    {
                        AddToNeo4j(graphClient, reference);

                        if (reference.TargetFramework != null)
                        {
                            System.Console.WriteLine($"{reference.Id}: {reference.Version.ToFullString()} ({reference.TargetFramework.Identifier} [{reference.TargetFramework.FullName}])");
                        }
                        else
                        {
                            System.Console.WriteLine($"{reference.Id}: {reference.Version.ToFullString()}");
                        }

                        graphClient.Cypher
                        .Match($"(package:{Labels.Package}),(project:{Labels.Project})")
                        .Where((ProjectGraphItem project) => project.Id == projectGraphItem.Id)
                        .AndWhere((PackageGraphItem package) => package.Id == reference.Id)
                        .Merge($"(project)-[:{Relationships.DependsOn}{{ version: {{ version }}, targetFramework: {{ targetFramework }} }}]->(package)")
                        .WithParams(new
                        {
                            Version         = reference.Version.ToFullString(),
                            TargetFramework = reference.TargetFramework?.Identifier ?? ""
                        })
                        .ExecuteWithoutResults();
                    }

                    System.Console.WriteLine(Environment.NewLine);
                }
            }
        }