From c112549b69d74d6583bc4fe7cb1e97a516fc106e Mon Sep 17 00:00:00 2001 From: leo Date: Fri, 23 May 2025 09:40:15 +0800 Subject: [PATCH] refactor: query branch head after operation finished to avoid branch head mismatch Signed-off-by: leo --- src/ViewModels/Fetch.cs | 9 ++++++++- src/ViewModels/FetchInto.cs | 5 ++++- src/ViewModels/Merge.cs | 3 ++- src/ViewModels/Pull.cs | 3 ++- src/ViewModels/Repository.cs | 22 +++++++++------------- 5 files changed, 25 insertions(+), 17 deletions(-) diff --git a/src/ViewModels/Fetch.cs b/src/ViewModels/Fetch.cs index fc92be81..b85b2b53 100644 --- a/src/ViewModels/Fetch.cs +++ b/src/ViewModels/Fetch.cs @@ -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); }); diff --git a/src/ViewModels/FetchInto.cs b/src/ViewModels/FetchInto.cs index eee87979..730c08b6 100644 --- a/src/ViewModels/FetchInto.cs +++ b/src/ViewModels/FetchInto.cs @@ -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; }); } diff --git a/src/ViewModels/Merge.cs b/src/ViewModels/Merge.cs index d3d83836..2e276708 100644 --- a/src/ViewModels/Merge.cs +++ b/src/ViewModels/Merge.cs @@ -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; diff --git a/src/ViewModels/Pull.cs b/src/ViewModels/Pull.cs index 1756ea06..1b53949b 100644 --- a/src/ViewModels/Pull.cs +++ b/src/ViewModels/Pull.cs @@ -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); }); diff --git a/src/ViewModels/Repository.cs b/src/ViewModels/Repository.cs index 14162eba..b02cf36a 100644 --- a/src/ViewModels/Repository.cs +++ b/src/ViewModels/Repository.cs @@ -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; } }