diff --git a/pkg/gui/controllers/branches_controller.go b/pkg/gui/controllers/branches_controller.go index b08ddd0cd..2e184a6f2 100644 --- a/pkg/gui/controllers/branches_controller.go +++ b/pkg/gui/controllers/branches_controller.go @@ -205,6 +205,40 @@ func (self *BranchesController) viewUpstreamOptions(selectedBranch *models.Branc }, } + var disabledReason *types.DisabledReason + baseBranch, err := self.c.Git().Loaders.BranchLoader.GetBaseBranch(selectedBranch, self.c.Model().ExistingMainBranches) + if err != nil { + return err + } + if baseBranch == "" { + baseBranch = self.c.Tr.BaseBranch + disabledReason = &types.DisabledReason{Text: self.c.Tr.NoMainBranches} + } + shortBaseBranchName := strings.TrimPrefix(baseBranch, "refs/remotes/") + label := utils.ResolvePlaceholderString( + self.c.Tr.ViewDivergenceFromBaseBranch, + map[string]string{"baseBranch": shortBaseBranchName}, + ) + viewDivergenceFromBaseBranchItem := &types.MenuItem{ + LabelColumns: []string{label}, + Key: 'b', + OnPress: func() error { + branch := self.context().GetSelected() + if branch == nil { + return nil + } + + return self.c.Helpers().SubCommits.ViewSubCommits(helpers.ViewSubCommitsOpts{ + Ref: branch, + TitleRef: fmt.Sprintf("%s <-> %s", branch.RefName(), shortBaseBranchName), + RefToShowDivergenceFrom: baseBranch, + Context: self.context(), + ShowBranchHeads: false, + }) + }, + DisabledReason: disabledReason, + } + unsetUpstreamItem := &types.MenuItem{ LabelColumns: []string{self.c.Tr.UnsetUpstream}, OnPress: func() error { @@ -312,6 +346,7 @@ func (self *BranchesController) viewUpstreamOptions(selectedBranch *models.Branc options := []*types.MenuItem{ viewDivergenceItem, + viewDivergenceFromBaseBranchItem, unsetUpstreamItem, setUpstreamItem, upstreamResetItem, diff --git a/pkg/i18n/english.go b/pkg/i18n/english.go index caa920de1..aba6313c3 100644 --- a/pkg/i18n/english.go +++ b/pkg/i18n/english.go @@ -468,6 +468,9 @@ type TranslationSet struct { SetUpstream string UnsetUpstream string ViewDivergenceFromUpstream string + ViewDivergenceFromBaseBranch string + NoMainBranches string + BaseBranch string DivergenceSectionHeaderLocal string DivergenceSectionHeaderRemote string ViewUpstreamResetOptions string @@ -1434,6 +1437,9 @@ func EnglishTranslationSet() TranslationSet { SetUpstream: "Set upstream of selected branch", UnsetUpstream: "Unset upstream of selected branch", ViewDivergenceFromUpstream: "View divergence from upstream", + ViewDivergenceFromBaseBranch: "View divergence from base branch ({{.baseBranch}})", + NoMainBranches: "There are no main branches", + BaseBranch: "base branch", DivergenceSectionHeaderLocal: "Local", DivergenceSectionHeaderRemote: "Remote", ViewUpstreamResetOptions: "Reset checked-out branch onto {{.upstream}}",