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