summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--docs/Config.md10
-rw-r--r--pkg/commands/loading_commits.go7
-rw-r--r--pkg/config/user_config.go13
-rw-r--r--pkg/gui/list_context_config.go19
-rw-r--r--pkg/gui/presentation/commits.go16
5 files changed, 58 insertions, 7 deletions
diff --git a/docs/Config.md b/docs/Config.md
index e62bcb2ea..96200e75d 100644
--- a/docs/Config.md
+++ b/docs/Config.md
@@ -61,6 +61,14 @@ git:
manualCommit: false
# extra args passed to `git merge`, e.g. --no-ff
args: ''
+ log:
+ # one of date-order, reverse, author-date-order, topo-order.
+ # topo-order makes it easier to read the git log graph, but commits may not
+ # appear chronologically. See https://git-scm.com/docs/git-log#_commit_ordering
+ order: 'topo-order'
+ # one of always, never, when-maximised
+ # this determines whether the git graph is rendered in the commits panel
+ showGraph: 'when-maximised'
skipHookPrefix: WIP
autoFetch: true
branchLogCmd: 'git log --graph --color=always --abbrev-commit --decorate --date=relative --pretty=medium {{branchName}} --'
@@ -103,7 +111,7 @@ keybinding:
nextBlock: '<right>' # goto the next block / panel
prevBlock-alt: 'h' # goto the previous block / panel
nextBlock-alt: 'l' # goto the next block / panel
- jumpToBlock: ["1", "2", "3", "4", "5"] # goto the Nth block / panel
+ jumpToBlock: ['1', '2', '3', '4', '5'] # goto the Nth block / panel
nextMatch: 'n'
prevMatch: 'N'
optionMenu: 'x' # show help menu
diff --git a/pkg/commands/loading_commits.go b/pkg/commands/loading_commits.go
index 22f6db6d2..a9553c7c0 100644
--- a/pkg/commands/loading_commits.go
+++ b/pkg/commands/loading_commits.go
@@ -404,10 +404,15 @@ func (c *CommitListBuilder) getLogCmd(opts GetCommitsOptions) *exec.Cmd {
filterFlag = fmt.Sprintf(" --follow -- %s", c.OSCommand.Quote(opts.FilterPath))
}
+ config := c.GitCommand.Config.GetUserConfig().Git.Log
+
+ orderFlag := "--" + config.Order
+
return c.OSCommand.ExecutableFromString(
fmt.Sprintf(
- "git log --topo-order %s --oneline %s %s --abbrev=%d %s",
+ "git log %s %s --oneline %s %s --abbrev=%d %s",
c.OSCommand.Quote(opts.RefName),
+ orderFlag,
prettyFormat,
limitFlag,
20,
diff --git a/pkg/config/user_config.go b/pkg/config/user_config.go
index 485746c0f..4ded99304 100644
--- a/pkg/config/user_config.go
+++ b/pkg/config/user_config.go
@@ -69,7 +69,9 @@ type GitConfig struct {
OverrideGpg bool `yaml:"overrideGpg"`
DisableForcePushing bool `yaml:"disableForcePushing"`
CommitPrefixes map[string]CommitPrefixConfig `yaml:"commitPrefixes"`
- ParseEmoji bool `yaml:"parseEmoji"`
+ // this shoudl really be under 'gui', not 'git'
+ ParseEmoji bool `yaml:"parseEmoji"`
+ Log LogConfig `yaml:"log"`
}
type PagingConfig struct {
@@ -83,6 +85,11 @@ type MergingConfig struct {
Args string `yaml:"args"`
}
+type LogConfig struct {
+ Order string `yaml:"order"` // one of date-order, reverse, author-date-order, topo-order
+ ShowGraph string `yaml:"showGraph"` // one of always, never, when-maximised
+}
+
type CommitPrefixConfig struct {
Pattern string `yaml:"pattern"`
Replace string `yaml:"replace"`
@@ -338,6 +345,10 @@ func GetDefaultConfig() *UserConfig {
ManualCommit: false,
Args: "",
},
+ Log: LogConfig{
+ Order: "topo-order",
+ ShowGraph: "when-maximised",
+ },
SkipHookPrefix: "WIP",
AutoFetch: true,
BranchLogCmd: "git log --graph --color=always --abbrev-commit --decorate --date=relative --pretty=medium {{branchName}} --",
diff --git a/pkg/gui/list_context_config.go b/pkg/gui/list_context_config.go
index e9e585b37..3e19eaf75 100644
--- a/pkg/gui/list_context_config.go
+++ b/pkg/gui/list_context_config.go
@@ -1,6 +1,8 @@
package gui
import (
+ "log"
+
"github.com/jesseduffield/gocui"
"github.com/jesseduffield/lazygit/pkg/gui/presentation"
"github.com/jesseduffield/lazygit/pkg/gui/style"
@@ -173,6 +175,7 @@ func (gui *Gui) branchCommitsListContext() IListContext {
selectedCommitSha,
startIdx,
length,
+ gui.shouldShowGraph(),
)
},
SelectedItem: func() (ListItem, bool) {
@@ -183,6 +186,21 @@ func (gui *Gui) branchCommitsListContext() IListContext {
}
}
+func (gui *Gui) shouldShowGraph() bool {
+ value := gui.Config.GetUserConfig().Git.Log.ShowGraph
+ switch value {
+ case "always":
+ return true
+ case "never":
+ return false
+ case "when-maximised":
+ return gui.State.ScreenMode != SCREEN_NORMAL
+ }
+
+ log.Fatalf("Unknown value for git.log.showGraph: %s. Expected one of: 'always', 'never', 'when-maximised'", value)
+ return false
+}
+
func (gui *Gui) reflogCommitsListContext() IListContext {
parseEmoji := gui.Config.GetUserConfig().Git.ParseEmoji
return &ListContext{
@@ -242,6 +260,7 @@ func (gui *Gui) subCommitsListContext() IListContext {
selectedCommitSha,
0,
len(gui.State.SubCommits),
+ gui.shouldShowGraph(),
)
},
SelectedItem: func() (ListItem, bool) {
diff --git a/pkg/gui/presentation/commits.go b/pkg/gui/presentation/commits.go
index 2a24437c9..c4a02df29 100644
--- a/pkg/gui/presentation/commits.go
+++ b/pkg/gui/presentation/commits.go
@@ -30,6 +30,7 @@ func GetCommitListDisplayStrings(
selectedCommitSha string,
startIdx int,
length int,
+ showGraph bool,
) [][]string {
mutex.Lock()
defer mutex.Unlock()
@@ -61,13 +62,20 @@ func GetCommitListDisplayStrings(
end = len(commits) - 1
}
- filteredPipeSets := pipeSets[startIdx : end+1]
filteredCommits := commits[startIdx : end+1]
- graphLines := graph.RenderAux(filteredPipeSets, filteredCommits, selectedCommitSha)
- lines := make([][]string, 0, len(graphLines))
+ var getGraphLine func(int) string
+ if showGraph {
+ filteredPipeSets := pipeSets[startIdx : end+1]
+ graphLines := graph.RenderAux(filteredPipeSets, filteredCommits, selectedCommitSha)
+ getGraphLine = func(idx int) string { return graphLines[idx] }
+ } else {
+ getGraphLine = func(idx int) string { return "" }
+ }
+
+ lines := make([][]string, 0, len(filteredCommits))
for i, commit := range filteredCommits {
- lines = append(lines, displayCommit(commit, cherryPickedCommitShaMap, diffName, parseEmoji, graphLines[i], fullDescription))
+ lines = append(lines, displayCommit(commit, cherryPickedCommitShaMap, diffName, parseEmoji, getGraphLine(i), fullDescription))
}
return lines
}