public void GetChild_Test() { var existingBuildStatus = new GitRepositoryBuildStatus("repo-1", "dev") { DependingRepositories = new List <GitRepositoryBuildStatus>() { new GitRepositoryBuildStatus("repo-2", "dev") { DependingRepositories = new List <GitRepositoryBuildStatus>() { new GitRepositoryBuildStatus("repo-3", "dev") } }, new GitRepositoryBuildStatus("repo-4", "dev") } }; existingBuildStatus.GetChild("repo-3").RepositoryName.ShouldBe("repo-3"); existingBuildStatus.GetChild("repo-4").RepositoryName.ShouldBe("repo-4"); }
public void Add_New_Build_Status_For_Child_Repository_Test() { var existingBuildStatus = new GitRepositoryBuildStatus("volo", "dev") { DependingRepositories = new List <GitRepositoryBuildStatus>() { new GitRepositoryBuildStatus("abp", "dev") { SucceedProjects = new List <DotNetProjectBuildStatus> { new DotNetProjectBuildStatus { CsProjPath = "project1.csproj", CommitId = "1" } } } } }; var newBuildStatus = new GitRepositoryBuildStatus( existingBuildStatus.RepositoryName, existingBuildStatus.BranchName ) { DependingRepositories = new List <GitRepositoryBuildStatus>() { new GitRepositoryBuildStatus("abp", "dev") { SucceedProjects = new List <DotNetProjectBuildStatus> { new DotNetProjectBuildStatus { CsProjPath = "project2.csproj", CommitId = "2" } } } } }; existingBuildStatus.MergeWith(newBuildStatus); existingBuildStatus.GetChild("abp").SucceedProjects.Count.ShouldBe(2); }
public void MergeWith(GitRepositoryBuildStatus newBuildStatus) { if (!newBuildStatus.CommitId.IsNullOrEmpty()) { CommitId = newBuildStatus.CommitId; } foreach (var succeedProject in newBuildStatus.SucceedProjects) { AddOrUpdateProjectStatus(succeedProject); } foreach (var dependingRepositoryBuildStatus in newBuildStatus.DependingRepositories) { var existingDependingRepositoryBuildStatus = GetChild(dependingRepositoryBuildStatus.RepositoryName); var newDependingRepositoryBuildStatus = newBuildStatus.GetChild( dependingRepositoryBuildStatus.RepositoryName ); existingDependingRepositoryBuildStatus.MergeWith(newDependingRepositoryBuildStatus); } }
private void MarkProjectsForBuild( GitRepository repository, GitRepositoryBuildStatus repositoryBuildStatus, bool forceBuild, List <DotNetProjectInfo> allProjectList) { if (forceBuild || repositoryBuildStatus == null || repositoryBuildStatus.CommitId.IsNullOrEmpty()) { // Mark all projects for build allProjectList.ForEach(e => e.ShouldBuild = true); } else { MarkChangedProjectsForBuild( repository, repositoryBuildStatus, allProjectList ); } if (!repository.DependingRepositories.Any()) { return; } foreach (var dependingRepository in repository.DependingRepositories) { var dependingRepositoryBuildStatus = repositoryBuildStatus?.GetChild(dependingRepository.Name); MarkProjectsForBuild( dependingRepository, dependingRepositoryBuildStatus, forceBuild, allProjectList ); } }
public void AddOrUpdateProjectStatus_Test() { var existingBuildStatus = new GitRepositoryBuildStatus("repo-1", "dev") { DependingRepositories = new List <GitRepositoryBuildStatus>() { new GitRepositoryBuildStatus("repo-2", "dev") { SucceedProjects = new List <DotNetProjectBuildStatus> { new DotNetProjectBuildStatus { CsProjPath = "A.csproj", CommitId = "42" } }, DependingRepositories = new List <GitRepositoryBuildStatus> { new GitRepositoryBuildStatus("repo-3", "dev") { SucceedProjects = new List <DotNetProjectBuildStatus> { new DotNetProjectBuildStatus { CsProjPath = "B.csproj", CommitId = "42" } } } } }, new GitRepositoryBuildStatus("repo-4", "dev") { SucceedProjects = new List <DotNetProjectBuildStatus>() { new DotNetProjectBuildStatus { CsProjPath = "C.csproj", CommitId = "42" } } } } }; var repo2 = existingBuildStatus.GetChild("repo-2"); repo2.AddOrUpdateProjectStatus(new DotNetProjectBuildStatus { CommitId = "21", CsProjPath = "A.csproj" }); var repo3 = existingBuildStatus.GetChild("repo-3"); repo3.AddOrUpdateProjectStatus(new DotNetProjectBuildStatus { CommitId = "21", CsProjPath = "X.csproj" }); repo2.SucceedProjects.Count.ShouldBe(1); repo2.SucceedProjects.ShouldContain(e => e.CsProjPath == "A.csproj" && e.CommitId == "21"); repo3.SucceedProjects.Count.ShouldBe(2); repo3.SucceedProjects.ShouldContain(e => e.CsProjPath == "X.csproj" && e.CommitId == "21"); }