mirror of https://github.com/abpframework/abp.git
8 changed files with 213 additions and 143 deletions
@ -0,0 +1,84 @@ |
|||||
|
using System.Collections.Generic; |
||||
|
using System.Linq; |
||||
|
using LibGit2Sharp; |
||||
|
using Volo.Abp.DependencyInjection; |
||||
|
|
||||
|
namespace Volo.Abp.Cli.Build |
||||
|
{ |
||||
|
public class DefaultBuildStatusGenerator : IBuildStatusGenerator, ITransientDependency |
||||
|
{ |
||||
|
public GitRepositoryBuildStatus Generate(GitRepository gitRepository, List<DotNetProjectInfo> changedProjects, |
||||
|
List<string> buildSucceededProjects) |
||||
|
{ |
||||
|
using (var repo = new Repository(string.Concat(gitRepository.RootPath, @"\.git"))) |
||||
|
{ |
||||
|
var lastCommitId = repo.Head.Tip.Id.ToString(); |
||||
|
var status = new GitRepositoryBuildStatus( |
||||
|
gitRepository.Name, |
||||
|
repo.Head.FriendlyName |
||||
|
) |
||||
|
{ |
||||
|
CommitId = lastCommitId |
||||
|
}; |
||||
|
|
||||
|
status.SucceedProjects = changedProjects.Where(p => |
||||
|
p.RepositoryName == gitRepository.Name && |
||||
|
buildSucceededProjects.Contains(p.CsProjPath) |
||||
|
) |
||||
|
.Select(e => new DotNetProjectBuildStatus() |
||||
|
{ |
||||
|
CsProjPath = e.CsProjPath, |
||||
|
CommitId = lastCommitId |
||||
|
}).ToList(); |
||||
|
|
||||
|
foreach (var dependingRepository in gitRepository.DependingRepositories) |
||||
|
{ |
||||
|
GenerateBuildStatusInternal(dependingRepository, changedProjects, buildSucceededProjects, status); |
||||
|
} |
||||
|
|
||||
|
return status; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
private void GenerateBuildStatusInternal( |
||||
|
GitRepository gitRepository, |
||||
|
List<DotNetProjectInfo> changedProjects, |
||||
|
List<string> buildSucceededProjects, |
||||
|
GitRepositoryBuildStatus status) |
||||
|
{ |
||||
|
using (var repo = new Repository(string.Concat(gitRepository.RootPath, @"\.git"))) |
||||
|
{ |
||||
|
var lastCommitId = repo.Head.Tip.Id.ToString(); |
||||
|
var dependingRepositoryStatus = new GitRepositoryBuildStatus( |
||||
|
gitRepository.Name, |
||||
|
repo.Head.FriendlyName |
||||
|
) |
||||
|
{ |
||||
|
CommitId = lastCommitId |
||||
|
}; |
||||
|
|
||||
|
dependingRepositoryStatus.SucceedProjects = changedProjects.Where(p => |
||||
|
p.RepositoryName == gitRepository.Name && |
||||
|
buildSucceededProjects.Contains(p.CsProjPath) |
||||
|
) |
||||
|
.Select(e => new DotNetProjectBuildStatus() |
||||
|
{ |
||||
|
CsProjPath = e.CsProjPath, |
||||
|
CommitId = lastCommitId |
||||
|
}).ToList(); |
||||
|
|
||||
|
foreach (var dependingRepository in gitRepository.DependingRepositories) |
||||
|
{ |
||||
|
GenerateBuildStatusInternal( |
||||
|
dependingRepository, |
||||
|
changedProjects, |
||||
|
buildSucceededProjects, |
||||
|
dependingRepositoryStatus |
||||
|
); |
||||
|
} |
||||
|
|
||||
|
status.DependingRepositories.Add(dependingRepositoryStatus); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,51 @@ |
|||||
|
using System.IO; |
||||
|
using Newtonsoft.Json; |
||||
|
using Volo.Abp.DependencyInjection; |
||||
|
using Volo.Abp.IO; |
||||
|
|
||||
|
namespace Volo.Abp.Cli.Build |
||||
|
{ |
||||
|
public class FileSystemRepositoryBuildStatusStore : IRepositoryBuildStatusStore, ITransientDependency |
||||
|
{ |
||||
|
// TODO: change this ?
|
||||
|
private string BaseBuildStatusStorePath = @"C:\Users\ismai\.abp\build"; |
||||
|
|
||||
|
public GitRepositoryBuildStatus Get(string buildNamePrefix, GitRepository repository) |
||||
|
{ |
||||
|
if (!Directory.Exists(BaseBuildStatusStorePath)) |
||||
|
{ |
||||
|
Directory.CreateDirectory(BaseBuildStatusStorePath); |
||||
|
} |
||||
|
|
||||
|
var buildStatusFile = Path.Combine(BaseBuildStatusStorePath, repository.GetUniqueName(buildNamePrefix)) + ".json"; |
||||
|
|
||||
|
if (!File.Exists(buildStatusFile)) |
||||
|
{ |
||||
|
// TODO: this is wrong
|
||||
|
return new GitRepositoryBuildStatus(repository.Name, repository.BranchName); |
||||
|
} |
||||
|
|
||||
|
var buildStatusText = File.ReadAllText(buildStatusFile); |
||||
|
return JsonConvert.DeserializeObject<GitRepositoryBuildStatus>(buildStatusText); |
||||
|
} |
||||
|
|
||||
|
public void Set(string buildNamePrefix, GitRepositoryBuildStatus status) |
||||
|
{ |
||||
|
if (!Directory.Exists(BaseBuildStatusStorePath)) |
||||
|
{ |
||||
|
Directory.CreateDirectory(BaseBuildStatusStorePath); |
||||
|
} |
||||
|
|
||||
|
var buildStatusFile = Path.Combine(BaseBuildStatusStorePath, status.GetUniqueName(buildNamePrefix)) + ".json"; |
||||
|
if (File.Exists(buildStatusFile)) |
||||
|
{ |
||||
|
FileHelper.DeleteIfExists(buildStatusFile); |
||||
|
} |
||||
|
|
||||
|
using (var file = File.CreateText(buildStatusFile)) |
||||
|
{ |
||||
|
new JsonSerializer {Formatting = Formatting.Indented}.Serialize(file, status); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,13 @@ |
|||||
|
using System.Collections.Generic; |
||||
|
|
||||
|
namespace Volo.Abp.Cli.Build |
||||
|
{ |
||||
|
public interface IBuildStatusGenerator |
||||
|
{ |
||||
|
GitRepositoryBuildStatus Generate( |
||||
|
GitRepository gitRepository, |
||||
|
List<DotNetProjectInfo> changedProjects, |
||||
|
List<string> buildSucceededProjects |
||||
|
); |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue