diff options
author | Jesse Duffield <jessedduffield@gmail.com> | 2022-01-19 18:32:27 +1100 |
---|---|---|
committer | Jesse Duffield <jessedduffield@gmail.com> | 2022-01-22 10:48:51 +1100 |
commit | 4ab5e5413944a92699a9540148666f0de26aa44b (patch) | |
tree | 58a4b648b5a4e5a6ed5f01b4e40ae5ba3c3ebad7 /pkg/gui/filetree | |
parent | ab84410b4155bcee73ead0e2a7510924575b1323 (diff) |
add support for git bisect
Diffstat (limited to 'pkg/gui/filetree')
-rw-r--r-- | pkg/gui/filetree/commit_file_manager.go | 3 | ||||
-rw-r--r-- | pkg/gui/filetree/file_manager.go | 3 | ||||
-rw-r--r-- | pkg/gui/filetree/presentation.go | 96 |
3 files changed, 98 insertions, 4 deletions
diff --git a/pkg/gui/filetree/commit_file_manager.go b/pkg/gui/filetree/commit_file_manager.go index e80528bcb..852a67b09 100644 --- a/pkg/gui/filetree/commit_file_manager.go +++ b/pkg/gui/filetree/commit_file_manager.go @@ -3,7 +3,6 @@ package filetree import ( "github.com/jesseduffield/lazygit/pkg/commands/models" "github.com/jesseduffield/lazygit/pkg/commands/patch" - "github.com/jesseduffield/lazygit/pkg/gui/presentation" "github.com/sirupsen/logrus" ) @@ -114,6 +113,6 @@ func (m *CommitFileManager) Render(diffName string, patchManager *patch.PatchMan status = patch.PART } - return presentation.GetCommitFileLine(castN.NameAtDepth(depth), diffName, castN.File, status) + return getCommitFileLine(castN.NameAtDepth(depth), diffName, castN.File, status) }) } diff --git a/pkg/gui/filetree/file_manager.go b/pkg/gui/filetree/file_manager.go index 699e20332..b028ef961 100644 --- a/pkg/gui/filetree/file_manager.go +++ b/pkg/gui/filetree/file_manager.go @@ -4,7 +4,6 @@ import ( "sync" "github.com/jesseduffield/lazygit/pkg/commands/models" - "github.com/jesseduffield/lazygit/pkg/gui/presentation" "github.com/sirupsen/logrus" ) @@ -136,6 +135,6 @@ func (m *FileManager) Render(diffName string, submoduleConfigs []*models.Submodu return renderAux(m.tree, m.collapsedPaths, "", -1, func(n INode, depth int) string { castN := n.(*FileNode) - return presentation.GetFileLine(castN.GetHasUnstagedChanges(), castN.GetHasStagedChanges(), castN.NameAtDepth(depth), diffName, submoduleConfigs, castN.File) + return getFileLine(castN.GetHasUnstagedChanges(), castN.GetHasStagedChanges(), castN.NameAtDepth(depth), diffName, submoduleConfigs, castN.File) }) } diff --git a/pkg/gui/filetree/presentation.go b/pkg/gui/filetree/presentation.go new file mode 100644 index 000000000..6cecb78ad --- /dev/null +++ b/pkg/gui/filetree/presentation.go @@ -0,0 +1,96 @@ +package filetree + +import ( + "github.com/jesseduffield/lazygit/pkg/commands/models" + "github.com/jesseduffield/lazygit/pkg/commands/patch" + "github.com/jesseduffield/lazygit/pkg/gui/style" + "github.com/jesseduffield/lazygit/pkg/theme" + "github.com/jesseduffield/lazygit/pkg/utils" +) + +// TODO: move this back into presentation package and fix the import cycle + +func getFileLine(hasUnstagedChanges bool, hasStagedChanges bool, name string, diffName string, submoduleConfigs []*models.SubmoduleConfig, file *models.File) string { + // potentially inefficient to be instantiating these color + // objects with each render + partiallyModifiedColor := style.FgYellow + + restColor := style.FgGreen + if name == diffName { + restColor = theme.DiffTerminalColor + } else if file == nil && hasStagedChanges && hasUnstagedChanges { + restColor = partiallyModifiedColor + } else if hasUnstagedChanges { + restColor = style.FgRed + } + + output := "" + if file != nil { + // this is just making things look nice when the background attribute is 'reverse' + firstChar := file.ShortStatus[0:1] + firstCharCl := style.FgGreen + if firstChar == "?" { + firstCharCl = style.FgRed + } else if firstChar == " " { + firstCharCl = restColor + } + + secondChar := file.ShortStatus[1:2] + secondCharCl := style.FgRed + if secondChar == " " { + secondCharCl = restColor + } + + output = firstCharCl.Sprint(firstChar) + output += secondCharCl.Sprint(secondChar) + output += restColor.Sprint(" ") + } + + output += restColor.Sprint(utils.EscapeSpecialChars(name)) + + if file != nil && file.IsSubmodule(submoduleConfigs) { + output += theme.DefaultTextColor.Sprint(" (submodule)") + } + + return output +} + +func getCommitFileLine(name string, diffName string, commitFile *models.CommitFile, status patch.PatchStatus) string { + var colour style.TextStyle + if diffName == name { + colour = theme.DiffTerminalColor + } else { + switch status { + case patch.WHOLE: + colour = style.FgGreen + case patch.PART: + colour = style.FgYellow + case patch.UNSELECTED: + colour = theme.DefaultTextColor + } + } + + name = utils.EscapeSpecialChars(name) + if commitFile == nil { + return colour.Sprint(name) + } + + return getColorForChangeStatus(commitFile.ChangeStatus).Sprint(commitFile.ChangeStatus) + " " + colour.Sprint(name) +} + +func getColorForChangeStatus(changeStatus string) style.TextStyle { + switch changeStatus { + case "A": + return style.FgGreen + case "M", "R": + return style.FgYellow + case "D": + return style.FgRed + case "C": + return style.FgCyan + case "T": + return style.FgMagenta + default: + return theme.DefaultTextColor + } +} |