diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Build/GitRepositoryBuildStatus.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Build/GitRepositoryBuildStatus.cs index 2c7ea6d11e..1a60a04068 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Build/GitRepositoryBuildStatus.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Build/GitRepositoryBuildStatus.cs @@ -53,13 +53,17 @@ namespace Volo.Abp.Cli.Build { foreach (var dependingRepository in DependingRepositories) { - return GetChildInternal(dependingRepository, repositoryName); + var child = GetChildInternal(dependingRepository, repositoryName); + if (child != null) + { + return child; + } } return null; } - public string GetUniqueName(string uniqueName) + public string GetUniqueName(string prefix) { var name = RepositoryName + "_" + BranchName; foreach (var dependingRepository in DependingRepositories) @@ -67,7 +71,7 @@ namespace Volo.Abp.Cli.Build AddToUniqueName(dependingRepository, name); } - return (uniqueName.IsNullOrEmpty() ? "" : uniqueName + "_") + name.ToMd5(); + return (prefix.IsNullOrEmpty() ? "" : prefix + "_") + name.ToMd5(); } public void AddOrUpdateProjectStatus(DotNetProjectBuildStatus status) @@ -116,7 +120,11 @@ namespace Volo.Abp.Cli.Build foreach (var dependingRepository in repositoryBuildStatus.DependingRepositories) { - return GetChildInternal(dependingRepository, repositoryName); + var child = GetChildInternal(dependingRepository, repositoryName); + if (child != null) + { + return child; + } } return null; diff --git a/framework/test/Volo.Abp.Cli.Core.Tests/Volo/Abp/Cli/Build/GitRepositoryBuildStatus_Tests.cs b/framework/test/Volo.Abp.Cli.Core.Tests/Volo/Abp/Cli/Build/GitRepositoryBuildStatus_Tests.cs index d9ce5aaca9..387b30da7c 100644 --- a/framework/test/Volo.Abp.Cli.Core.Tests/Volo/Abp/Cli/Build/GitRepositoryBuildStatus_Tests.cs +++ b/framework/test/Volo.Abp.Cli.Core.Tests/Volo/Abp/Cli/Build/GitRepositoryBuildStatus_Tests.cs @@ -16,7 +16,7 @@ namespace Volo.Abp.Cli.Build _gitRepositoryHelper = Substitute.For(); services.AddTransient(provider => _gitRepositoryHelper); } - + [Fact] public void Add_New_Build_Status_Test() { @@ -48,10 +48,10 @@ namespace Volo.Abp.Cli.Build }; existingBuildStatus.MergeWith(newBuildStatus); - + existingBuildStatus.SucceedProjects.Count.ShouldBe(2); } - + [Fact] public void Update_Existing_Build_Status_Test() { @@ -89,10 +89,12 @@ namespace Volo.Abp.Cli.Build existingBuildStatus.MergeWith(newBuildStatus); existingBuildStatus.SucceedProjects.Count.ShouldBe(2); - existingBuildStatus.GetSelfOrChild("volo").SucceedProjects.First(p => p.CsProjPath == "project1.csproj").CommitId.ShouldBe("2"); - existingBuildStatus.GetSelfOrChild("volo").SucceedProjects.First(p => p.CsProjPath == "project2.csproj").CommitId.ShouldBe("2"); + existingBuildStatus.GetSelfOrChild("volo").SucceedProjects.First(p => p.CsProjPath == "project1.csproj") + .CommitId.ShouldBe("2"); + existingBuildStatus.GetSelfOrChild("volo").SucceedProjects.First(p => p.CsProjPath == "project2.csproj") + .CommitId.ShouldBe("2"); } - + [Fact] public void Add_New_Build_Status_For_Child_Repository_Test() { @@ -100,7 +102,7 @@ namespace Volo.Abp.Cli.Build { DependingRepositories = new List() { - new GitRepositoryBuildStatus("abp","dev") + new GitRepositoryBuildStatus("abp", "dev") { SucceedProjects = new List { @@ -121,7 +123,7 @@ namespace Volo.Abp.Cli.Build { DependingRepositories = new List() { - new GitRepositoryBuildStatus("abp","dev") + new GitRepositoryBuildStatus("abp", "dev") { SucceedProjects = new List { @@ -151,12 +153,12 @@ namespace Volo.Abp.Cli.Build { CommitId = "42" }; - + existingBuildStatus.MergeWith(newBuildStatus); - + existingBuildStatus.CommitId.ShouldBe("42"); } - + [Fact] public void Should_Not_Update_Repository_CommitId_When_New_CommitId_Is_Empty() { @@ -172,9 +174,9 @@ namespace Volo.Abp.Cli.Build { CommitId = "" }; - + existingBuildStatus.MergeWith(newBuildStatus); - + existingBuildStatus.CommitId.ShouldBe("21"); } @@ -195,9 +197,122 @@ namespace Volo.Abp.Cli.Build new GitRepositoryBuildStatus("repo-4", "dev") } }; - + existingBuildStatus.GetChild("repo-3").RepositoryName.ShouldBe("repo-3"); existingBuildStatus.GetChild("repo-4").RepositoryName.ShouldBe("repo-4"); } + + [Fact] + public void GetUniqueName_Test() + { + var existingBuildStatus = new GitRepositoryBuildStatus("repo-1", "dev") + { + DependingRepositories = new List() + { + new GitRepositoryBuildStatus("repo-2", "dev") + { + DependingRepositories = new List() + { + new GitRepositoryBuildStatus("repo-3", "dev") + } + }, + new GitRepositoryBuildStatus("repo-4", "dev") + } + }; + + existingBuildStatus.GetUniqueName("").ShouldBe("B25C935F97D7B3375530A96B392B7644"); + existingBuildStatus.GetUniqueName("production").ShouldBe("production_B25C935F97D7B3375530A96B392B7644"); + } + + [Fact] + public void GetSelfOrChild_Test() + { + var existingBuildStatus = new GitRepositoryBuildStatus("repo-1", "dev") + { + DependingRepositories = new List() + { + new GitRepositoryBuildStatus("repo-2", "dev") + { + DependingRepositories = new List() + { + new GitRepositoryBuildStatus("repo-3", "dev") + } + }, + new GitRepositoryBuildStatus("repo-4", "dev") + } + }; + + existingBuildStatus.GetSelfOrChild("repo-1").RepositoryName.ShouldBe("repo-1"); + existingBuildStatus.GetSelfOrChild("repo-2").RepositoryName.ShouldBe("repo-2"); + existingBuildStatus.GetSelfOrChild("repo-3").RepositoryName.ShouldBe("repo-3"); + existingBuildStatus.GetSelfOrChild("repo-4").RepositoryName.ShouldBe("repo-4"); + } + + [Fact] + public void AddOrUpdateProjectStatus_Test() + { + var existingBuildStatus = new GitRepositoryBuildStatus("repo-1", "dev") + { + DependingRepositories = new List() + { + new GitRepositoryBuildStatus("repo-2", "dev") + { + SucceedProjects = new List + { + new DotNetProjectBuildStatus + { + CsProjPath = "A.csproj", + CommitId = "42" + } + }, + DependingRepositories = new List + { + new GitRepositoryBuildStatus("repo-3", "dev") + { + SucceedProjects = new List + { + new DotNetProjectBuildStatus + { + CsProjPath = "B.csproj", + CommitId = "42" + } + } + } + } + }, + new GitRepositoryBuildStatus("repo-4", "dev") + { + SucceedProjects = new List() + { + 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"); + } } }