summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYaroslav Veremenko <yaroslav@veremenko.info>2024-11-01 16:21:09 -0600
committerJesse Duffield <jessedduffield@gmail.com>2024-11-12 16:54:24 +1100
commitfdeaf9cea0cbd71f3ed8dbf9a369f78f02d0a3a6 (patch)
treebc95ea4303ad4a8f90bfc9fcd03c1eeaa4d4643e
parentb0a766cc9529dadde5e5bd51bb1cc5c503213f66 (diff)
Add new filter to only show tracked files in Files panel
This allows to hide all non-tracked files on large repos
-rw-r--r--pkg/gui/controllers/files_controller.go7
-rw-r--r--pkg/gui/filetree/file_tree.go3
-rw-r--r--pkg/gui/filetree/file_tree_test.go13
-rw-r--r--pkg/i18n/english.go2
4 files changed, 25 insertions, 0 deletions
diff --git a/pkg/gui/controllers/files_controller.go b/pkg/gui/controllers/files_controller.go
index 5380c8909..1ea20eeb2 100644
--- a/pkg/gui/controllers/files_controller.go
+++ b/pkg/gui/controllers/files_controller.go
@@ -696,6 +696,13 @@ func (self *FilesController) handleStatusFilterPressed() error {
Key: 'u',
},
{
+ Label: self.c.Tr.FilterTrackedFiles,
+ OnPress: func() error {
+ return self.setStatusFiltering(filetree.DisplayTracked)
+ },
+ Key: 't',
+ },
+ {
Label: self.c.Tr.ResetFilter,
OnPress: func() error {
return self.setStatusFiltering(filetree.DisplayAll)
diff --git a/pkg/gui/filetree/file_tree.go b/pkg/gui/filetree/file_tree.go
index f2108ab28..12780e3ed 100644
--- a/pkg/gui/filetree/file_tree.go
+++ b/pkg/gui/filetree/file_tree.go
@@ -15,6 +15,7 @@ const (
DisplayAll FileTreeDisplayFilter = iota
DisplayStaged
DisplayUnstaged
+ DisplayTracked
// this shows files with merge conflicts
DisplayConflicted
)
@@ -82,6 +83,8 @@ func (self *FileTree) getFilesForDisplay() []*models.File {
return self.FilterFiles(func(file *models.File) bool { return file.HasStagedChanges })
case DisplayUnstaged:
return self.FilterFiles(func(file *models.File) bool { return file.HasUnstagedChanges })
+ case DisplayTracked:
+ return self.FilterFiles(func(file *models.File) bool { return file.Tracked })
case DisplayConflicted:
return self.FilterFiles(func(file *models.File) bool { return file.HasMergeConflicts })
default:
diff --git a/pkg/gui/filetree/file_tree_test.go b/pkg/gui/filetree/file_tree_test.go
index 856d25f9a..a3cdfd966 100644
--- a/pkg/gui/filetree/file_tree_test.go
+++ b/pkg/gui/filetree/file_tree_test.go
@@ -41,6 +41,19 @@ func TestFilterAction(t *testing.T) {
},
},
{
+ name: "filter files that are tracked",
+ filter: DisplayTracked,
+ files: []*models.File{
+ {Name: "dir2/dir2/file4", ShortStatus: "M ", Tracked: true},
+ {Name: "dir2/file5", ShortStatus: "M ", Tracked: false},
+ {Name: "file1", ShortStatus: "M ", Tracked: true},
+ },
+ expected: []*models.File{
+ {Name: "dir2/dir2/file4", ShortStatus: "M ", Tracked: true},
+ {Name: "file1", ShortStatus: "M ", Tracked: true},
+ },
+ },
+ {
name: "filter all files",
filter: DisplayAll,
files: []*models.File{
diff --git a/pkg/i18n/english.go b/pkg/i18n/english.go
index e141a614c..fa28130a9 100644
--- a/pkg/i18n/english.go
+++ b/pkg/i18n/english.go
@@ -87,6 +87,7 @@ type TranslationSet struct {
AllFilesDiffCopiedToast string
FilterStagedFiles string
FilterUnstagedFiles string
+ FilterTrackedFiles string
ResetFilter string
MergeConflictsTitle string
Checkout string
@@ -1075,6 +1076,7 @@ func EnglishTranslationSet() *TranslationSet {
AllFilesDiffCopiedToast: "All files diff copied to clipboard",
FilterStagedFiles: "Show only staged files",
FilterUnstagedFiles: "Show only unstaged files",
+ FilterTrackedFiles: "Show only tracked files",
ResetFilter: "Reset filter",
NoChangedFiles: "No changed files",
SoftReset: "Soft reset",