summaryrefslogtreecommitdiffstats
path: root/pkg
diff options
context:
space:
mode:
authorStefan Haller <stefan@haller-berlin.de>2023-07-29 18:15:10 +0200
committerStefan Haller <stefan@haller-berlin.de>2023-07-31 08:34:01 +0200
commit4eb73393bbbbd791dca820bdf0020e71b4347841 (patch)
tree095d0a541f2161072e52eee5b15b5fb75c208077 /pkg
parentf5c9764dd265d700ef5b829cbcbe045cc0d62965 (diff)
Don't show branch marker for head commit unless updateRefs config is on
Diffstat (limited to 'pkg')
-rw-r--r--pkg/commands/git_commands/config.go4
-rw-r--r--pkg/gui/context/local_commits_context.go2
-rw-r--r--pkg/gui/context/sub_commits_context.go2
-rw-r--r--pkg/gui/presentation/commits.go9
-rw-r--r--pkg/gui/presentation/commits_test.go49
5 files changed, 65 insertions, 1 deletions
diff --git a/pkg/commands/git_commands/config.go b/pkg/commands/git_commands/config.go
index 46a00f9db..de9707fe9 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 9da76104c..417a4f30a 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 2af3fc4cc..ba2f5e3f6 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 4affe6a57..c00564e9d 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 b6684f80e..4bf4c09af 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,
@@ -120,6 +122,52 @@ func TestGetCommitListDisplayStrings(t *testing.T) {
`),
},
{
+ 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{
{Name: "commit1", Sha: "sha1"},
@@ -356,6 +404,7 @@ func TestGetCommitListDisplayStrings(t *testing.T) {
s.commits,
s.branches,
s.currentBranchName,
+ s.hasUpdateRefConfig,
s.fullDescription,
s.cherryPickedCommitShaSet,
s.diffName,