diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Build/DefaultChangedProjectFinder.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Build/DefaultChangedProjectFinder.cs index 1152784e59..996d49a285 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Build/DefaultChangedProjectFinder.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Build/DefaultChangedProjectFinder.cs @@ -118,7 +118,7 @@ namespace Volo.Abp.Cli.Build { if (forceBuild || repositoryBuildStatus == null || repositoryBuildStatus.CommitId.IsNullOrEmpty()) { - AddAllCsProjFiles(repository, changedProjectList); + AddAllCsProjFiles(repository, changedProjectList, repositoryBuildStatus); } else { @@ -145,7 +145,10 @@ namespace Volo.Abp.Cli.Build } } - private void AddAllCsProjFiles(GitRepository repository, List changedFiles) + private void AddAllCsProjFiles( + GitRepository repository, + List changedFiles, + GitRepositoryBuildStatus status) { var allCsProjFiles = Directory.GetFiles( repository.RootPath, @@ -161,8 +164,21 @@ namespace Volo.Abp.Cli.Build .ToList(); } + // Filter already built files. + // TODO: create a class for repository extensions like getting last commitId + var lastCommitId = string.Empty; + using (var repo = new Repository(string.Concat(repository.RootPath, @"\.git"))) + { + lastCommitId = repo.Head.Tip.Id.ToString(); + } + foreach (var file in allCsProjFiles) { + if (status.GetSelfOrChild(repository.Name).SucceedProjects.Any(e=> e.CsProjPath == file)) + { + continue; + } + changedFiles.Add( new DotNetProjectInfo(repository.Name, Path.Combine(repository.RootPath, file)) ); 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 eee96395b1..96e88f935b 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 @@ -38,6 +38,16 @@ namespace Volo.Abp.Cli.Build DependingRepositories = new List(); } + public GitRepositoryBuildStatus GetSelfOrChild(string repositoryName) + { + if (RepositoryName == repositoryName) + { + return this; + } + + return GetChild(repositoryName); + } + public GitRepositoryBuildStatus GetChild(string repositoryName) { foreach (var dependingRepository in DependingRepositories) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/BuildCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/BuildCommand.cs index 8b72775271..4792129742 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/BuildCommand.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/BuildCommand.cs @@ -73,7 +73,7 @@ namespace Volo.Abp.Cli.Commands string.IsNullOrEmpty(maxParallelBuild) ? 1 : Convert.ToInt32(maxParallelBuild), dotnetBuildArguments ?? "" ); - + var buildStatus = BuildStatusGenerator.Generate( buildConfig.GitRepository, changedProjectFiles,