Browse Source

correctly show building project count

pull/5418/head
İsmail ÇAĞDAŞ 6 years ago
parent
commit
afc4ae1333
  1. 124
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Build/DefaultChangedProjectFinder.cs
  2. 2
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Build/DotNetProjectDependencyFiller.cs
  3. 2
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/BuildCommand.cs

124
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Build/DefaultChangedProjectFinder.cs

@ -12,6 +12,9 @@ namespace Volo.Abp.Cli.Build
{ {
private readonly IRepositoryBuildStatusStore _repositoryBuildStatusStore; private readonly IRepositoryBuildStatusStore _repositoryBuildStatusStore;
private readonly IGitRepositoryHelper _gitRepositoryHelper; private readonly IGitRepositoryHelper _gitRepositoryHelper;
private readonly IDotNetProjectDependencyFiller _dotNetProjectDependencyFiller;
private readonly List<string> _changeDetectionFileExtensions = new List<string> private readonly List<string> _changeDetectionFileExtensions = new List<string>
{ {
".cs", ".cs",
@ -21,10 +24,12 @@ namespace Volo.Abp.Cli.Build
public DefaultChangedProjectFinder( public DefaultChangedProjectFinder(
IRepositoryBuildStatusStore repositoryBuildStatusStore, IRepositoryBuildStatusStore repositoryBuildStatusStore,
IGitRepositoryHelper gitRepositoryHelper) IGitRepositoryHelper gitRepositoryHelper,
IDotNetProjectDependencyFiller dotNetProjectDependencyFiller)
{ {
_repositoryBuildStatusStore = repositoryBuildStatusStore; _repositoryBuildStatusStore = repositoryBuildStatusStore;
_gitRepositoryHelper = gitRepositoryHelper; _gitRepositoryHelper = gitRepositoryHelper;
_dotNetProjectDependencyFiller = dotNetProjectDependencyFiller;
} }
public List<DotNetProjectInfo> Find(DotNetProjectBuildConfig buildConfig) public List<DotNetProjectInfo> Find(DotNetProjectBuildConfig buildConfig)
@ -33,10 +38,39 @@ namespace Volo.Abp.Cli.Build
{ {
return FindByRepository(buildConfig); return FindByRepository(buildConfig);
} }
return FindBySlnFile(buildConfig.GitRepository, buildConfig.SlFilePath); return FindBySlnFile(buildConfig.GitRepository, buildConfig.SlFilePath);
} }
private List<DotNetProjectInfo> FindAllProjects(GitRepository gitRepository)
{
var projects = new List<DotNetProjectInfo>();
AddProjectsOfRepository(gitRepository, projects);
_dotNetProjectDependencyFiller.Fill(projects);
return projects;
}
private void AddProjectsOfRepository(GitRepository gitRepository, List<DotNetProjectInfo> projects)
{
var allCsProjFiles = Directory.GetFiles(
gitRepository.RootPath,
"*.csproj",
SearchOption.AllDirectories
).ToList();
projects.AddRange(
allCsProjFiles.Select(csProjPath => new DotNetProjectInfo(gitRepository.Name, csProjPath))
);
foreach (var dependingRepository in gitRepository.DependingRepositories)
{
AddProjectsOfRepository(dependingRepository, projects);
}
}
private List<DotNetProjectInfo> FindByRepository(DotNetProjectBuildConfig buildConfig) private List<DotNetProjectInfo> FindByRepository(DotNetProjectBuildConfig buildConfig)
{ {
var changedProjectList = new List<DotNetProjectInfo>(); var changedProjectList = new List<DotNetProjectInfo>();
@ -45,11 +79,15 @@ namespace Volo.Abp.Cli.Build
buildConfig.GitRepository buildConfig.GitRepository
); );
// Create a List which contains all csproj files and their 1-level dependencies
var allProjectList = FindAllProjects(buildConfig.GitRepository);
FindChangedFiles( FindChangedFiles(
buildConfig.GitRepository, buildConfig.GitRepository,
gitRepositoryBuildStatus, gitRepositoryBuildStatus,
changedProjectList, changedProjectList,
buildConfig.ForceBuild buildConfig.ForceBuild,
allProjectList
); );
return changedProjectList; return changedProjectList;
@ -67,13 +105,13 @@ namespace Volo.Abp.Cli.Build
foreach (var csProjFile in csProjFiles) foreach (var csProjFile in csProjFiles)
{ {
AddDependingProjectsToList(gitRepository, csProjFile, changedProjectList); AddDependantProjectsToList(gitRepository, csProjFile, changedProjectList);
} }
return changedProjectList; return changedProjectList;
} }
private void AddDependingProjectsToList( private void AddDependantProjectsToList(
GitRepository gitRepository, GitRepository gitRepository,
string csProjFilePath, string csProjFilePath,
List<DotNetProjectInfo> changedProjectList) List<DotNetProjectInfo> changedProjectList)
@ -86,11 +124,12 @@ namespace Volo.Abp.Cli.Build
} }
changedProjectList.Add(project); changedProjectList.Add(project);
AddProjectDependencies(gitRepository, project, changedProjectList); AddProjectDependencies(gitRepository, project, changedProjectList);
} }
private void AddProjectDependencies(GitRepository gitRepository, DotNetProjectInfo project, private void AddProjectDependencies(
GitRepository gitRepository,
DotNetProjectInfo project,
List<DotNetProjectInfo> changedProjectList) List<DotNetProjectInfo> changedProjectList)
{ {
var projectNode = XElement.Load(project.CsProjPath); var projectNode = XElement.Load(project.CsProjPath);
@ -124,7 +163,8 @@ namespace Volo.Abp.Cli.Build
GitRepository repository, GitRepository repository,
GitRepositoryBuildStatus repositoryBuildStatus, GitRepositoryBuildStatus repositoryBuildStatus,
List<DotNetProjectInfo> changedProjectList, List<DotNetProjectInfo> changedProjectList,
bool forceBuild) bool forceBuild,
List<DotNetProjectInfo> allProjectList)
{ {
if (forceBuild || repositoryBuildStatus == null || repositoryBuildStatus.CommitId.IsNullOrEmpty()) if (forceBuild || repositoryBuildStatus == null || repositoryBuildStatus.CommitId.IsNullOrEmpty())
{ {
@ -136,7 +176,8 @@ namespace Volo.Abp.Cli.Build
repository, repository,
changedProjectList, changedProjectList,
repositoryBuildStatus, repositoryBuildStatus,
false false,
allProjectList
); );
} }
@ -149,7 +190,8 @@ namespace Volo.Abp.Cli.Build
dependingRepository, dependingRepository,
dependingRepositoryBuildStatus, dependingRepositoryBuildStatus,
changedProjectList, changedProjectList,
forceBuild forceBuild,
allProjectList
); );
} }
} }
@ -188,7 +230,8 @@ namespace Volo.Abp.Cli.Build
continue; continue;
} }
if (status.GetSelfOrChild(repository.Name).SucceedProjects.Any(e => e.CsProjPath == file && e.CommitId == lastCommitId)) if (status.GetSelfOrChild(repository.Name).SucceedProjects
.Any(e => e.CsProjPath == file && e.CommitId == lastCommitId))
{ {
continue; continue;
} }
@ -198,12 +241,13 @@ namespace Volo.Abp.Cli.Build
); );
} }
} }
private void AddChangedCsProjFiles( private void AddChangedCsProjFiles(
GitRepository repository, GitRepository repository,
List<DotNetProjectInfo> changedFiles, List<DotNetProjectInfo> changedProjectList,
GitRepositoryBuildStatus status, GitRepositoryBuildStatus status,
bool forceBuild) bool forceBuild,
List<DotNetProjectInfo> allProjectList)
{ {
using (var repo = new Repository(string.Concat(repository.RootPath, @"\.git"))) using (var repo = new Repository(string.Concat(repository.RootPath, @"\.git")))
{ {
@ -211,14 +255,16 @@ namespace Volo.Abp.Cli.Build
? null ? null
: repo.Lookup<Commit>(status.CommitId); : repo.Lookup<Commit>(status.CommitId);
var repoDifferences = repo.Diff.Compare<Patch>(firstCommit?.Tree, repo.Head.Tip.Tree); var repoDifferences = repo.Diff.Compare<Patch>(firstCommit?.Tree, repo.Head.Tip.Tree);
var fileExtensionPredicate = PredicateBuilder.New<PatchEntryChanges>(true); var fileExtensionPredicate = PredicateBuilder.New<PatchEntryChanges>(true);
foreach (var changeDetectionFileExtension in _changeDetectionFileExtensions) foreach (var changeDetectionFileExtension in _changeDetectionFileExtensions)
{ {
fileExtensionPredicate = fileExtensionPredicate.And(e => e.Path.EndsWith(changeDetectionFileExtension)); fileExtensionPredicate = fileExtensionPredicate.Or(
e => e.Path.EndsWith(changeDetectionFileExtension)
);
} }
var files = repoDifferences var files = repoDifferences
.Where(fileExtensionPredicate) .Where(fileExtensionPredicate)
.Where(e => e.Status != ChangeKind.Deleted) .Where(e => e.Status != ChangeKind.Deleted)
@ -227,7 +273,7 @@ namespace Volo.Abp.Cli.Build
var affectedCsProjFiles = FindAffectedCsProjFiles(repository.RootPath, files); var affectedCsProjFiles = FindAffectedCsProjFiles(repository.RootPath, files);
var lastCommitId = _gitRepositoryHelper.GetLastCommitId(repository); var lastCommitId = _gitRepositoryHelper.GetLastCommitId(repository);
foreach (var file in affectedCsProjFiles) foreach (var file in affectedCsProjFiles)
{ {
var csProjPath = Path.Combine(repository.RootPath, file); var csProjPath = Path.Combine(repository.RootPath, file);
@ -237,17 +283,17 @@ namespace Volo.Abp.Cli.Build
} }
// Filter ignored directories // Filter ignored directories
foreach (var ignoredDirectory in repository.IgnoredDirectories) var isIgnored = repository.IgnoredDirectories.Any(ignoredDirectory =>
csProjPath.StartsWith(Path.Combine(repository.RootPath, ignoredDirectory)));
if (isIgnored)
{ {
if (csProjPath.StartsWith(Path.Combine(repository.RootPath, ignoredDirectory))) continue;
{
continue;
}
} }
changedFiles.Add( var project = new DotNetProjectInfo(repository.Name, csProjPath);
new DotNetProjectInfo(repository.Name, csProjPath) changedProjectList.Add(project);
);
AddDependingProjectsToList(project, changedProjectList, allProjectList);
} }
if (!repository.DependingRepositories.Any()) if (!repository.DependingRepositories.Any())
@ -261,13 +307,35 @@ namespace Volo.Abp.Cli.Build
FindChangedFiles( FindChangedFiles(
subRepository, subRepository,
subRepositoryBuildStatus, subRepositoryBuildStatus,
changedFiles, changedProjectList,
forceBuild forceBuild,
allProjectList
); );
} }
} }
} }
private void AddDependingProjectsToList(DotNetProjectInfo project, List<DotNetProjectInfo> changedProjectList,
List<DotNetProjectInfo> allProjectList)
{
var dependingProjects = allProjectList.Where(
e => e.Dependencies.Any(d => d.CsProjPath == project.CsProjPath)
).Select(e => new DotNetProjectInfo(e.RepositoryName, e.CsProjPath)) // don't get dependencies
.ToList();
if (!dependingProjects.Any())
{
return;
}
changedProjectList.AddRange(dependingProjects);
foreach (var dependingProject in dependingProjects)
{
AddDependingProjectsToList(dependingProject, changedProjectList, allProjectList);
}
}
private List<string> FindAffectedCsProjFiles(string repositoryPath, List<PatchEntryChanges> files) private List<string> FindAffectedCsProjFiles(string repositoryPath, List<PatchEntryChanges> files)
{ {
var affectedProjectFiles = new List<string>(); var affectedProjectFiles = new List<string>();

2
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Build/DotNetProjectDependencyFiller.cs

@ -9,8 +9,6 @@ namespace Volo.Abp.Cli.Build
{ {
public class DotNetProjectDependencyFiller : IDotNetProjectDependencyFiller, ITransientDependency public class DotNetProjectDependencyFiller : IDotNetProjectDependencyFiller, ITransientDependency
{ {
public ILogger<DotNetProjectDependencyFiller> Logger { get; set; }
public void Fill(List<DotNetProjectInfo> projects) public void Fill(List<DotNetProjectInfo> projects)
{ {
foreach (var project in projects) foreach (var project in projects)

2
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/BuildCommand.cs

@ -58,8 +58,6 @@ namespace Volo.Abp.Cli.Commands
var changedProjectFiles = ChangedProjectFinder.Find(buildConfig); var changedProjectFiles = ChangedProjectFinder.Find(buildConfig);
DotNetProjectDependencyFiller.Fill(changedProjectFiles);
var sortedProjects = BuildProjectListSorter.SortByDependencies( var sortedProjects = BuildProjectListSorter.SortByDependencies(
changedProjectFiles, changedProjectFiles,
new DotNetProjectInfoEqualityComparer() new DotNetProjectInfoEqualityComparer()

Loading…
Cancel
Save