From 4eb73393bbbbd791dca820bdf0020e71b4347841 Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Sat, 29 Jul 2023 18:15:10 +0200 Subject: [PATCH] Don't show branch marker for head commit unless updateRefs config is on --- pkg/commands/git_commands/config.go | 4 ++ pkg/gui/context/local_commits_context.go | 2 + pkg/gui/context/sub_commits_context.go | 2 + pkg/gui/presentation/commits.go | 9 ++++- pkg/gui/presentation/commits_test.go | 49 ++++++++++++++++++++++++ 5 files changed, 65 insertions(+), 1 deletion(-) diff --git a/pkg/commands/git_commands/config.go b/pkg/commands/git_commands/config.go index 46a00f9dbbb..de9707fe9ba 100644 --- a/pkg/commands/git_commands/config.go +++ b/pkg/commands/git_commands/config.go @@ -107,3 +107,7 @@ func (self *ConfigCommands) GetCoreCommentChar() byte { return '#' } + +func (self *ConfigCommands) GetRebaseUpdateRefs() bool { + return self.gitConfig.GetBool("rebase.updateRefs") +} diff --git a/pkg/gui/context/local_commits_context.go b/pkg/gui/context/local_commits_context.go index 9da76104c09..417a4f30a65 100644 --- a/pkg/gui/context/local_commits_context.go +++ b/pkg/gui/context/local_commits_context.go @@ -38,12 +38,14 @@ func NewLocalCommitsContext(c *ContextCommon) *LocalCommitsContext { } showYouAreHereLabel := c.Model().WorkingTreeStateAtLastCommitRefresh == enums.REBASE_MODE_REBASING + showBranchMarkerForHeadCommit := c.Git().Config.GetRebaseUpdateRefs() return presentation.GetCommitListDisplayStrings( c.Common, c.Model().Commits, c.Model().Branches, c.Model().CheckedOutBranch, + showBranchMarkerForHeadCommit, c.State().GetRepoState().GetScreenMode() != types.SCREEN_NORMAL, c.Modes().CherryPicking.SelectedShaSet(), c.Modes().Diffing.Ref, diff --git a/pkg/gui/context/sub_commits_context.go b/pkg/gui/context/sub_commits_context.go index 2af3fc4cc2d..ba2f5e3f60a 100644 --- a/pkg/gui/context/sub_commits_context.go +++ b/pkg/gui/context/sub_commits_context.go @@ -55,11 +55,13 @@ func NewSubCommitsContext( if viewModel.GetShowBranchHeads() { branches = c.Model().Branches } + showBranchMarkerForHeadCommit := c.Git().Config.GetRebaseUpdateRefs() return presentation.GetCommitListDisplayStrings( c.Common, c.Model().SubCommits, branches, viewModel.GetRef().RefName(), + showBranchMarkerForHeadCommit, c.State().GetRepoState().GetScreenMode() != types.SCREEN_NORMAL, c.Modes().CherryPicking.SelectedShaSet(), c.Modes().Diffing.Ref, diff --git a/pkg/gui/presentation/commits.go b/pkg/gui/presentation/commits.go index 4affe6a57c3..c00564e9df0 100644 --- a/pkg/gui/presentation/commits.go +++ b/pkg/gui/presentation/commits.go @@ -41,6 +41,7 @@ func GetCommitListDisplayStrings( commits []*models.Commit, branches []*models.Branch, currentBranchName string, + showBranchMarkerForHeadCommit bool, fullDescription bool, cherryPickedCommitShaSet *set.Set[string], diffName string, @@ -106,6 +107,9 @@ func GetCommitListDisplayStrings( // that are not the current branch, and not any of the main branches. The // goal is to visualize stacks of local branches, so anything that doesn't // contribute to a branch stack shouldn't show a marker. + // + // If there are other branches pointing to the current head commit, we only + // want to show the marker if the rebase.updateRefs config is on. branchHeadsToVisualize := set.NewFromSlice(lo.FilterMap(branches, func(b *models.Branch, index int) (string, bool) { return b.CommitHash, @@ -116,7 +120,10 @@ func GetCommitListDisplayStrings( // Don't show a marker for the current branch b.Name != currentBranchName && // Don't show a marker for main branches - !lo.Contains(common.UserConfig.Git.MainBranches, b.Name) + !lo.Contains(common.UserConfig.Git.MainBranches, b.Name) && + // Don't show a marker for the head commit unless the + // rebase.updateRefs config is on + (showBranchMarkerForHeadCommit || b.CommitHash != commits[0].Sha) })) lines := make([][]string, 0, len(filteredCommits)) diff --git a/pkg/gui/presentation/commits_test.go b/pkg/gui/presentation/commits_test.go index b6684f80ee8..4bf4c09af03 100644 --- a/pkg/gui/presentation/commits_test.go +++ b/pkg/gui/presentation/commits_test.go @@ -30,6 +30,7 @@ func TestGetCommitListDisplayStrings(t *testing.T) { commits []*models.Commit branches []*models.Branch currentBranchName string + hasUpdateRefConfig bool fullDescription bool cherryPickedCommitShaSet *set.Set[string] diffName string @@ -106,6 +107,7 @@ func TestGetCommitListDisplayStrings(t *testing.T) { {Name: "old-branch", CommitHash: "sha4", Head: false}, }, currentBranchName: "current-branch", + hasUpdateRefConfig: true, startIdx: 0, length: 4, showGraph: false, @@ -119,6 +121,52 @@ func TestGetCommitListDisplayStrings(t *testing.T) { sha4 commit4 `), }, + { + testName: "show local branch head for head commit if updateRefs is on", + commits: []*models.Commit{ + {Name: "commit1", Sha: "sha1"}, + {Name: "commit2", Sha: "sha2"}, + }, + branches: []*models.Branch{ + {Name: "current-branch", CommitHash: "sha1", Head: true}, + {Name: "other-branch", CommitHash: "sha1", Head: false}, + }, + currentBranchName: "current-branch", + hasUpdateRefConfig: true, + startIdx: 0, + length: 2, + showGraph: false, + bisectInfo: git_commands.NewNullBisectInfo(), + cherryPickedCommitShaSet: set.New[string](), + now: time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC), + expected: formatExpected(` + sha1 * commit1 + sha2 commit2 + `), + }, + { + testName: "don't show local branch head for head commit if updateRefs is off", + commits: []*models.Commit{ + {Name: "commit1", Sha: "sha1"}, + {Name: "commit2", Sha: "sha2"}, + }, + branches: []*models.Branch{ + {Name: "current-branch", CommitHash: "sha1", Head: true}, + {Name: "other-branch", CommitHash: "sha1", Head: false}, + }, + currentBranchName: "current-branch", + hasUpdateRefConfig: false, + startIdx: 0, + length: 2, + showGraph: false, + bisectInfo: git_commands.NewNullBisectInfo(), + cherryPickedCommitShaSet: set.New[string](), + now: time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC), + expected: formatExpected(` + sha1 commit1 + sha2 commit2 + `), + }, { testName: "show local branch head and tag if both exist", commits: []*models.Commit{ @@ -356,6 +404,7 @@ func TestGetCommitListDisplayStrings(t *testing.T) { s.commits, s.branches, s.currentBranchName, + s.hasUpdateRefConfig, s.fullDescription, s.cherryPickedCommitShaSet, s.diffName,