private async Task GitFileEventUpdate()
{
using (await _gitStatusMutex.LockAsync())
{
Debug.WriteLine("Git File Event Update");
bool supressBranchEvent = false;
var files = new Dictionary<string, GitFile>();
Repository repository = null;
try
{
//repository = _statusRepository;
repository = GetRepository();
files = GetCurrentChangedFiles();
//logic getting complicated time to break it out
if (_savedState.Operation != repository.Info.CurrentOperation)
{
_savedState.Operation = repository.Info.CurrentOperation;
_savedState.Sha = null;
_savedState.BranchName = null;
}
if (string.IsNullOrWhiteSpace(_savedState.Sha) ||
!string.Equals(_savedState.Sha, repository.Head.Tip.Sha))
{
_savedState.Sha = repository.Head.Tip.Sha;
FireCommitShaChangedEvent(_savedState.Sha);
}
if (string.IsNullOrWhiteSpace(_savedState.BranchName) ||
!string.Equals(_savedState.BranchName, repository.Head.FriendlyName))
{
var newBranchName = string.IsNullOrWhiteSpace(repository.Head.FriendlyName)
? "master"
: repository.Head.FriendlyName;
if (string.Equals(_savedState.BranchName, newBranchName))
{
supressBranchEvent = true;
}
else
{
_savedState.BranchName = newBranchName;
_branchDisplayName = null;
}
if (!supressBranchEvent)
{
FireBranchChangedEvent(_savedState.BranchName);
}
}
}
catch (Exception ex)
{
Debug.WriteLine("Error In GetCurrentChangedFiles: " + ex.Message);
Thread.Sleep(2000);
}
finally
{
repository?.Dispose();
}
_changedFiles = files;
FireFileStatusUpdateEvent(files.Values.ToList());
}
}