mirror of
https://github.com/jesseduffield/lazygit.git
synced 2024-12-12 11:15:00 +02:00
85 lines
2.2 KiB
Go
85 lines
2.2 KiB
Go
package gui
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"github.com/fatih/color"
|
|
"github.com/jesseduffield/gocui"
|
|
"github.com/jesseduffield/lazygit/pkg/commands"
|
|
"github.com/jesseduffield/lazygit/pkg/utils"
|
|
)
|
|
|
|
// list panel functions
|
|
|
|
func (gui *Gui) getSelectedRemote() *commands.Remote {
|
|
selectedLine := gui.State.Panels.Remotes.SelectedLine
|
|
if selectedLine == -1 {
|
|
return nil
|
|
}
|
|
|
|
return gui.State.Remotes[selectedLine]
|
|
}
|
|
|
|
func (gui *Gui) handleRemotesClick(g *gocui.Gui, v *gocui.View) error {
|
|
itemCount := len(gui.State.Remotes)
|
|
handleSelect := gui.handleRemoteSelect
|
|
selectedLine := &gui.State.Panels.Remotes.SelectedLine
|
|
|
|
return gui.handleClick(v, itemCount, selectedLine, handleSelect)
|
|
}
|
|
|
|
func (gui *Gui) handleRemoteSelect(g *gocui.Gui, v *gocui.View) error {
|
|
if gui.popupPanelFocused() {
|
|
return nil
|
|
}
|
|
|
|
gui.State.SplitMainPanel = false
|
|
|
|
if _, err := gui.g.SetCurrentView(v.Name()); err != nil {
|
|
return err
|
|
}
|
|
|
|
gui.getMainView().Title = "Remote"
|
|
|
|
remote := gui.getSelectedRemote()
|
|
if err := gui.focusPoint(0, gui.State.Panels.Remotes.SelectedLine, len(gui.State.Remotes), v); err != nil {
|
|
return err
|
|
}
|
|
|
|
return gui.renderString(g, "main", fmt.Sprintf("%s\nUrls:\n%s", utils.ColoredString(remote.Name, color.FgGreen), strings.Join(remote.Urls, "\n")))
|
|
}
|
|
|
|
// gui.refreshStatus is called at the end of this because that's when we can
|
|
// be sure there is a state.Remotes array to pick the current remote 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
|
|
}
|
|
|
|
func (gui *Gui) handleRemoteEnter(g *gocui.Gui, v *gocui.View) error {
|
|
// naive implementation: get the branches and render them to the list, change the context
|
|
remote := gui.getSelectedRemote()
|
|
|
|
gui.State.RemoteBranches = remote.Branches
|
|
|
|
newSelectedLine := 0
|
|
if len(remote.Branches) == 0 {
|
|
newSelectedLine = -1
|
|
}
|
|
gui.State.Panels.RemoteBranches.SelectedLine = newSelectedLine
|
|
|
|
return gui.switchBranchesPanelContext("remote-branches")
|
|
}
|