From fba1a2b5aceba3098ad9ffb4cacc19073de0e910 Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Tue, 2 May 2023 09:36:03 +0200 Subject: Add config gui.experimentalShowBranchHeads People find the new (*) display for branch heads in the commits list confusing, so make it opt-in for now. --- docs/Config.md | 1 + pkg/config/user_config.go | 78 +++++++++++----------- pkg/gui/presentation/commits.go | 2 +- .../drop_todo_commit_with_update_ref.go | 12 ++-- ...odo_commit_with_update_ref_show_branch_heads.go | 62 +++++++++++++++++ pkg/integration/tests/test_list.go | 1 + 6 files changed, 111 insertions(+), 45 deletions(-) create mode 100644 pkg/integration/tests/interactive_rebase/drop_todo_commit_with_update_ref_show_branch_heads.go diff --git a/docs/Config.md b/docs/Config.md index 837230367..34e89c130 100644 --- a/docs/Config.md +++ b/docs/Config.md @@ -57,6 +57,7 @@ gui: showFileTree: true # for rendering changes files in a tree format showListFooter: true # for seeing the '5 of 20' message in list panels showRandomTip: true + experimentalShowBranchHeads: false # visualize branch heads with (*) in commits list showBottomLine: true # for hiding the bottom information line (unless it has important information to tell you) showCommandLog: true showIcons: false diff --git a/pkg/config/user_config.go b/pkg/config/user_config.go index fb36bb7ea..82361ddbd 100644 --- a/pkg/config/user_config.go +++ b/pkg/config/user_config.go @@ -27,32 +27,33 @@ type RefresherConfig struct { } type GuiConfig struct { - AuthorColors map[string]string `yaml:"authorColors"` - BranchColors map[string]string `yaml:"branchColors"` - ScrollHeight int `yaml:"scrollHeight"` - ScrollPastBottom bool `yaml:"scrollPastBottom"` - MouseEvents bool `yaml:"mouseEvents"` - SkipUnstageLineWarning bool `yaml:"skipUnstageLineWarning"` - SkipStashWarning bool `yaml:"skipStashWarning"` - SidePanelWidth float64 `yaml:"sidePanelWidth"` - ExpandFocusedSidePanel bool `yaml:"expandFocusedSidePanel"` - MainPanelSplitMode string `yaml:"mainPanelSplitMode"` - Language string `yaml:"language"` - TimeFormat string `yaml:"timeFormat"` - Theme ThemeConfig `yaml:"theme"` - CommitLength CommitLengthConfig `yaml:"commitLength"` - SkipNoStagedFilesWarning bool `yaml:"skipNoStagedFilesWarning"` - ShowListFooter bool `yaml:"showListFooter"` - ShowFileTree bool `yaml:"showFileTree"` - ShowRandomTip bool `yaml:"showRandomTip"` - ShowCommandLog bool `yaml:"showCommandLog"` - ShowBottomLine bool `yaml:"showBottomLine"` - ShowIcons bool `yaml:"showIcons"` - CommandLogSize int `yaml:"commandLogSize"` - SplitDiff string `yaml:"splitDiff"` - SkipRewordInEditorWarning bool `yaml:"skipRewordInEditorWarning"` - WindowSize string `yaml:"windowSize"` - Border string `yaml:"border"` + AuthorColors map[string]string `yaml:"authorColors"` + BranchColors map[string]string `yaml:"branchColors"` + ScrollHeight int `yaml:"scrollHeight"` + ScrollPastBottom bool `yaml:"scrollPastBottom"` + MouseEvents bool `yaml:"mouseEvents"` + SkipUnstageLineWarning bool `yaml:"skipUnstageLineWarning"` + SkipStashWarning bool `yaml:"skipStashWarning"` + SidePanelWidth float64 `yaml:"sidePanelWidth"` + ExpandFocusedSidePanel bool `yaml:"expandFocusedSidePanel"` + MainPanelSplitMode string `yaml:"mainPanelSplitMode"` + Language string `yaml:"language"` + TimeFormat string `yaml:"timeFormat"` + Theme ThemeConfig `yaml:"theme"` + CommitLength CommitLengthConfig `yaml:"commitLength"` + SkipNoStagedFilesWarning bool `yaml:"skipNoStagedFilesWarning"` + ShowListFooter bool `yaml:"showListFooter"` + ShowFileTree bool `yaml:"showFileTree"` + ShowRandomTip bool `yaml:"showRandomTip"` + ShowCommandLog bool `yaml:"showCommandLog"` + ShowBottomLine bool `yaml:"showBottomLine"` + ShowIcons bool `yaml:"showIcons"` + ExperimentalShowBranchHeads bool `yaml:"experimentalShowBranchHeads"` + CommandLogSize int `yaml:"commandLogSize"` + SplitDiff string `yaml:"splitDiff"` + SkipRewordInEditorWarning bool `yaml:"skipRewordInEditorWarning"` + WindowSize string `yaml:"windowSize"` + Border string `yaml:"border"` } type ThemeConfig struct { @@ -408,18 +409,19 @@ func GetDefaultConfig() *UserConfig { UnstagedChangesColor: []string{"red"}, DefaultFgColor: []string{"default"}, }, - CommitLength: CommitLengthConfig{Show: true}, - SkipNoStagedFilesWarning: false, - ShowListFooter: true, - ShowCommandLog: true, - ShowBottomLine: true, - ShowFileTree: true, - ShowRandomTip: true, - ShowIcons: false, - CommandLogSize: 8, - SplitDiff: "auto", - SkipRewordInEditorWarning: false, - Border: "single", + CommitLength: CommitLengthConfig{Show: true}, + SkipNoStagedFilesWarning: false, + ShowListFooter: true, + ShowCommandLog: true, + ShowBottomLine: true, + ShowFileTree: true, + ShowRandomTip: true, + ShowIcons: false, + ExperimentalShowBranchHeads: false, + CommandLogSize: 8, + SplitDiff: "auto", + SkipRewordInEditorWarning: false, + Border: "single", }, Git: GitConfig{ Paging: PagingConfig{ diff --git a/pkg/gui/presentation/commits.go b/pkg/gui/presentation/commits.go index 7e16197b5..6b83456b9 100644 --- a/pkg/gui/presentation/commits.go +++ b/pkg/gui/presentation/commits.go @@ -277,7 +277,7 @@ func displayCommit( } else { if len(commit.Tags) > 0 { tagString = theme.DiffTerminalColor.SetBold().Sprint(strings.Join(commit.Tags, " ")) + " " - } else if commit.ExtraInfo != "" { + } else if common.UserConfig.Gui.ExperimentalShowBranchHeads && commit.ExtraInfo != "" { tagString = style.FgMagenta.SetBold().Sprint("(*)") + " " } } diff --git a/pkg/integration/tests/interactive_rebase/drop_todo_commit_with_update_ref.go b/pkg/integration/tests/interactive_rebase/drop_todo_commit_with_update_ref.go index fcbf1abe5..ace5bed40 100644 --- a/pkg/integration/tests/interactive_rebase/drop_todo_commit_with_update_ref.go +++ b/pkg/integration/tests/interactive_rebase/drop_todo_commit_with_update_ref.go @@ -23,10 +23,10 @@ var DropTodoCommitWithUpdateRef = NewIntegrationTest(NewIntegrationTestArgs{ t.Views().Commits(). Focus(). Lines( - Contains("(*) commit 06").IsSelected(), + Contains("commit 06").IsSelected(), Contains("commit 05"), Contains("commit 04"), - Contains("(*) commit 03"), + Contains("commit 03"), Contains("commit 02"), Contains("commit 01"), ). @@ -34,11 +34,11 @@ var DropTodoCommitWithUpdateRef = NewIntegrationTest(NewIntegrationTestArgs{ Press(keys.Universal.Edit). Focus(). Lines( - Contains("pick").Contains("(*) commit 06"), + Contains("pick").Contains("commit 06"), Contains("pick").Contains("commit 05"), Contains("pick").Contains("commit 04"), Contains("update-ref").Contains("master"), - Contains("pick").Contains("(*) commit 03"), + Contains("pick").Contains("commit 03"), Contains("pick").Contains("commit 02"), Contains("<-- YOU ARE HERE --- commit 01"), ). @@ -50,9 +50,9 @@ var DropTodoCommitWithUpdateRef = NewIntegrationTest(NewIntegrationTestArgs{ t.Views().Commits(). IsFocused(). Lines( - Contains("(*) commit 06"), + Contains("commit 06"), Contains("commit 04"), - Contains("(*) commit 03"), + Contains("commit 03"), Contains("commit 02"), Contains("commit 01"), ) diff --git a/pkg/integration/tests/interactive_rebase/drop_todo_commit_with_update_ref_show_branch_heads.go b/pkg/integration/tests/interactive_rebase/drop_todo_commit_with_update_ref_show_branch_heads.go new file mode 100644 index 000000000..cb42ce989 --- /dev/null +++ b/pkg/integration/tests/interactive_rebase/drop_todo_commit_with_update_ref_show_branch_heads.go @@ -0,0 +1,62 @@ +package interactive_rebase + +import ( + "github.com/jesseduffield/lazygit/pkg/config" + . "github.com/jesseduffield/lazygit/pkg/integration/components" +) + +var DropTodoCommitWithUpdateRefShowBranchHeads = NewIntegrationTest(NewIntegrationTestArgs{ + Description: "Drops a commit during interactive rebase when there is an update-ref in the git-rebase-todo file (with experimentalShowBranchHeads on)", + ExtraCmdArgs: "", + Skip: false, + GitVersion: From("2.38.0"), + SetupConfig: func(config *config.AppConfig) { + config.UserConfig.Gui.ExperimentalShowBranchHeads = true + }, + SetupRepo: func(shell *Shell) { + shell. + CreateNCommits(3). + NewBranch("mybranch"). + CreateNCommitsStartingAt(3, 4) + + shell.SetConfig("rebase.updateRefs", "true") + }, + Run: func(t *TestDriver, keys config.KeybindingConfig) { + t.Views().Commits(). + Focus(). + Lines( + Contains("(*) commit 06").IsSelected(), + Contains("commit 05"), + Contains("commit 04"), + Contains("(*) commit 03"), + Contains("commit 02"), + Contains("commit 01"), + ). + NavigateToLine(Contains("commit 01")). + Press(keys.Universal.Edit). + Focus(). + Lines( + Contains("pick").Contains("(*) commit 06"), + Contains("pick").Contains("commit 05"), + Contains("pick").Contains("commit 04"), + Contains("update-ref").Contains("master"), + Contains("pick").Contains("(*) commit 03"), + Contains("pick").Contains("commit 02"), + Contains("<-- YOU ARE HERE --- commit 01"), + ). + NavigateToLine(Contains("commit 05")). + Press(keys.Universal.Remove) + + t.Common().ContinueRebase() + + t.Views().Commits(). + IsFocused(). + Lines( + Contains("(*) commit 06"), + Contains("commit 04"), + Contains("(*) commit 03"), + Contains("commit 02"), + Contains("commit 01"), + ) + }, +}) diff --git a/pkg/integration/tests/test_list.go b/pkg/integration/tests/test_list.go index 1bb581614..b2cb12e14 100644 --- a/pkg/integration/tests/test_list.go +++ b/pkg/integration/tests/test_list.go @@ -93,6 +93,7 @@ var tests = []*components.IntegrationTest{ interactive_rebase.AmendMerge, interactive_rebase.AmendNonHeadCommitDuringRebase, interactive_rebase.DropTodoCommitWithUpdateRef, + interactive_rebase.DropTodoCommitWithUpdateRefShowBranchHeads, interactive_rebase.EditFirstCommit, interactive_rebase.EditNonTodoCommitDuringRebase, interactive_rebase.FixupFirstCommit, -- cgit v1.2.3