Skip to content

Commit 4e06944

Browse files
committed
fix: auto-filter does not work well (#855)
1 parent 1273155 commit 4e06944

File tree

5 files changed

+31
-28
lines changed

5 files changed

+31
-28
lines changed

src/ViewModels/Checkout.cs

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -65,13 +65,7 @@ public override Task<bool> Sure()
6565
{
6666
var b = _repo.Branches.Find(x => x.IsLocal && x.Name == Branch);
6767
if (b != null && _repo.HistoriesFilterMode == Models.FilterMode.Included)
68-
{
69-
_repo.Settings.HistoriesFilters.Clear();
70-
_repo.Settings.UpdateHistoriesFilter(b.FullName, Models.FilterType.LocalBranch, Models.FilterMode.Included);
71-
72-
if (!string.IsNullOrEmpty(b.Upstream))
73-
_repo.Settings.UpdateHistoriesFilter(b.Upstream, Models.FilterType.LocalBranch, Models.FilterMode.Included);
74-
}
68+
_repo.SetBranchFilterMode(b, Models.FilterMode.Included, true, false);
7569

7670
_repo.MarkBranchesDirtyManually();
7771
_repo.SetWatcherEnabled(true);

src/ViewModels/CreateBranch.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -128,11 +128,11 @@ public override Task<bool> Sure()
128128
{
129129
if (succ && CheckoutAfterCreated && _repo.HistoriesFilterMode == Models.FilterMode.Included)
130130
{
131-
_repo.Settings.HistoriesFilters.Clear();
132-
_repo.Settings.UpdateHistoriesFilter($"refs/heads/{_name}", Models.FilterType.LocalBranch, Models.FilterMode.Included);
131+
var fake = new Models.Branch() { IsLocal = true, FullName = $"refs/heads/{_name}" };
132+
if (BasedOn is Models.Branch based && !based.IsLocal)
133+
fake.Upstream = based.FullName;
133134

134-
if (BasedOn is Models.Branch b && !b.IsLocal)
135-
_repo.Settings.UpdateHistoriesFilter(b.FullName, Models.FilterType.LocalBranch, Models.FilterMode.Included);
135+
_repo.SetBranchFilterMode(fake, Models.FilterMode.Included, true, false);
136136
}
137137

138138
_repo.MarkBranchesDirtyManually();

src/ViewModels/Histories.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -768,7 +768,7 @@ private void FillBranchVisibilityMenu(MenuItem submenu, Models.Branch branch)
768768
exclude.Header = App.Text("Repository.FilterCommits.Exclude");
769769
exclude.Click += (_, e) =>
770770
{
771-
_repo.SetBranchFilterMode(branch, Models.FilterMode.Excluded);
771+
_repo.SetBranchFilterMode(branch, Models.FilterMode.Excluded, false, true);
772772
e.Handled = true;
773773
};
774774

@@ -780,7 +780,7 @@ private void FillBranchVisibilityMenu(MenuItem submenu, Models.Branch branch)
780780
include.Header = App.Text("Repository.FilterCommits.Include");
781781
include.Click += (_, e) =>
782782
{
783-
_repo.SetBranchFilterMode(branch, Models.FilterMode.Included);
783+
_repo.SetBranchFilterMode(branch, Models.FilterMode.Included, false, true);
784784
e.Handled = true;
785785
};
786786
visibility.Items.Add(include);
@@ -792,7 +792,7 @@ private void FillBranchVisibilityMenu(MenuItem submenu, Models.Branch branch)
792792
unset.Header = App.Text("Repository.FilterCommits.Default");
793793
unset.Click += (_, e) =>
794794
{
795-
_repo.SetBranchFilterMode(branch, Models.FilterMode.None);
795+
_repo.SetBranchFilterMode(branch, Models.FilterMode.None, false, true);
796796
e.Handled = true;
797797
};
798798
visibility.Items.Add(exclude);

src/ViewModels/Repository.cs

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -770,21 +770,27 @@ public void SetTagFilterMode(Models.Tag tag, Models.FilterMode mode)
770770
{
771771
var changed = _settings.UpdateHistoriesFilter(tag.Name, Models.FilterType.Tag, mode);
772772
if (changed)
773-
RefreshHistoriesFilters();
773+
RefreshHistoriesFilters(true);
774774
}
775775

776-
public void SetBranchFilterMode(Models.Branch branch, Models.FilterMode mode)
776+
public void SetBranchFilterMode(Models.Branch branch, Models.FilterMode mode, bool clearExists, bool refresh)
777777
{
778778
var node = FindBranchNode(branch.IsLocal ? _localBranchTrees : _remoteBranchTrees, branch.FullName);
779779
if (node != null)
780-
SetBranchFilterMode(node, mode);
780+
SetBranchFilterMode(node, mode, clearExists, refresh);
781781
}
782782

783-
public void SetBranchFilterMode(BranchTreeNode node, Models.FilterMode mode)
783+
public void SetBranchFilterMode(BranchTreeNode node, Models.FilterMode mode, bool clearExists, bool refresh)
784784
{
785785
var isLocal = node.Path.StartsWith("refs/heads/", StringComparison.Ordinal);
786786
var tree = isLocal ? _localBranchTrees : _remoteBranchTrees;
787787

788+
if (clearExists)
789+
{
790+
_settings.HistoriesFilters.Clear();
791+
HistoriesFilterMode = Models.FilterMode.None;
792+
}
793+
788794
if (node.Backend is Models.Branch branch)
789795
{
790796
var type = isLocal ? Models.FilterType.LocalBranch : Models.FilterType.RemoteBranch;
@@ -822,7 +828,7 @@ public void SetBranchFilterMode(BranchTreeNode node, Models.FilterMode mode)
822828
cur = parent;
823829
} while (true);
824830

825-
RefreshHistoriesFilters();
831+
RefreshHistoriesFilters(refresh);
826832
}
827833

828834
public void StashAll(bool autoStart)
@@ -2149,18 +2155,21 @@ private BranchTreeNode.Builder BuildBranchTree(List<Models.Branch> branches, Lis
21492155
return visible;
21502156
}
21512157

2152-
private void RefreshHistoriesFilters()
2158+
private void RefreshHistoriesFilters(bool refresh)
21532159
{
2154-
var filters = _settings.CollectHistoriesFilters();
2155-
UpdateBranchTreeFilterMode(LocalBranchTrees, filters);
2156-
UpdateBranchTreeFilterMode(RemoteBranchTrees, filters);
2157-
UpdateTagFilterMode(filters);
2158-
21592160
if (_settings.HistoriesFilters.Count > 0)
21602161
HistoriesFilterMode = _settings.HistoriesFilters[0].Mode;
21612162
else
21622163
HistoriesFilterMode = Models.FilterMode.None;
21632164

2165+
if (!refresh)
2166+
return;
2167+
2168+
var filters = _settings.CollectHistoriesFilters();
2169+
UpdateBranchTreeFilterMode(LocalBranchTrees, filters);
2170+
UpdateBranchTreeFilterMode(RemoteBranchTrees, filters);
2171+
UpdateTagFilterMode(filters);
2172+
21642173
Task.Run(RefreshCommits);
21652174
}
21662175

src/Views/FilterModeSwitchButton.axaml.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ private void OnChangeFilterModeButtonClicked(object sender, RoutedEventArgs e)
120120
unset.Header = App.Text("Repository.FilterCommits.Default");
121121
unset.Click += (_, ev) =>
122122
{
123-
repo.SetBranchFilterMode(node, Models.FilterMode.None);
123+
repo.SetBranchFilterMode(node, Models.FilterMode.None, false, true);
124124
ev.Handled = true;
125125
};
126126

@@ -134,7 +134,7 @@ private void OnChangeFilterModeButtonClicked(object sender, RoutedEventArgs e)
134134
include.IsEnabled = mode != Models.FilterMode.Included;
135135
include.Click += (_, ev) =>
136136
{
137-
repo.SetBranchFilterMode(node, Models.FilterMode.Included);
137+
repo.SetBranchFilterMode(node, Models.FilterMode.Included, false, true);
138138
ev.Handled = true;
139139
};
140140

@@ -144,7 +144,7 @@ private void OnChangeFilterModeButtonClicked(object sender, RoutedEventArgs e)
144144
exclude.IsEnabled = mode != Models.FilterMode.Excluded;
145145
exclude.Click += (_, ev) =>
146146
{
147-
repo.SetBranchFilterMode(node, Models.FilterMode.Excluded);
147+
repo.SetBranchFilterMode(node, Models.FilterMode.Excluded, false, true);
148148
ev.Handled = true;
149149
};
150150

0 commit comments

Comments
 (0)