Skip to content

Commit 343db7b

Browse files
committed
Add command "View divergence from base branch"
1 parent 4ac77f4 commit 343db7b

File tree

5 files changed

+93
-0
lines changed

5 files changed

+93
-0
lines changed

pkg/gui/controllers/branches_controller.go

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,40 @@ func (self *BranchesController) viewUpstreamOptions(selectedBranch *models.Branc
205205
},
206206
}
207207

208+
var disabledReason *types.DisabledReason
209+
baseBranch, err := self.c.Git().Loaders.BranchLoader.GetBaseBranch(selectedBranch, self.c.Model().MainBranches)
210+
if err != nil {
211+
return err
212+
}
213+
if baseBranch == "" {
214+
baseBranch = self.c.Tr.CouldNotDetermineBaseBranch
215+
disabledReason = &types.DisabledReason{Text: self.c.Tr.CouldNotDetermineBaseBranch}
216+
}
217+
shortBaseBranchName := helpers.ShortBranchName(baseBranch)
218+
label := utils.ResolvePlaceholderString(
219+
self.c.Tr.ViewDivergenceFromBaseBranch,
220+
map[string]string{"baseBranch": shortBaseBranchName},
221+
)
222+
viewDivergenceFromBaseBranchItem := &types.MenuItem{
223+
LabelColumns: []string{label},
224+
Key: 'b',
225+
OnPress: func() error {
226+
branch := self.context().GetSelected()
227+
if branch == nil {
228+
return nil
229+
}
230+
231+
return self.c.Helpers().SubCommits.ViewSubCommits(helpers.ViewSubCommitsOpts{
232+
Ref: branch,
233+
TitleRef: fmt.Sprintf("%s <-> %s", branch.RefName(), shortBaseBranchName),
234+
RefToShowDivergenceFrom: baseBranch,
235+
Context: self.context(),
236+
ShowBranchHeads: false,
237+
})
238+
},
239+
DisabledReason: disabledReason,
240+
}
241+
208242
unsetUpstreamItem := &types.MenuItem{
209243
LabelColumns: []string{self.c.Tr.UnsetUpstream},
210244
OnPress: func() error {
@@ -312,6 +346,7 @@ func (self *BranchesController) viewUpstreamOptions(selectedBranch *models.Branc
312346

313347
options := []*types.MenuItem{
314348
viewDivergenceItem,
349+
viewDivergenceFromBaseBranchItem,
315350
unsetUpstreamItem,
316351
setUpstreamItem,
317352
upstreamResetItem,

pkg/gui/controllers/helpers/branches_helper.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package helpers
22

33
import (
4+
"strings"
5+
46
"github.com/jesseduffield/gocui"
57
"github.com/jesseduffield/lazygit/pkg/gui/types"
68
"github.com/jesseduffield/lazygit/pkg/utils"
@@ -44,3 +46,7 @@ func (self *BranchesHelper) ConfirmDeleteRemote(remoteName string, branchName st
4446
},
4547
})
4648
}
49+
50+
func ShortBranchName(fullBranchName string) string {
51+
return strings.TrimPrefix(strings.TrimPrefix(fullBranchName, "refs/heads/"), "refs/remotes/")
52+
}

pkg/i18n/english.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -468,6 +468,8 @@ type TranslationSet struct {
468468
SetUpstream string
469469
UnsetUpstream string
470470
ViewDivergenceFromUpstream string
471+
ViewDivergenceFromBaseBranch string
472+
CouldNotDetermineBaseBranch string
471473
DivergenceSectionHeaderLocal string
472474
DivergenceSectionHeaderRemote string
473475
ViewUpstreamResetOptions string
@@ -1434,6 +1436,8 @@ func EnglishTranslationSet() TranslationSet {
14341436
SetUpstream: "Set upstream of selected branch",
14351437
UnsetUpstream: "Unset upstream of selected branch",
14361438
ViewDivergenceFromUpstream: "View divergence from upstream",
1439+
ViewDivergenceFromBaseBranch: "View divergence from base branch ({{.baseBranch}})",
1440+
CouldNotDetermineBaseBranch: "Couldn't determine base branch",
14371441
DivergenceSectionHeaderLocal: "Local",
14381442
DivergenceSectionHeaderRemote: "Remote",
14391443
ViewUpstreamResetOptions: "Reset checked-out branch onto {{.upstream}}",
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package branch
2+
3+
import (
4+
"github.com/jesseduffield/lazygit/pkg/config"
5+
. "github.com/jesseduffield/lazygit/pkg/integration/components"
6+
)
7+
8+
var ShowDivergenceFromBaseBranch = NewIntegrationTest(NewIntegrationTestArgs{
9+
Description: "Show divergence from base branch",
10+
ExtraCmdArgs: []string{},
11+
Skip: false,
12+
SetupConfig: func(config *config.AppConfig) {
13+
config.UserConfig.Gui.ShowDivergenceFromBaseBranch = "arrowAndNumber"
14+
},
15+
SetupRepo: func(shell *Shell) {
16+
shell.
17+
EmptyCommit("master 1").
18+
EmptyCommit("master 2").
19+
EmptyCommit("master 3").
20+
NewBranchFrom("feature", "master^").
21+
EmptyCommit("feature 1").
22+
EmptyCommit("feature 2")
23+
},
24+
Run: func(t *TestDriver, keys config.KeybindingConfig) {
25+
t.Views().Branches().
26+
Focus().
27+
Lines(
28+
Contains("feature ↓1").IsSelected(),
29+
Contains("master"),
30+
).
31+
Press(keys.Branches.SetUpstream)
32+
33+
t.ExpectPopup().Menu().Title(Contains("Upstream")).
34+
Select(Contains("View divergence from base branch (master)")).Confirm()
35+
36+
t.Views().SubCommits().
37+
IsFocused().
38+
Title(Contains("Commits (feature <-> master)")).
39+
Lines(
40+
DoesNotContainAnyOf("↓", "↑").Contains("--- Remote ---"),
41+
Contains("↓").Contains("master 3"),
42+
DoesNotContainAnyOf("↓", "↑").Contains("--- Local ---"),
43+
Contains("↑").Contains("feature 2"),
44+
Contains("↑").Contains("feature 1"),
45+
)
46+
},
47+
})

pkg/integration/tests/test_list.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ var tests = []*components.IntegrationTest{
5656
branch.Reset,
5757
branch.ResetToUpstream,
5858
branch.SetUpstream,
59+
branch.ShowDivergenceFromBaseBranch,
5960
branch.ShowDivergenceFromUpstream,
6061
branch.SortLocalBranches,
6162
branch.SortRemoteBranches,

0 commit comments

Comments
 (0)