From abe336ec69de942827c01046400263a7118e4403 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=B0smail=20=C3=87A=C4=9EDA=C5=9E?= Date: Wed, 16 Sep 2020 09:50:03 +0300 Subject: [PATCH] ignore ignored directory projects during build --- .../Cli/Build/DefaultChangedProjectFinder.cs | 118 +++++++----------- 1 file changed, 47 insertions(+), 71 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 1012de5c72..f461b7ae71 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 @@ -44,17 +44,40 @@ namespace Volo.Abp.Cli.Build return FindByRepository(buildConfig); } - return FindBySlnFile(buildConfig.GitRepository, buildConfig.SlFilePath); + return FindBySlnFile(buildConfig); } - private List FindAllProjects(GitRepository gitRepository) + private List FindAllProjects(DotNetProjectBuildConfig buildConfig) { var projects = new List(); - AddProjectsOfRepository(gitRepository, projects); + AddProjectsOfRepository(buildConfig.GitRepository, projects); + _dotNetProjectDependencyFiller.Fill(projects); + + var allSortedProjectList = _buildProjectListSorter.SortByDependencies( + projects, + new DotNetProjectInfoEqualityComparer() + ); + + FilterIgnoredDirectories(allSortedProjectList, buildConfig.GitRepository); - return projects; + return allSortedProjectList; + } + + private void FilterIgnoredDirectories(List projects, GitRepository gitRepository) + { + foreach (var ignoredDirectory in gitRepository.IgnoredDirectories) + { + projects = projects.Where(e => + !e.CsProjPath.StartsWith(Path.Combine(gitRepository.RootPath, ignoredDirectory))) + .ToList(); + } + + foreach (var dependingRepository in gitRepository.DependingRepositories) + { + FilterIgnoredDirectories(projects, dependingRepository); + } } private void AddProjectsOfRepository(GitRepository gitRepository, List projects) @@ -83,12 +106,8 @@ namespace Volo.Abp.Cli.Build ); // Create a List which contains all csproj files and their 1-level dependencies - var allProjectList = FindAllProjects(buildConfig.GitRepository); - var allSortedProjectList = _buildProjectListSorter.SortByDependencies( - allProjectList, - new DotNetProjectInfoEqualityComparer() - ); - + var allSortedProjectList = FindAllProjects(buildConfig); + MarkProjectsForBuild( buildConfig.GitRepository, gitRepositoryBuildStatus, @@ -119,18 +138,20 @@ namespace Volo.Abp.Cli.Build ); } - if (repository.DependingRepositories.Any()) + if (!repository.DependingRepositories.Any()) { - foreach (var dependingRepository in repository.DependingRepositories) - { - var dependingRepositoryBuildStatus = repositoryBuildStatus?.GetChild(dependingRepository.Name); - MarkProjectsForBuild( - dependingRepository, - dependingRepositoryBuildStatus, - forceBuild, - allProjectList - ); - } + return; + } + + foreach (var dependingRepository in repository.DependingRepositories) + { + var dependingRepositoryBuildStatus = repositoryBuildStatus?.GetChild(dependingRepository.Name); + MarkProjectsForBuild( + dependingRepository, + dependingRepositoryBuildStatus, + forceBuild, + allProjectList + ); } } @@ -187,12 +208,12 @@ namespace Volo.Abp.Cli.Build } } - private List FindBySlnFile(GitRepository gitRepository, string slnFilePath) + private List FindBySlnFile(DotNetProjectBuildConfig buildConfig) { // Create a List which contains all csproj files and their 1-level dependencies - var allProjectList = FindAllProjects(gitRepository); + var allProjectList = FindAllProjects(buildConfig); - var slFine = new FileInfo(slnFilePath); + var slFine = new FileInfo(buildConfig.SlFilePath); var csProjFiles = slFine.Directory.GetFiles( "*.csproj", SearchOption.AllDirectories @@ -201,7 +222,7 @@ namespace Volo.Abp.Cli.Build foreach (var csProjFile in csProjFiles) { - MarkDependantProjectsForBuild(gitRepository, csProjFile, allProjectList); + MarkDependantProjectsForBuild(buildConfig.GitRepository, csProjFile, allProjectList); } return _buildProjectListSorter.SortByDependencies( @@ -246,58 +267,13 @@ namespace Volo.Abp.Cli.Build { continue; } - + allProjectList.MarkForBuild(dependency.RepositoryName, dependency.CsProjPath); AddProjectDependencies(gitRepository, dependency, allProjectList); } } - // private void AddAllCsProjFiles( - // GitRepository repository, - // List changedFiles, - // GitRepositoryBuildStatus status) - // { - // var allCsProjFiles = Directory.GetFiles( - // repository.RootPath, - // "*.csproj", - // SearchOption.AllDirectories - // ).ToList(); - // - // // Filter ignored directories - // foreach (var ignoredDirectory in repository.IgnoredDirectories) - // { - // allCsProjFiles = allCsProjFiles.Where(e => - // !e.StartsWith(Path.Combine(repository.RootPath, ignoredDirectory))) - // .ToList(); - // } - // - // // Filter already built files. - // var lastCommitId = _gitRepositoryHelper.GetLastCommitId(repository); - // - // foreach (var file in allCsProjFiles) - // { - // if (status == null) - // { - // changedFiles.Add( - // new DotNetProjectInfo(repository.Name, Path.Combine(repository.RootPath, file)) - // ); - // - // continue; - // } - // - // if (status.GetSelfOrChild(repository.Name).SucceedProjects - // .Any(e => e.CsProjPath == file && e.CommitId == lastCommitId)) - // { - // continue; - // } - // - // changedFiles.Add( - // new DotNetProjectInfo(repository.Name, Path.Combine(repository.RootPath, file)) - // ); - // } - // } - private void AddDependingProjectsToList( string repositoryName, string csProjPath,