Skip to content

Commit 4981419

Browse files
committed
Fix stale main view content when entering/exiting filtering view
When entering filtering we would only call FocusLine, which takes care of highlighting the selected line in the commits list, but not of re-rendering the main view. HandleFocus does that. When exiting filtering, the HandleFocus call was missing entirely. The tests needed to be reworked a little bit to make this testable.
1 parent 457cdce commit 4981419

File tree

5 files changed

+47
-23
lines changed

5 files changed

+47
-23
lines changed

pkg/gui/controllers/filtering_menu_action.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ func (self *FilteringMenuAction) setFiltering() error {
124124

125125
self.c.Refresh(types.RefreshOptions{Scope: []types.RefreshableView{types.COMMITS}, Then: func() {
126126
self.c.Contexts().LocalCommits.SetSelection(0)
127-
self.c.Contexts().LocalCommits.FocusLine()
127+
self.c.Contexts().LocalCommits.HandleFocus(types.OnFocusOpts{})
128128
}})
129129

130130
return nil

pkg/gui/controllers/helpers/mode_helper.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,7 @@ func (self *ModeHelper) ClearFiltering() error {
178178
// before we entered filtering
179179
self.c.Contexts().LocalCommits.SelectCommitByHash(self.c.Modes().Filtering.GetSelectedCommitHash())
180180
}
181+
self.c.Contexts().LocalCommits.HandleFocus(types.OnFocusOpts{})
181182
},
182183
})
183184
return nil

pkg/integration/tests/filter_by_path/keep_same_commit_selected_on_exit.go

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ var KeepSameCommitSelectedOnExit = NewIntegrationTest(NewIntegrationTestArgs{
1919
Focus().
2020
Lines(
2121
Contains(`none of the two`).IsSelected(),
22-
Contains(`only filterFile`),
23-
Contains(`only otherFile`),
2422
Contains(`both files`),
23+
Contains(`only otherFile`),
24+
Contains(`only filterFile`),
2525
).Press(keys.Universal.FilteringMenu).
2626
Tap(func() {
2727
t.ExpectPopup().Menu().
@@ -36,16 +36,33 @@ var KeepSameCommitSelectedOnExit = NewIntegrationTest(NewIntegrationTestArgs{
3636
ConfirmFirstSuggestion()
3737
}).
3838
Lines(
39-
Contains(`only filterFile`).IsSelected(),
40-
Contains(`both files`),
39+
Contains(`both files`).IsSelected(),
40+
Contains(`only filterFile`),
4141
).
42-
SelectNextItem().
42+
Tap(func() {
43+
t.Views().Main().
44+
ContainsLines(
45+
Equals(" both files"),
46+
Equals("---"),
47+
Equals(" filterFile | 2 +-"),
48+
Equals(" 1 file changed, 1 insertion(+), 1 deletion(-)"),
49+
)
50+
}).
4351
PressEscape().
4452
Lines(
4553
Contains(`none of the two`),
46-
Contains(`only filterFile`),
47-
Contains(`only otherFile`),
4854
Contains(`both files`).IsSelected(),
55+
Contains(`only otherFile`),
56+
Contains(`only filterFile`),
57+
)
58+
59+
t.Views().Main().
60+
ContainsLines(
61+
Equals(" both files"),
62+
Equals("---"),
63+
Equals(" filterFile | 2 +-"),
64+
Equals(" otherFile | 2 +-"),
65+
Equals(" 2 files changed, 2 insertions(+), 2 deletions(-)"),
4966
)
5067
},
5168
})

pkg/integration/tests/filter_by_path/select_file.go

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,22 +19,25 @@ var SelectFile = NewIntegrationTest(NewIntegrationTestArgs{
1919
Focus().
2020
Lines(
2121
Contains(`none of the two`).IsSelected(),
22-
Contains(`only filterFile`),
23-
Contains(`only otherFile`),
2422
Contains(`both files`),
23+
Contains(`only otherFile`),
24+
Contains(`only filterFile`),
2525
).
26-
NavigateToLine(Contains(`only filterFile`)).
26+
NavigateToLine(Contains(`both files`)).
2727
PressEnter()
2828

29-
// when you click into the commit itself, you see all files from that commit
3029
t.Views().CommitFiles().
3130
IsFocused().
3231
Lines(
33-
Contains(`filterFile`).IsSelected(),
32+
Equals(`▼ /`).IsSelected(),
33+
Equals(` M filterFile`),
34+
Equals(` M otherFile`),
3435
).
36+
SelectNextItem().
3537
Press(keys.Universal.FilteringMenu)
3638

37-
t.ExpectPopup().Menu().Title(Equals("Filtering")).Select(Contains("Filter by 'filterFile'")).Confirm()
39+
t.ExpectPopup().Menu().Title(Equals("Filtering")).
40+
Select(Contains("Filter by 'filterFile'")).Confirm()
3841

3942
postFilterTest(t)
4043
},

pkg/integration/tests/filter_by_path/shared.go

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,13 @@ import (
66

77
func commonSetup(shell *Shell) {
88
shell.CreateFileAndAdd("filterFile", "original filterFile content")
9+
shell.Commit("only filterFile")
910
shell.CreateFileAndAdd("otherFile", "original otherFile content")
10-
shell.Commit("both files")
11-
12-
shell.UpdateFileAndAdd("otherFile", "new otherFile content")
1311
shell.Commit("only otherFile")
1412

13+
shell.UpdateFileAndAdd("otherFile", "new otherFile content")
1514
shell.UpdateFileAndAdd("filterFile", "new filterFile content")
16-
shell.Commit("only filterFile")
15+
shell.Commit("both files")
1716

1817
shell.EmptyCommit("none of the two")
1918
}
@@ -24,14 +23,18 @@ func postFilterTest(t *TestDriver) {
2423
t.Views().Commits().
2524
IsFocused().
2625
Lines(
27-
Contains(`only filterFile`).IsSelected(),
28-
Contains(`both files`),
29-
).
30-
SelectNextItem()
26+
Contains(`both files`).IsSelected(),
27+
Contains(`only filterFile`),
28+
)
3129

3230
// we only show the filtered file's changes in the main view
3331
t.Views().Main().
34-
Content(Contains("filterFile").DoesNotContain("otherFile"))
32+
ContainsLines(
33+
Equals(" both files"),
34+
Equals("---"),
35+
Equals(" filterFile | 2 +-"),
36+
Equals(" 1 file changed, 1 insertion(+), 1 deletion(-)"),
37+
)
3538

3639
t.Views().Commits().
3740
PressEnter()

0 commit comments

Comments
 (0)