summaryrefslogtreecommitdiffstats
path: root/pkg/gui/controllers/branches_controller.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/gui/controllers/branches_controller.go')
-rw-r--r--pkg/gui/controllers/branches_controller.go67
1 files changed, 45 insertions, 22 deletions
diff --git a/pkg/gui/controllers/branches_controller.go b/pkg/gui/controllers/branches_controller.go
index b08ddd0cd..62eda703e 100644
--- a/pkg/gui/controllers/branches_controller.go
+++ b/pkg/gui/controllers/branches_controller.go
@@ -100,14 +100,13 @@ func (self *BranchesController) GetKeybindings(opts types.KeybindingsOpts) []*ty
DisplayOnScreen: true,
},
{
- Key: opts.GetKey(opts.Config.Branches.RebaseBranch),
- Handler: opts.Guards.OutsideFilterMode(self.rebase),
- GetDisabledReason: self.require(
- self.singleItemSelected(self.notRebasingOntoSelf),
- ),
- Description: self.c.Tr.RebaseBranch,
- Tooltip: self.c.Tr.RebaseBranchTooltip,
- DisplayOnScreen: true,
+ Key: opts.GetKey(opts.Config.Branches.RebaseBranch),
+ Handler: opts.Guards.OutsideFilterMode(self.withItem(self.rebase)),
+ GetDisabledReason: self.require(self.singleItemSelected()),
+ Description: self.c.Tr.RebaseBranch,
+ Tooltip: self.c.Tr.RebaseBranchTooltip,
+ OpensMenu: true,
+ DisplayOnScreen: true,
},
{
Key: opts.GetKey(opts.Config.Branches.MergeIntoCurrentBranch),
@@ -205,6 +204,40 @@ func (self *BranchesController) viewUpstreamOptions(selectedBranch *models.Branc
},
}
+ var disabledReason *types.DisabledReason
+ baseBranch, err := self.c.Git().Loaders.BranchLoader.GetBaseBranch(selectedBranch, self.c.Model().MainBranches)
+ if err != nil {
+ return err
+ }
+ if baseBranch == "" {
+ baseBranch = self.c.Tr.CouldNotDetermineBaseBranch
+ disabledReason = &types.DisabledReason{Text: self.c.Tr.CouldNotDetermineBaseBranch}
+ }
+ shortBaseBranchName := helpers.ShortBranchName(baseBranch)
+ 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 +345,7 @@ func (self *BranchesController) viewUpstreamOptions(selectedBranch *models.Branc
options := []*types.MenuItem{
viewDivergenceItem,
+ viewDivergenceFromBaseBranchItem,
unsetUpstreamItem,
setUpstreamItem,
upstreamResetItem,
@@ -598,19 +632,8 @@ func (self *BranchesController) merge() error {
return self.c.Helpers().MergeAndRebase.MergeRefIntoCheckedOutBranch(selectedBranchName)
}
-func (self *BranchesController) rebase() error {
- selectedBranchName := self.context().GetSelected().Name
- return self.c.Helpers().MergeAndRebase.RebaseOntoRef(selectedBranchName)
-}
-
-func (self *BranchesController) notRebasingOntoSelf(branch *models.Branch) *types.DisabledReason {
- selectedBranchName := branch.Name
- checkedOutBranch := self.c.Helpers().Refs.GetCheckedOutRef().Name
- if selectedBranchName == checkedOutBranch {
- return &types.DisabledReason{Text: self.c.Tr.CantRebaseOntoSelf}
- }
-
- return nil
+func (self *BranchesController) rebase(branch *models.Branch) error {
+ return self.c.Helpers().MergeAndRebase.RebaseOntoRef(branch.Name)
}
func (self *BranchesController) fastForward(branch *models.Branch) error {
@@ -620,7 +643,7 @@ func (self *BranchesController) fastForward(branch *models.Branch) error {
if !branch.RemoteBranchStoredLocally() {
return errors.New(self.c.Tr.FwdNoLocalUpstream)
}
- if branch.HasCommitsToPush() {
+ if branch.IsAheadForPull() {
return errors.New(self.c.Tr.FwdCommitsToPush)
}