diff options
author | Jesse Duffield <jessedduffield@gmail.com> | 2018-08-19 21:28:13 +1000 |
---|---|---|
committer | Jesse Duffield <jessedduffield@gmail.com> | 2018-08-19 21:28:13 +1000 |
commit | 4d2346f80ae06ae58dc9083bd1ada50c31e396ac (patch) | |
tree | a459a7b66ae00eebdb4affaa796f7feb3330d65f /pkg/gui/files_panel.go | |
parent | e6712832b502bf893d11d0c891f5ab1b69242fec (diff) |
popup force push confirmation panel if the local branch has diverged from the upstream branch
Diffstat (limited to 'pkg/gui/files_panel.go')
-rw-r--r-- | pkg/gui/files_panel.go | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/pkg/gui/files_panel.go b/pkg/gui/files_panel.go index d614cf5ef..815c65c09 100644 --- a/pkg/gui/files_panel.go +++ b/pkg/gui/files_panel.go @@ -360,21 +360,35 @@ func (gui *Gui) pullFiles(g *gocui.Gui, v *gocui.View) error { return nil } -func (gui *Gui) pushFiles(g *gocui.Gui, v *gocui.View) error { - gui.createMessagePanel(g, v, "", gui.Tr.SLocalize("PushWait")) +func (gui *Gui) pushWithForceFlag(currentView *gocui.View, force bool) error { + if err := gui.createMessagePanel(gui.g, currentView, "", gui.Tr.SLocalize("PushWait")); err != nil { + return err + } go func() { branchName := gui.State.Branches[0].Name - if err := gui.GitCommand.Push(branchName); err != nil { - gui.createErrorPanel(g, err.Error()) + if err := gui.GitCommand.Push(branchName, force); err != nil { + gui.createErrorPanel(gui.g, err.Error()) } else { - gui.closeConfirmationPrompt(g) - gui.refreshCommits(g) - gui.refreshStatus(g) + gui.closeConfirmationPrompt(gui.g) + gui.refreshCommits(gui.g) + gui.refreshStatus(gui.g) } }() return nil } +func (gui *Gui) pushFiles(g *gocui.Gui, v *gocui.View) error { + // if we have pullables we'll ask if the user wants to force push + _, pullables := gui.GitCommand.UpstreamDifferenceCount() + if pullables == "?" || pullables == "0" { + return gui.pushWithForceFlag(v, false) + } + err := gui.createConfirmationPanel(g, nil, gui.Tr.SLocalize("ForcePush"), gui.Tr.SLocalize("ForcePushPrompt"), func(g *gocui.Gui, v *gocui.View) error { + return gui.pushWithForceFlag(v, true) + }, nil) + return err +} + func (gui *Gui) handleSwitchToMerge(g *gocui.Gui, v *gocui.View) error { mergeView, err := g.View("main") if err != nil { |