Skip to content

Commit

Permalink
add remotes context to branches view
Browse files Browse the repository at this point in the history
  • Loading branch information
jesseduffield committed Nov 21, 2019
1 parent 092f274 commit e6be849
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 0 deletions.
41 changes: 41 additions & 0 deletions pkg/gui/branches_panel.go
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,10 @@ func (gui *Gui) RenderSelectedBranchUpstreamDifferences() error {
// gui.refreshStatus is called at the end of this because that's when we can
// be sure there is a state.Branches array to pick the current branch from
func (gui *Gui) refreshBranches(g *gocui.Gui) error {
if err := gui.refreshRemotes(); err != nil {
return err
}

g.Update(func(g *gocui.Gui) error {
builder, err := commands.NewBranchListBuilder(gui.Log, gui.GitCommand)
if err != nil {
Expand Down Expand Up @@ -358,3 +362,40 @@ func (gui *Gui) handleFastForward(g *gocui.Gui, v *gocui.View) error {
}()
return nil
}

func (gui *Gui) onBranchesTabClick(tabIndex int) error {
gui.State.Panels.Branches.ContextIndex = tabIndex
branchesView := gui.getBranchesView()
branchesView.TabIndex = tabIndex

switch tabIndex {
case 0:
if err := gui.renderListPanel(branchesView, gui.State.Branches); err != nil {
return err
}
case 1:
if err := gui.renderListPanel(branchesView, gui.State.Remotes); err != nil {
return err
}
}

return nil
}

// gui.refreshStatus is called at the end of this because that's when we can
// be sure there is a state.Branches array to pick the current branch from
func (gui *Gui) refreshRemotes() error {
remotes, err := gui.GitCommand.GetRemotes()
if err != nil {
return gui.createErrorPanel(gui.g, err.Error())
}

gui.State.Remotes = remotes

gui.g.Update(func(g *gocui.Gui) error {
gui.refreshSelectedLine(&gui.State.Panels.Remotes.SelectedLine, len(gui.State.Remotes))
return nil
})

return nil
}
11 changes: 11 additions & 0 deletions pkg/gui/gui.go
Original file line number Diff line number Diff line change
Expand Up @@ -107,8 +107,14 @@ type filePanelState struct {
SelectedLine int
}

// TODO: consider splitting this out into the window and the branches view
type branchPanelState struct {
SelectedLine int
ContextIndex int
}

type remotePanelState struct {
SelectedLine int
}

type commitPanelState struct {
Expand Down Expand Up @@ -137,6 +143,7 @@ type statusPanelState struct {
type panelStates struct {
Files *filePanelState
Branches *branchPanelState
Remotes *remotePanelState
Commits *commitPanelState
Stash *stashPanelState
Menu *menuPanelState
Expand All @@ -153,6 +160,7 @@ type guiState struct {
StashEntries []*commands.StashEntry
CommitFiles []*commands.CommitFile
DiffEntries []*commands.Commit
Remotes []*commands.Remote
MenuItemCount int // can't store the actual list because it's of interface{} type
PreviousView string
Platform commands.Platform
Expand Down Expand Up @@ -183,6 +191,7 @@ func NewGui(log *logrus.Entry, gitCommand *commands.GitCommand, oSCommand *comma
Panels: &panelStates{
Files: &filePanelState{SelectedLine: -1},
Branches: &branchPanelState{SelectedLine: 0},
Remotes: &remotePanelState{SelectedLine: -1},
Commits: &commitPanelState{SelectedLine: -1},
CommitFiles: &commitFilesPanelState{SelectedLine: -1},
Stash: &stashPanelState{SelectedLine: -1},
Expand Down Expand Up @@ -480,6 +489,8 @@ func (gui *Gui) layout(g *gocui.Gui) error {
return err
}
branchesView.Title = gui.Tr.SLocalize("BranchesTitle")
branchesView.Tabs = []string{"Local Branches", "Remotes"}
branchesView.TabIndex = gui.State.Panels.Branches.ContextIndex
branchesView.FgColor = textColor
}

Expand Down
5 changes: 5 additions & 0 deletions pkg/gui/keybindings.go
Original file line number Diff line number Diff line change
Expand Up @@ -631,6 +631,11 @@ func (gui *Gui) keybindings(g *gocui.Gui) error {
if err := gui.setInitialContext(); err != nil {
return err
}

if err := g.SetTabClickBinding("branches", gui.onBranchesTabClick); err != nil {
return err
}

return nil
}

Expand Down

0 comments on commit e6be849

Please sign in to comment.