From 05c135a89d536b733c23cf9d8db243339819d08b Mon Sep 17 00:00:00 2001 From: leo Date: Thu, 26 Sep 2024 20:37:48 +0800 Subject: [PATCH] feature: auto add checkout target branch to history filters if the filter list is not empty (#518) --- src/ViewModels/Checkout.cs | 11 ++++++++++- src/ViewModels/CreateBranch.cs | 9 +++++++++ src/ViewModels/Repository.cs | 25 +++++++++++++++++++++++++ 3 files changed, 44 insertions(+), 1 deletion(-) diff --git a/src/ViewModels/Checkout.cs b/src/ViewModels/Checkout.cs index 68311b15..5661e2ed 100644 --- a/src/ViewModels/Checkout.cs +++ b/src/ViewModels/Checkout.cs @@ -62,7 +62,16 @@ namespace SourceGit.ViewModels rs = new Commands.Stash(_repo.FullPath).Pop("stash@{0}"); } - CallUIThread(() => _repo.SetWatcherEnabled(true)); + CallUIThread(() => + { + var b = _repo.Branches.Find(x => x.IsLocal && x.Name == Branch); + if (b != null) + _repo.AutoAddBranchFilterPostCheckout(b); + + _repo.MarkBranchesDirtyManually(); + _repo.SetWatcherEnabled(true); + }); + return rs; }); } diff --git a/src/ViewModels/CreateBranch.cs b/src/ViewModels/CreateBranch.cs index e6d2edc1..2c925c03 100644 --- a/src/ViewModels/CreateBranch.cs +++ b/src/ViewModels/CreateBranch.cs @@ -126,6 +126,15 @@ namespace SourceGit.ViewModels CallUIThread(() => { + if (CheckoutAfterCreated) + { + _repo.AutoAddBranchFilterPostCheckout(new Models.Branch() + { + FullName = $"refs/heads/{_name}", + Upstream = BasedOn is Models.Branch { IsLocal: false } remoteBranch ? remoteBranch.FullName : string.Empty, + }); + } + _repo.MarkBranchesDirtyManually(); _repo.SetWatcherEnabled(true); }); diff --git a/src/ViewModels/Repository.cs b/src/ViewModels/Repository.cs index eed1bd3a..ec3e015d 100644 --- a/src/ViewModels/Repository.cs +++ b/src/ViewModels/Repository.cs @@ -659,6 +659,31 @@ namespace SourceGit.ViewModels NavigateToCommit(_currentBranch.Head); } + public void AutoAddBranchFilterPostCheckout(Models.Branch local) + { + if (_settings.Filters.Count == 0 || _settings.Filters.Contains(local.FullName)) + return; + + var hasLeft = false; + foreach (var b in _branches) + { + if (!b.FullName.Equals(local.FullName, StringComparison.Ordinal) && + !b.FullName.Equals(local.Upstream, StringComparison.Ordinal) && + !_settings.Filters.Contains(b.FullName)) + { + hasLeft = true; + break; + } + } + + if (!hasLeft) + _settings.Filters.Clear(); + else if (string.IsNullOrEmpty(local.Upstream) || _settings.Filters.Contains(local.Upstream)) + _settings.Filters.Add(local.FullName); + else + _settings.Filters.AddRange([local.FullName, local.Upstream]); + } + public void UpdateFilters(List filters, bool toggle) { var changed = false;