summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Duffield <jessedduffield@gmail.com>2020-08-23 14:20:28 +1000
committerJesse Duffield <jessedduffield@gmail.com>2020-08-23 15:11:06 +1000
commit2915134007be939bd43fae74cb7559b4cfdccc9d (patch)
treec7b61cc1bd35681de5ebf18113c9a44f27b08626
parent2f893bf3616cfee2bfe07f1b38cbf193423397c4 (diff)
show file statuses in commit files view
-rw-r--r--pkg/commands/commit_file.go11
-rw-r--r--pkg/commands/git.go17
-rw-r--r--pkg/gui/presentation/commit_files.go20
3 files changed, 36 insertions, 12 deletions
diff --git a/pkg/commands/commit_file.go b/pkg/commands/commit_file.go
index 29ae53268..9aca23855 100644
--- a/pkg/commands/commit_file.go
+++ b/pkg/commands/commit_file.go
@@ -3,10 +3,13 @@ package commands
// CommitFile : A git commit file
type CommitFile struct {
// Parent is the identifier of the parent object e.g. a commit SHA if this commit file is for a commit, or a stash entry ref like 'stash@{1}'
- Parent string
- Name string
- DisplayString string
- Status int // one of 'WHOLE' 'PART' 'NONE'
+ Parent string
+ Name string
+
+ // Status tells us whether the file has been wholly or partially added to a patch. We might want to pull this logic up into the gui package and make it a map like we do with cherry picked commits
+ Status int // one of 'WHOLE' 'PART' 'NONE'
+
+ ChangeStatus string // e.g. 'A' for added or 'M' for modified. This is based on the result from git diff --name-status
}
func (f *CommitFile) ID() string {
diff --git a/pkg/commands/git.go b/pkg/commands/git.go
index 0d03eac2c..36c90228f 100644
--- a/pkg/commands/git.go
+++ b/pkg/commands/git.go
@@ -1052,7 +1052,7 @@ func (c *GitCommand) GetFilesInDiff(from string, to string, reverse bool, patchM
reverseFlag = " -R "
}
- filenames, err := c.OSCommand.RunCommandWithOutput("git diff --name-only %s %s %s", reverseFlag, from, to)
+ filenames, err := c.OSCommand.RunCommandWithOutput("git diff --name-status %s %s %s", reverseFlag, from, to)
if err != nil {
return nil, err
}
@@ -1064,17 +1064,20 @@ func (c *GitCommand) GetFilesInDiff(from string, to string, reverse bool, patchM
func (c *GitCommand) GetCommitFilesFromFilenames(filenames string, parent string, patchManager *patch.PatchManager) []*CommitFile {
commitFiles := make([]*CommitFile, 0)
- for _, file := range strings.Split(strings.TrimRight(filenames, "\n"), "\n") {
+ for _, line := range strings.Split(strings.TrimRight(filenames, "\n"), "\n") {
+ // typical result looks like 'A my_file' meaning my_file was added
+ changeStatus := line[0:1]
+ name := line[2:]
status := patch.UNSELECTED
if patchManager != nil && patchManager.To == parent {
- status = patchManager.GetFileStatus(file)
+ status = patchManager.GetFileStatus(name)
}
commitFiles = append(commitFiles, &CommitFile{
- Parent: parent,
- Name: file,
- DisplayString: file,
- Status: status,
+ Parent: parent,
+ Name: name,
+ ChangeStatus: changeStatus,
+ Status: status,
})
}
diff --git a/pkg/gui/presentation/commit_files.go b/pkg/gui/presentation/commit_files.go
index 59e026f16..8b6fbfe5b 100644
--- a/pkg/gui/presentation/commit_files.go
+++ b/pkg/gui/presentation/commit_files.go
@@ -5,6 +5,7 @@ import (
"github.com/jesseduffield/lazygit/pkg/commands"
"github.com/jesseduffield/lazygit/pkg/commands/patch"
"github.com/jesseduffield/lazygit/pkg/theme"
+ "github.com/jesseduffield/lazygit/pkg/utils"
)
func GetCommitFileListDisplayStrings(commitFiles []*commands.CommitFile, diffName string) [][]string {
@@ -37,5 +38,22 @@ func getCommitFileDisplayStrings(f *commands.CommitFile, diffed bool) []string {
if diffed {
colour = diffTerminalColor
}
- return []string{colour.Sprint(f.DisplayString)}
+ return []string{utils.ColoredString(f.ChangeStatus, getColorForChangeStatus(f.ChangeStatus)), colour.Sprint(f.Name)}
+}
+
+func getColorForChangeStatus(changeStatus string) color.Attribute {
+ switch changeStatus {
+ case "A":
+ return color.FgGreen
+ case "M", "R":
+ return color.FgYellow
+ case "D":
+ return color.FgRed
+ case "C":
+ return color.FgCyan
+ case "T":
+ return color.FgMagenta
+ default:
+ return color.FgWhite
+ }
}