From 2915134007be939bd43fae74cb7559b4cfdccc9d Mon Sep 17 00:00:00 2001 From: Jesse Duffield Date: Sun, 23 Aug 2020 14:20:28 +1000 Subject: show file statuses in commit files view --- pkg/commands/commit_file.go | 11 +++++++---- pkg/commands/git.go | 17 ++++++++++------- pkg/gui/presentation/commit_files.go | 20 +++++++++++++++++++- 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 + } } -- cgit v1.2.3