From 55d50c9becef7dc50670e0bfce6d337c0708bc76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=B0smail=20=C3=87A=C4=9EDA=C5=9E?= Date: Thu, 3 Sep 2020 21:38:33 +0300 Subject: [PATCH] don't build already built projects when building an entire repository --- .../Cli/Build/DefaultChangedProjectFinder.cs | 20 +++++++++++++++++-- .../Abp/Cli/Build/GitRepositoryBuildStatus.cs | 10 ++++++++++ .../Volo/Abp/Cli/Commands/BuildCommand.cs | 2 +- 3 files changed, 29 insertions(+), 3 deletions(-) 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,