1
0
mirror of https://github.com/jesseduffield/lazygit.git synced 2025-04-11 11:42:12 +02:00

Implement state filtering for commit files

This commit is contained in:
Liberatys 2021-06-20 16:55:50 +02:00 committed by Jesse Duffield
parent bdea3b7dcf
commit 2dc6f5f079
7 changed files with 87 additions and 2 deletions

View File

@ -189,6 +189,7 @@ type KeybindingFilesConfig struct {
Fetch string `yaml:"fetch"` Fetch string `yaml:"fetch"`
ToggleTreeView string `yaml:"toggleTreeView"` ToggleTreeView string `yaml:"toggleTreeView"`
OpenMergeTool string `yaml:"openMergeTool"` OpenMergeTool string `yaml:"openMergeTool"`
OpenStatusFilter string `yaml:"openStatusFilter"`
} }
type KeybindingBranchesConfig struct { type KeybindingBranchesConfig struct {
@ -438,6 +439,7 @@ func GetDefaultConfig() *UserConfig {
Fetch: "f", Fetch: "f",
ToggleTreeView: "`", ToggleTreeView: "`",
OpenMergeTool: "M", OpenMergeTool: "M",
OpenStatusFilter: "<c-b>",
}, },
Branches: KeybindingBranchesConfig{ Branches: KeybindingBranchesConfig{
CopyPullRequestURL: "<c-y>", CopyPullRequestURL: "<c-y>",

View File

@ -473,6 +473,39 @@ func (gui *Gui) handleCommitEditorPress() error {
) )
} }
func (gui *Gui) handleStatusFilterPressed() error {
menuItems := []*menuItem{}
menuItems = append(menuItems, &menuItem{
displayString: "Show only staged files",
onPress: func() error {
return gui.setStatusFiltering(filetree.DisplayStaged)
},
})
menuItems = append(menuItems, &menuItem{
displayString: "Show only unstaged files",
onPress: func() error {
return gui.setStatusFiltering(filetree.DisplayUnstaged)
},
})
menuItems = append(menuItems, &menuItem{
displayString: "Reset Filter",
onPress: func() error {
return gui.setStatusFiltering(filetree.DisplayAll)
},
})
return gui.createMenu(gui.Tr.FilteringMenuTitle, menuItems, createMenuOptions{showCancel: false})
}
func (gui *Gui) setStatusFiltering(filter filetree.FileManagerDisplayFilter) error {
state := gui.State
state.FileManager.SetDisplayFilter(filter)
return gui.handleRefreshFiles()
}
func (gui *Gui) editFile(filename string) error { func (gui *Gui) editFile(filename string) error {
return gui.editFileAtLine(filename, 1) return gui.editFileAtLine(filename, 1)
} }

View File

@ -8,11 +8,20 @@ import (
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
) )
type FileManagerDisplayFilter int
const (
DisplayAll FileManagerDisplayFilter = iota
DisplayStaged
DisplayUnstaged
)
type FileManager struct { type FileManager struct {
files []*models.File files []*models.File
tree *FileNode tree *FileNode
showTree bool showTree bool
log *logrus.Entry log *logrus.Entry
filter FileManagerDisplayFilter
collapsedPaths CollapsedPaths collapsedPaths CollapsedPaths
sync.RWMutex sync.RWMutex
} }
@ -22,6 +31,7 @@ func NewFileManager(files []*models.File, log *logrus.Entry, showTree bool) *Fil
files: files, files: files,
log: log, log: log,
showTree: showTree, showTree: showTree,
filter: DisplayAll,
collapsedPaths: CollapsedPaths{}, collapsedPaths: CollapsedPaths{},
RWMutex: sync.RWMutex{}, RWMutex: sync.RWMutex{},
} }
@ -35,6 +45,35 @@ func (m *FileManager) ExpandToPath(path string) {
m.collapsedPaths.ExpandToPath(path) m.collapsedPaths.ExpandToPath(path)
} }
func (m *FileManager) GetFilesForDisplay() []*models.File {
files := m.files
if m.filter == DisplayAll {
return files
}
result := make([]*models.File, 0)
if m.filter == DisplayStaged {
for _, file := range files {
if file.HasStagedChanges {
result = append(result, file)
}
}
} else {
for _, file := range files {
if !file.HasStagedChanges {
result = append(result, file)
}
}
}
return result
}
func (m *FileManager) SetDisplayFilter(filter FileManagerDisplayFilter) {
m.filter = filter
m.SetTree()
}
func (m *FileManager) ToggleShowTree() { func (m *FileManager) ToggleShowTree() {
m.showTree = !m.showTree m.showTree = !m.showTree
m.SetTree() m.SetTree()
@ -73,10 +112,11 @@ func (m *FileManager) SetFiles(files []*models.File) {
} }
func (m *FileManager) SetTree() { func (m *FileManager) SetTree() {
filesForDisplay := m.GetFilesForDisplay()
if m.showTree { if m.showTree {
m.tree = BuildTreeFromFiles(m.files) m.tree = BuildTreeFromFiles(filesForDisplay)
} else { } else {
m.tree = BuildFlatTreeFromFiles(m.files) m.tree = BuildFlatTreeFromFiles(filesForDisplay)
} }
} }

View File

@ -381,6 +381,12 @@ func (gui *Gui) GetInitialKeybindings() []*Binding {
Handler: gui.handleShowAllBranchLogs, Handler: gui.handleShowAllBranchLogs,
Description: gui.Tr.LcAllBranchesLogGraph, Description: gui.Tr.LcAllBranchesLogGraph,
}, },
{
ViewName: "files",
Key: gui.getKey("<c-b>"),
Handler: gui.handleStatusFilterPressed,
Description: gui.Tr.LcCommitFileFilter,
},
{ {
ViewName: "files", ViewName: "files",
Contexts: []string{string(FILES_CONTEXT_KEY)}, Contexts: []string{string(FILES_CONTEXT_KEY)},

View File

@ -42,6 +42,7 @@ func dutchTranslationSet() TranslationSet {
LcScroll: "scroll", LcScroll: "scroll",
LcAbortMerge: "samenvoegen afbreken", LcAbortMerge: "samenvoegen afbreken",
LcResolveMergeConflicts: "los merge conflicten op", LcResolveMergeConflicts: "los merge conflicten op",
LcCommitFileFilter: "Commit dossiers filteren",
MergeConflictsTitle: "Merge Conflicten", MergeConflictsTitle: "Merge Conflicten",
LcCheckout: "uitchecken", LcCheckout: "uitchecken",
FileHasNoUnstagedChanges: "Het bestand heeft geen unstaged veranderingen om toe te voegen", FileHasNoUnstagedChanges: "Het bestand heeft geen unstaged veranderingen om toe te voegen",

View File

@ -55,6 +55,7 @@ type TranslationSet struct {
LcScroll string LcScroll string
LcAbortMerge string LcAbortMerge string
LcResolveMergeConflicts string LcResolveMergeConflicts string
LcCommitFileFilter string
MergeConflictsTitle string MergeConflictsTitle string
LcCheckout string LcCheckout string
NoChangedFiles string NoChangedFiles string
@ -608,6 +609,7 @@ func englishTranslationSet() TranslationSet {
LcResolveMergeConflicts: "resolve merge conflicts", LcResolveMergeConflicts: "resolve merge conflicts",
MergeConflictsTitle: "Merge Conflicts", MergeConflictsTitle: "Merge Conflicts",
LcCheckout: "checkout", LcCheckout: "checkout",
LcCommitFileFilter: "Filter commit files",
NoChangedFiles: "No changed files", NoChangedFiles: "No changed files",
FileHasNoUnstagedChanges: "File has no unstaged changes to add", FileHasNoUnstagedChanges: "File has no unstaged changes to add",
CannotGitAdd: "Cannot git add --patch untracked files", CannotGitAdd: "Cannot git add --patch untracked files",

View File

@ -37,6 +37,7 @@ func polishTranslationSet() TranslationSet {
LcScroll: "przewiń", LcScroll: "przewiń",
LcAbortMerge: "o scalaniu", LcAbortMerge: "o scalaniu",
LcResolveMergeConflicts: "rozwiąż konflikty scalania", LcResolveMergeConflicts: "rozwiąż konflikty scalania",
LcCommitFileFilter: "Filtrowanie plików commitować",
LcCheckout: "przełącz", LcCheckout: "przełącz",
NoChangedFiles: "Brak zmienionych plików", NoChangedFiles: "Brak zmienionych plików",
FileHasNoUnstagedChanges: "Plik nie zawiera żadnych nieopublikowanych zmian do dodania", FileHasNoUnstagedChanges: "Plik nie zawiera żadnych nieopublikowanych zmian do dodania",