private void AddProjectDependencies(
            GitRepository gitRepository,
            DotNetProjectInfo project,
            List <DotNetProjectInfo> allProjectList)
        {
            var projectInfo = allProjectList.FirstOrDefault(e => e.CsProjPath == project.CsProjPath);

            if (projectInfo == null)
            {
                return;
            }

            var dependencies = projectInfo.Dependencies;

            foreach (var dependency in dependencies)
            {
                if (allProjectList.IsMarkedForBuild(dependency.RepositoryName, dependency.CsProjPath))
                {
                    continue;
                }

                allProjectList.MarkForBuild(dependency.RepositoryName, dependency.CsProjPath);

                AddProjectDependencies(gitRepository, dependency, allProjectList);
            }
        }
        private void MarkDependantProjectsForBuild(
            GitRepository gitRepository,
            string csProjFilePath,
            List <DotNetProjectInfo> allProjectList)
        {
            var repositoryName = gitRepository.FindRepositoryOf(csProjFilePath);
            var project        = new DotNetProjectInfo(repositoryName, csProjFilePath, true);

            if (allProjectList.IsMarkedForBuild(repositoryName, csProjFilePath))
            {
                return;
            }

            allProjectList.MarkForBuild(project);
            AddProjectDependencies(gitRepository, project, allProjectList);
        }
Exemplo n.º 3
0
        private void FillProjectDependencies(DotNetProjectInfo project)
        {
            var projectNode    = XElement.Load(project.CsProjPath);
            var referenceNodes = projectNode.Descendants("ItemGroup").Descendants("ProjectReference");

            foreach (var referenceNode in referenceNodes)
            {
                if (referenceNode.Attribute("Include") == null)
                {
                    continue;
                }

                var relativePath         = referenceNode.Attribute("Include").Value;
                var file                 = new FileInfo(project.CsProjPath);
                var referenceProjectInfo = new FileInfo(Path.Combine(file.Directory.FullName, relativePath));

                var referenceProject = new DotNetProjectInfo(project.RepositoryName, referenceProjectInfo.FullName, false);
                project.Dependencies.Add(referenceProject);
            }
        }
Exemplo n.º 4
0
        private void BuildInternal(DotNetProjectInfo project, string arguments, ConcurrentBag <string> builtProjects)
        {
            var buildArguments = arguments.TrimStart('"').TrimEnd('"');

            Console.WriteLine("Executing...: dotnet build " + project.CsProjPath + " " + buildArguments);

            var output = CmdHelper.RunCmdAndGetOutput(
                "dotnet build " + project.CsProjPath + " " + buildArguments,
                out int buildStatus
                );

            if (buildStatus == 0)
            {
                builtProjects.Add(project.CsProjPath);
                WriteOutput(output, ConsoleColor.Green);
            }
            else
            {
                WriteOutput(output, ConsoleColor.Red);
                Console.WriteLine("Build failed for :" + project.CsProjPath);
                throw new Exception("Build failed!");
            }
        }
        private void SortByDependenciesVisit(
            List <DotNetProjectInfo> source,
            DotNetProjectInfo item,
            List <DotNetProjectInfo> sorted,
            Dictionary <DotNetProjectInfo, bool> visited)
        {
            bool inProcess;
            var  alreadyVisited = visited.TryGetValue(item, out inProcess);

            if (alreadyVisited)
            {
                if (inProcess)
                {
                    throw new ArgumentException("Cyclic dependency found! Item: " + item);
                }
            }
            else
            {
                visited[item] = true;

                var dependencies = item.Dependencies;
                if (dependencies != null)
                {
                    foreach (var dependency in dependencies)
                    {
                        var dependencyItem = source.FirstOrDefault(e => e.CsProjPath == dependency.CsProjPath);
                        if (dependencyItem != null)
                        {
                            SortByDependenciesVisit(source, dependencyItem, sorted, visited);
                        }
                    }
                }

                visited[item] = false;
                sorted.Add(item);
            }
        }
Exemplo n.º 6
0
 public static bool IsMarkedForBuild(this List <DotNetProjectInfo> projects, DotNetProjectInfo project)
 {
     return(projects.IsMarkedForBuild(project.RepositoryName, project.CsProjPath));
 }
Exemplo n.º 7
0
 public static void MarkForBuild(this List <DotNetProjectInfo> projects, DotNetProjectInfo project)
 {
     projects.MarkForBuild(project.RepositoryName, project.CsProjPath);
 }