summaryrefslogtreecommitdiffstats
path: root/pkg/gui/filetree
diff options
context:
space:
mode:
authorJesse Duffield <jessedduffield@gmail.com>2022-01-19 18:32:27 +1100
committerJesse Duffield <jessedduffield@gmail.com>2022-01-22 10:48:51 +1100
commit4ab5e5413944a92699a9540148666f0de26aa44b (patch)
tree58a4b648b5a4e5a6ed5f01b4e40ae5ba3c3ebad7 /pkg/gui/filetree
parentab84410b4155bcee73ead0e2a7510924575b1323 (diff)
add support for git bisect
Diffstat (limited to 'pkg/gui/filetree')
-rw-r--r--pkg/gui/filetree/commit_file_manager.go3
-rw-r--r--pkg/gui/filetree/file_manager.go3
-rw-r--r--pkg/gui/filetree/presentation.go96
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
+ }
+}