diff options
author | Jesse Duffield <jessedduffield@gmail.com> | 2019-11-17 13:47:47 +1100 |
---|---|---|
committer | Jesse Duffield <jessedduffield@gmail.com> | 2019-11-21 22:07:14 +1100 |
commit | a9cd647075119c760ca22cceba8c4ad14687b732 (patch) | |
tree | c0327f30ec6ab244a14c07003dfce65c135017ee /pkg/gui | |
parent | f0cd730fbb025d5c9068913f5ef11c5082617209 (diff) |
support deleting remote branches
Diffstat (limited to 'pkg/gui')
-rw-r--r-- | pkg/gui/keybindings.go | 8 | ||||
-rw-r--r-- | pkg/gui/remote_branches_panel.go | 17 | ||||
-rw-r--r-- | pkg/gui/remotes_panel.go | 20 |
3 files changed, 43 insertions, 2 deletions
diff --git a/pkg/gui/keybindings.go b/pkg/gui/keybindings.go index 19d2191f5..88e35bc5c 100644 --- a/pkg/gui/keybindings.go +++ b/pkg/gui/keybindings.go @@ -1074,6 +1074,14 @@ func (gui *Gui) GetInitialKeybindings() []*Binding { Description: gui.Tr.SLocalize("mergeIntoCurrentBranch"), }, { + ViewName: "branches", + Contexts: []string{"remote-branches"}, + Key: 'd', + Modifier: gocui.ModNone, + Handler: gui.handleDeleteRemoteBranch, + Description: gui.Tr.SLocalize("deleteBranch"), + }, + { ViewName: "commits", Key: gocui.MouseLeft, Modifier: gocui.ModNone, diff --git a/pkg/gui/remote_branches_panel.go b/pkg/gui/remote_branches_panel.go index b8959e12f..e53e716c5 100644 --- a/pkg/gui/remote_branches_panel.go +++ b/pkg/gui/remote_branches_panel.go @@ -97,3 +97,20 @@ func (gui *Gui) handleMergeRemoteBranch(g *gocui.Gui, v *gocui.View) error { selectedBranchName := gui.getSelectedRemoteBranch().Name return gui.mergeBranchIntoCheckedOutBranch(selectedBranchName) } + +func (gui *Gui) handleDeleteRemoteBranch(g *gocui.Gui, v *gocui.View) error { + remoteBranch := gui.getSelectedRemoteBranch() + if remoteBranch == nil { + return nil + } + message := fmt.Sprintf("%s '%s/%s'?", gui.Tr.SLocalize("DeleteRemoteBranchMessage"), remoteBranch.RemoteName, remoteBranch.Name) + return gui.createConfirmationPanel(g, v, true, gui.Tr.SLocalize("DeleteRemoteBranch"), message, func(*gocui.Gui, *gocui.View) error { + return gui.WithWaitingStatus(gui.Tr.SLocalize("DeletingStatus"), func() error { + if err := gui.GitCommand.DeleteRemoteBranch(remoteBranch.RemoteName, remoteBranch.Name); err != nil { + return err + } + + return gui.refreshRemotes() + }) + }, nil) +} diff --git a/pkg/gui/remotes_panel.go b/pkg/gui/remotes_panel.go index 1402cfd0f..a562202b3 100644 --- a/pkg/gui/remotes_panel.go +++ b/pkg/gui/remotes_panel.go @@ -14,7 +14,7 @@ import ( func (gui *Gui) getSelectedRemote() *commands.Remote { selectedLine := gui.State.Panels.Remotes.SelectedLine - if selectedLine == -1 { + if selectedLine == -1 || len(gui.State.Remotes) == 0 { return nil } @@ -53,6 +53,8 @@ func (gui *Gui) handleRemoteSelect(g *gocui.Gui, v *gocui.View) error { // 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 { + prevSelectedRemote := gui.getSelectedRemote() + remotes, err := gui.GitCommand.GetRemotes() if err != nil { return gui.createErrorPanel(gui.g, err.Error()) @@ -60,8 +62,22 @@ func (gui *Gui) refreshRemotes() error { gui.State.Remotes = remotes - if gui.getBranchesView().Context == "remotes" { + // we need to ensure our selected remote branches aren't now outdated + if prevSelectedRemote != nil && gui.State.RemoteBranches != nil { + // find remote now + for _, remote := range remotes { + if remote.Name == prevSelectedRemote.Name { + gui.State.RemoteBranches = remote.Branches + } + } + } + + // TODO: see if this works for deleting remote branches + switch gui.getBranchesView().Context { + case "remotes": return gui.renderRemotesWithSelection() + case "remote-branches": + return gui.renderRemoteBranchesWithSelection() } return nil |