refactor: query branch head after operation finished to avoid branch head mismatch

Signed-off-by: leo <longshuang@msn.cn>
This commit is contained in:
leo 2025-05-23 09:40:15 +08:00
parent 9fb8af51ff
commit c112549b69
No known key found for this signature in database
5 changed files with 25 additions and 17 deletions

View file

@ -80,9 +80,16 @@ namespace SourceGit.ViewModels
log.Complete();
var upstream = _repo.CurrentBranch?.Upstream;
var upstreamHead = string.Empty;
if (!string.IsNullOrEmpty(upstream))
upstreamHead = new Commands.QueryRevisionByRefName(_repo.FullPath, upstream.Substring(13)).Result();
CallUIThread(() =>
{
_repo.NavigateToBranchDelayed(_repo.CurrentBranch?.Upstream);
if (!string.IsNullOrEmpty(upstreamHead))
_repo.NavigateToCommitDelayed(upstreamHead);
_repo.MarkFetched();
_repo.SetWatcherEnabled(true);
});

View file

@ -33,11 +33,14 @@ namespace SourceGit.ViewModels
{
new Commands.Fetch(_repo.FullPath, Local, Upstream).Use(log).Exec();
log.Complete();
var changedLocalBranchHead = new Commands.QueryRevisionByRefName(_repo.FullPath, Local.Name).Result();
CallUIThread(() =>
{
_repo.NavigateToBranchDelayed(Upstream.FullName);
_repo.NavigateToCommitDelayed(changedLocalBranchHead);
_repo.SetWatcherEnabled(true);
});
return true;
});
}

View file

@ -64,9 +64,10 @@ namespace SourceGit.ViewModels
new Commands.Merge(_repo.FullPath, _sourceName, Mode.Arg).Use(log).Exec();
log.Complete();
var head = new Commands.QueryRevisionByRefName(_repo.FullPath, "HEAD").Result();
CallUIThread(() =>
{
_repo.NavigateToBranchDelayed(_repo.CurrentBranch?.FullName);
_repo.NavigateToCommitDelayed(head);
_repo.SetWatcherEnabled(true);
});
return true;

View file

@ -164,9 +164,10 @@ namespace SourceGit.ViewModels
log.Complete();
var head = new Commands.QueryRevisionByRefName(_repo.FullPath, "HEAD").Result();
CallUIThread(() =>
{
_repo.NavigateToBranchDelayed(_repo.CurrentBranch?.FullName);
_repo.NavigateToCommitDelayed(head);
_repo.SetWatcherEnabled(true);
});

View file

@ -922,17 +922,17 @@ namespace SourceGit.ViewModels
}
}
public void NavigateToCommitDelayed(string sha)
{
_navigateToCommitDelayed = sha;
}
public void NavigateToCurrentHead()
{
if (_currentBranch != null)
NavigateToCommit(_currentBranch.Head);
}
public void NavigateToBranchDelayed(string branch)
{
_navigateToBranchDelayed = branch;
}
public void ClearHistoriesFilter()
{
_settings.HistoriesFilters.Clear();
@ -1189,15 +1189,11 @@ namespace SourceGit.ViewModels
BisectState = _histories.UpdateBisectInfo();
if (!string.IsNullOrEmpty(_navigateToBranchDelayed))
{
var branch = _branches.Find(x => x.FullName == _navigateToBranchDelayed);
if (branch != null)
NavigateToCommit(branch.Head);
}
if (!string.IsNullOrEmpty(_navigateToCommitDelayed))
NavigateToCommit(_navigateToCommitDelayed);
}
_navigateToBranchDelayed = string.Empty;
_navigateToCommitDelayed = string.Empty;
});
}
@ -2937,6 +2933,6 @@ namespace SourceGit.ViewModels
private Models.BisectState _bisectState = Models.BisectState.None;
private bool _isBisectCommandRunning = false;
private string _navigateToBranchDelayed = string.Empty;
private string _navigateToCommitDelayed = string.Empty;
}
}