public CDockerComposeFile Build(CMetaRepo metaRepo)
        {
            //todo: switch to Visitor pattern
            var relativePathBuilder = new RelativePathBuilder();
            var dockerComposeFile   = new CDockerComposeFile();

            foreach (var repo in metaRepo.Repos)
            {
                foreach (var solution in repo.RepoSolution)
                {
                    foreach (var project in solution.Project)
                    {
                        if (!project.HasDockerFile)
                        {
                            continue;
                        }

                        //todo: move this into domain model ?
                        var relativePath = relativePathBuilder
                                           .GetRelativePath(metaRepo.CompositeRepo.RepoSolution.First().SolutionPath,
                                                            Path.GetDirectoryName(project.Path)).Replace(@"\", @"/");

                        dockerComposeFile.Service.Add(new CDockerFileService
                        {
                            ServiceName = project.ProjectShortName.ToLower().Replace(".", "_"),
                            Context     = $"./{relativePath}"
                        });
                    }
                }
            }

            return(dockerComposeFile);
        }
        public CMetaRepo BuildSampleMetaRepo()
        {
            var metaRepo = new CMetaRepo()
            {
                MetaRepoName = "BlahAndBlahBlahMega"
            };


            metaRepo.AddRepos(GetBlahRepos());
            metaRepo.AddRepos(GetBlahBlahRepos());
            metaRepo.AddRepos(GetCommonRepos());
            return(metaRepo);
        }
 public void Visit(IVisitor visitor, CMetaRepo metaRepo)
 {
     foreach (var repo in metaRepo.Repos)
     {
         foreach (var solution in repo.RepoSolution)
         {
             foreach (var project in solution.Project)
             {
                 CodeWriter.WriteLine($@"dotnet sln Company.All.Sln add ""{project.Path}""");
             }
         }
     }
 }
        public void Visit(IVisitor visitor, CMetaRepo metaRepo)
        {
            CodeWriter.Clear();
            CodeWriter.WriteLine("call npm install -g meta");
            CodeWriter.WriteLine();

            CodeWriter.WriteLine("call meta init");
            CodeWriter.WriteLine();

            //CodeWriter.WriteLine("setlocal enableDelayedExpansion");
            foreach (var repo in metaRepo.Repos)
            {
                repo.Accept(visitor);
            }
            //CodeWriter.WriteLine("endlocal");
            CodeWriter.WriteLine();
            CodeWriter.WriteLine($"CMD /c meta git fetch --all");
            CodeWriter.WriteLine($"CMD /c meta git checkout --track remotes/origin/{metaRepo.CheckoutFromBranch}");

            CodeWriter.WriteLine($"CMD /c meta git pull");
            CodeWriter.WriteLine($"CMD /c meta git checkout Poc_XXXXXX");
        }
 public void Visit(CMetaRepo metaRepo)
 {
     _metaRepoVisitor.Visit(this, metaRepo);
 }