refactor: Add logging to GitRepository / Factory

pull/151/head
Robert Dailey 2 years ago
parent 46067dffb0
commit d83edd9e2b

@ -34,7 +34,7 @@ public sealed class GitRepository : IGitRepository
.WithWorkingDirectory(_paths.RepoDirectory.FullName) .WithWorkingDirectory(_paths.RepoDirectory.FullName)
.ExecuteAsync(); .ExecuteAsync();
_log.Debug("{Output}", output.ToString()); _log.Debug("Command Output: {Output}", output.ToString().Trim());
if (result.ExitCode != 0) if (result.ExitCode != 0)
{ {

@ -1,6 +1,8 @@
using System.IO.Abstractions; using System.IO.Abstractions;
using System.Text;
using CliWrap; using CliWrap;
using Common; using Common;
using Serilog;
namespace TrashLib.Repo.VersionControl; namespace TrashLib.Repo.VersionControl;
@ -9,44 +11,60 @@ public class GitRepositoryFactory : IGitRepositoryFactory
private readonly IFileUtilities _fileUtils; private readonly IFileUtilities _fileUtils;
private readonly Func<string, IGitRepository> _repoFactory; private readonly Func<string, IGitRepository> _repoFactory;
private readonly IGitPath _gitPath; private readonly IGitPath _gitPath;
private readonly ILogger _log;
public GitRepositoryFactory( public GitRepositoryFactory(
IFileUtilities fileUtils, IFileUtilities fileUtils,
Func<string, IGitRepository> repoFactory, Func<string, IGitRepository> repoFactory,
IGitPath gitPath) IGitPath gitPath,
ILogger log)
{ {
_fileUtils = fileUtils; _fileUtils = fileUtils;
_repoFactory = repoFactory; _repoFactory = repoFactory;
_gitPath = gitPath; _gitPath = gitPath;
_log = log;
} }
private async Task<bool> IsValid(IDirectoryInfo repoPath) private async Task<(bool Succeeded, string OutputMsg, string ErrorMsg)> IsValid(IDirectoryInfo repoPath)
{ {
var output = new StringBuilder();
var error = new StringBuilder();
var result = await Cli.Wrap(_gitPath.Path) var result = await Cli.Wrap(_gitPath.Path)
.WithArguments("status") .WithArguments("status")
.WithStandardErrorPipe(PipeTarget.ToStringBuilder(error))
.WithStandardOutputPipe(PipeTarget.ToStringBuilder(output))
.WithValidation(CommandResultValidation.None) .WithValidation(CommandResultValidation.None)
.WithWorkingDirectory(repoPath.FullName) .WithWorkingDirectory(repoPath.FullName)
.ExecuteAsync(); .ExecuteAsync();
return result.ExitCode == 0; return (result.ExitCode == 0, output.ToString(), error.ToString());
} }
public async Task<IGitRepository> CreateAndCloneIfNeeded(string repoUrl, string repoPath, string branch) public async Task<IGitRepository> CreateAndCloneIfNeeded(string repoUrl, string repoPath, string branch)
{ {
var repo = _repoFactory(repoPath); var repo = _repoFactory(repoPath);
if (!await IsValid(repo.Path)) if (!repo.Path.Exists)
{ {
await DeleteAndCloneRepo(repo, repoUrl, branch); _log.Information("Cloning trash repository...");
await repo.Clone(repoUrl, branch);
}
else
{
var validResult = await IsValid(repo.Path);
if (!validResult.Succeeded)
{
_log.Information("Git repository is invalid; deleting and cloning again");
_log.Debug("Validity Check Output: {Message}", validResult.OutputMsg.Trim());
_log.Debug("Validity Check Error: {Message}", validResult.ErrorMsg.Trim());
_fileUtils.DeleteReadOnlyDirectory(repo.Path.FullName);
await repo.Clone(repoUrl, branch);
}
} }
_log.Debug("Remote 'origin' set to {Url}", repoUrl);
await repo.SetRemote("origin", repoUrl); await repo.SetRemote("origin", repoUrl);
return repo; return repo;
} }
private async Task DeleteAndCloneRepo(IGitRepository repo, string repoUrl, string branch)
{
_fileUtils.DeleteReadOnlyDirectory(repo.Path.FullName);
await repo.Clone(repoUrl, branch);
}
} }

Loading…
Cancel
Save