summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Kock <kock.martin@gmail.com>2024-07-06 21:59:10 +1000
committerJesse Duffield <jessedduffield@gmail.com>2024-07-06 22:02:47 +1000
commitbe21328c69a2436d99f80c9247852641b20a08cc (patch)
treeabc42a699f0f88293bf5302bd2705e5678a3c6d3
parent3d14893c65ca3cf44c3948873a21e8bb0039748c (diff)
Allow cycling between multiple log commands
- Introduced a new optional user config command, allBranchesLogCmds - When pressing 'a' in the Status view, cycle between non-empty, non-identical log commands - There will always be at least one command to run, since allBranhesLogCmd has a default - Update documentation & write an integration test - Update translation string
-rw-r--r--docs/Config.md3
-rw-r--r--docs/keybindings/Keybindings_en.md2
-rw-r--r--pkg/commands/git_commands/branch.go16
-rw-r--r--pkg/config/user_config.go5
-rw-r--r--pkg/i18n/english.go2
-rw-r--r--pkg/integration/tests/status/log_cmd.go33
-rw-r--r--pkg/integration/tests/test_list.go1
-rw-r--r--schema/config.json9
8 files changed, 65 insertions, 6 deletions
diff --git a/docs/Config.md b/docs/Config.md
index 8506f7aed..03501e8c2 100644
--- a/docs/Config.md
+++ b/docs/Config.md
@@ -306,7 +306,8 @@ git:
# Command used when displaying the current branch git log in the main window
branchLogCmd: git log --graph --color=always --abbrev-commit --decorate --date=relative --pretty=medium {{branchName}} --
- # Command used to display git log of all branches in the main window
+ # Command used to display git log of all branches in the main window.
+ # Deprecated: User `allBranchesLogCmds` instead.
allBranchesLogCmd: git log --graph --all --color=always --abbrev-commit --decorate --date=relative --pretty=medium
# If true, do not spawn a separate process when using GPG
diff --git a/docs/keybindings/Keybindings_en.md b/docs/keybindings/Keybindings_en.md
index 73104e994..eb88cb182 100644
--- a/docs/keybindings/Keybindings_en.md
+++ b/docs/keybindings/Keybindings_en.md
@@ -309,7 +309,7 @@ If you would instead like to start an interactive rebase from the selected commi
| `` e `` | Edit config file | Open file in external editor. |
| `` u `` | Check for update | |
| `` <enter> `` | Switch to a recent repo | |
-| `` a `` | Show all branch logs | |
+| `` a `` | Show/cycle all branch logs | |
## Sub-commits
diff --git a/pkg/commands/git_commands/branch.go b/pkg/commands/git_commands/branch.go
index bb065605c..6c9aa8740 100644
--- a/pkg/commands/git_commands/branch.go
+++ b/pkg/commands/git_commands/branch.go
@@ -7,10 +7,12 @@ import (
"github.com/jesseduffield/lazygit/pkg/commands/oscommands"
"github.com/jesseduffield/lazygit/pkg/utils"
"github.com/mgutz/str"
+ "github.com/samber/lo"
)
type BranchCommands struct {
*GitCommon
+ allBranchesLogCmdIndex uint8 // keeps track of current all branches log command
}
func NewBranchCommands(gitCommon *GitCommon) *BranchCommands {
@@ -244,5 +246,17 @@ func (self *BranchCommands) Merge(branchName string, opts MergeOpts) error {
}
func (self *BranchCommands) AllBranchesLogCmdObj() oscommands.ICmdObj {
- return self.cmd.New(str.ToArgv(self.UserConfig.Git.AllBranchesLogCmd)).DontLog()
+ // Only choose between non-empty, non-identical commands
+ candidates := lo.Uniq(lo.WithoutEmpty(append([]string{
+ self.UserConfig.Git.AllBranchesLogCmd,
+ },
+ self.UserConfig.Git.AllBranchesLogCmds...,
+ )))
+
+ n := len(candidates)
+
+ i := self.allBranchesLogCmdIndex
+ self.allBranchesLogCmdIndex = uint8((int(i) + 1) % n)
+
+ return self.cmd.New(str.ToArgv(candidates[i])).DontLog()
}
diff --git a/pkg/config/user_config.go b/pkg/config/user_config.go
index c0613865e..fbf513ea6 100644
--- a/pkg/config/user_config.go
+++ b/pkg/config/user_config.go
@@ -226,8 +226,11 @@ type GitConfig struct {
FetchAll bool `yaml:"fetchAll"`
// Command used when displaying the current branch git log in the main window
BranchLogCmd string `yaml:"branchLogCmd"`
- // Command used to display git log of all branches in the main window
+ // Command used to display git log of all branches in the main window.
+ // Deprecated: User `allBranchesLogCmds` instead.
AllBranchesLogCmd string `yaml:"allBranchesLogCmd"`
+ // Commands used to display git log of all branches in the main window, they will be cycled in order of appearance
+ AllBranchesLogCmds []string `yaml:"allBranchesLogCmds"`
// If true, do not spawn a separate process when using GPG
OverrideGpg bool `yaml:"overrideGpg"`
// If true, do not allow force pushes
diff --git a/pkg/i18n/english.go b/pkg/i18n/english.go
index 62f429cde..d4c656202 100644
--- a/pkg/i18n/english.go
+++ b/pkg/i18n/english.go
@@ -1208,7 +1208,7 @@ func EnglishTranslationSet() *TranslationSet {
MergeBranchTooltip: "View options for merging the selected item into the current branch (regular merge, squash merge)",
ConfirmQuit: `Are you sure you want to quit?`,
SwitchRepo: `Switch to a recent repo`,
- AllBranchesLogGraph: `Show all branch logs`,
+ AllBranchesLogGraph: `Show/cycle all branch logs`,
UnsupportedGitService: `Unsupported git service`,
CreatePullRequest: `Create pull request`,
CopyPullRequestURL: `Copy pull request URL to clipboard`,
diff --git a/pkg/integration/tests/status/log_cmd.go b/pkg/integration/tests/status/log_cmd.go
new file mode 100644
index 000000000..7928cb1b6
--- /dev/null
+++ b/pkg/integration/tests/status/log_cmd.go
@@ -0,0 +1,33 @@
+package status
+
+import (
+ "github.com/jesseduffield/lazygit/pkg/config"
+ . "github.com/jesseduffield/lazygit/pkg/integration/components"
+)
+
+var LogCmd = NewIntegrationTest(NewIntegrationTestArgs{
+ Description: "Cycle between two different log commands in the Status view",
+ ExtraCmdArgs: []string{},
+ Skip: false,
+ SetupConfig: func(config *config.AppConfig) {
+ config.UserConfig.Git.AllBranchesLogCmd = `echo "view1"`
+ config.UserConfig.Git.AllBranchesLogCmds = []string{`echo "view2"`}
+ },
+ SetupRepo: func(shell *Shell) {},
+ Run: func(t *TestDriver, keys config.KeybindingConfig) {
+ t.Views().Status().
+ Focus().
+ Press(keys.Status.AllBranchesLogGraph)
+ t.Views().Main().Content(Contains("view1"))
+
+ t.Views().Status().
+ Focus().
+ Press(keys.Status.AllBranchesLogGraph)
+ t.Views().Main().Content(Contains("view2").DoesNotContain("view1"))
+
+ t.Views().Status().
+ Focus().
+ Press(keys.Status.AllBranchesLogGraph)
+ t.Views().Main().Content(Contains("view1").DoesNotContain("view2"))
+ },
+})
diff --git a/pkg/integration/tests/test_list.go b/pkg/integration/tests/test_list.go
index bfc0fe786..ec24b9f5a 100644
--- a/pkg/integration/tests/test_list.go
+++ b/pkg/integration/tests/test_list.go
@@ -286,6 +286,7 @@ var tests = []*components.IntegrationTest{
status.ClickRepoNameToOpenReposMenu,
status.ClickToFocus,
status.ClickWorkingTreeStateToOpenRebaseOptionsMenu,
+ status.LogCmd,
status.ShowDivergenceFromBaseBranch,
submodule.Add,
submodule.Enter,
diff --git a/schema/config.json b/schema/config.json
index cf67f78c8..23e052f69 100644
--- a/schema/config.json
+++ b/schema/config.json
@@ -580,9 +580,16 @@
},
"allBranchesLogCmd": {
"type": "string",
- "description": "Command used to display git log of all branches in the main window",
+ "description": "Command used to display git log of all branches in the main window.\nDeprecated: User `allBranchesLogCmds` instead.",
"default": "git log --graph --all --color=always --abbrev-commit --decorate --date=relative --pretty=medium"
},
+ "allBranchesLogCmds": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "description": "Commands used to display git log of all branches in the main window, they will be cycled in order of appearance"
+ },
"overrideGpg": {
"type": "boolean",
"description": "If true, do not spawn a separate process when using GPG",