show only merge conflict files when there are merge conflicts

This commit is contained in:
Jesse Duffield
2022-01-26 19:45:42 +11:00
parent 5a3f81d1f7
commit fa2e7ae1e7
146 changed files with 502 additions and 70 deletions

View File

@@ -1,6 +1,7 @@
package filetree
import (
"fmt"
"sync"
"github.com/jesseduffield/lazygit/pkg/commands/models"
@@ -13,6 +14,8 @@ const (
DisplayAll FileTreeDisplayFilter = iota
DisplayStaged
DisplayUnstaged
// this shows files with merge conflicts
DisplayConflicted
)
type FileTreeViewModel struct {
@@ -49,29 +52,32 @@ func (self *FileTreeViewModel) ExpandToPath(path string) {
func (self *FileTreeViewModel) GetFilesForDisplay() []*models.File {
files := self.files
if self.filter == DisplayAll {
switch self.filter {
case DisplayAll:
return files
case DisplayStaged:
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 DisplayConflicted:
return self.FilterFiles(func(file *models.File) bool { return file.HasMergeConflicts })
default:
panic(fmt.Sprintf("Unexpected files display filter: %d", self.filter))
}
}
func (self *FileTreeViewModel) FilterFiles(test func(*models.File) bool) []*models.File {
result := make([]*models.File, 0)
if self.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)
}
for _, file := range self.files {
if test(file) {
result = append(result, file)
}
}
return result
}
func (self *FileTreeViewModel) SetDisplayFilter(filter FileTreeDisplayFilter) {
func (self *FileTreeViewModel) SetFilter(filter FileTreeDisplayFilter) {
self.filter = filter
self.SetTree()
}
@@ -147,3 +153,7 @@ func (self *FileTreeViewModel) Tree() INode {
func (self *FileTreeViewModel) CollapsedPaths() CollapsedPaths {
return self.collapsedPaths
}
func (self *FileTreeViewModel) GetFilter() FileTreeDisplayFilter {
return self.filter
}

View File

@@ -54,6 +54,20 @@ func TestFilterAction(t *testing.T) {
{Name: "file1", ShortStatus: "M ", HasUnstagedChanges: true},
},
},
{
name: "filter conflicted files",
filter: DisplayConflicted,
files: []*models.File{
{Name: "dir2/dir2/file4", ShortStatus: "DU", HasMergeConflicts: true},
{Name: "dir2/file5", ShortStatus: "M ", HasUnstagedChanges: true},
{Name: "dir2/file6", ShortStatus: " M", HasStagedChanges: true},
{Name: "file1", ShortStatus: "UU", HasMergeConflicts: true, HasInlineMergeConflicts: true},
},
expected: []*models.File{
{Name: "dir2/dir2/file4", ShortStatus: "DU", HasMergeConflicts: true},
{Name: "file1", ShortStatus: "UU", HasMergeConflicts: true, HasInlineMergeConflicts: true},
},
},
}
for _, s := range scenarios {