summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Duffield <jessedduffield@gmail.com>2019-11-11 23:22:09 +1100
committerJesse Duffield <jessedduffield@gmail.com>2019-11-11 23:30:30 +1100
commit12b84307acd67c93122d1fb971effb9700524592 (patch)
tree8ba62a274804a85c78898fa11dd2e6797893b9bc
parent6843741d9e86bee57c96023a0c66e08cd43b3474 (diff)
specify upstream when pushing a branch for the first timev0.10.4
-rw-r--r--pkg/commands/git.go11
-rw-r--r--pkg/commands/git_test.go8
-rw-r--r--pkg/gui/branches_panel.go4
-rw-r--r--pkg/gui/commits_panel.go2
-rw-r--r--pkg/gui/confirmation_panel.go7
-rw-r--r--pkg/gui/files_panel.go24
-rw-r--r--pkg/gui/stash_panel.go2
-rw-r--r--pkg/i18n/dutch.go3
-rw-r--r--pkg/i18n/english.go3
-rw-r--r--pkg/i18n/polish.go3
10 files changed, 46 insertions, 21 deletions
diff --git a/pkg/commands/git.go b/pkg/commands/git.go
index bd834e574..16b09faa7 100644
--- a/pkg/commands/git.go
+++ b/pkg/commands/git.go
@@ -398,13 +398,18 @@ func (c *GitCommand) Pull(ask func(string) string) error {
}
// Push pushes to a branch
-func (c *GitCommand) Push(branchName string, force bool, ask func(string) string) error {
+func (c *GitCommand) Push(branchName string, force bool, upstream string, ask func(string) string) error {
forceFlag := ""
if force {
- forceFlag = "--force-with-lease "
+ forceFlag = "--force-with-lease"
}
- cmd := fmt.Sprintf("git push %s-u origin %s", forceFlag, branchName)
+ setUpstreamArg := ""
+ if upstream != "" {
+ setUpstreamArg = "--set-upstream " + upstream
+ }
+
+ cmd := fmt.Sprintf("git push %s %s", forceFlag, setUpstreamArg)
return c.OSCommand.DetectUnamePass(cmd, ask)
}
diff --git a/pkg/commands/git_test.go b/pkg/commands/git_test.go
index 72328675b..3d5e33998 100644
--- a/pkg/commands/git_test.go
+++ b/pkg/commands/git_test.go
@@ -990,7 +990,7 @@ func TestGitCommandPush(t *testing.T) {
"Push with force disabled",
func(cmd string, args ...string) *exec.Cmd {
assert.EqualValues(t, "git", cmd)
- assert.EqualValues(t, []string{"push", "-u", "origin", "test"}, args)
+ assert.EqualValues(t, []string{"push"}, args)
return exec.Command("echo")
},
@@ -1003,7 +1003,7 @@ func TestGitCommandPush(t *testing.T) {
"Push with force enabled",
func(cmd string, args ...string) *exec.Cmd {
assert.EqualValues(t, "git", cmd)
- assert.EqualValues(t, []string{"push", "--force-with-lease", "-u", "origin", "test"}, args)
+ assert.EqualValues(t, []string{"push", "--force-with-lease"}, args)
return exec.Command("echo")
},
@@ -1016,7 +1016,7 @@ func TestGitCommandPush(t *testing.T) {
"Push with an error occurring",
func(cmd string, args ...string) *exec.Cmd {
assert.EqualValues(t, "git", cmd)
- assert.EqualValues(t, []string{"push", "-u", "origin", "test"}, args)
+ assert.EqualValues(t, []string{"push"}, args)
return exec.Command("test")
},
false,
@@ -1030,7 +1030,7 @@ func TestGitCommandPush(t *testing.T) {
t.Run(s.testName, func(t *testing.T) {
gitCmd := NewDummyGitCommand()
gitCmd.OSCommand.command = s.command
- err := gitCmd.Push("test", s.forcePush, func(passOrUname string) string {
+ err := gitCmd.Push("test", s.forcePush, "", func(passOrUname string) string {
return "\n"
})
s.test(err)
diff --git a/pkg/gui/branches_panel.go b/pkg/gui/branches_panel.go
index 5cf440909..23aa17a26 100644
--- a/pkg/gui/branches_panel.go
+++ b/pkg/gui/branches_panel.go
@@ -207,7 +207,7 @@ func (gui *Gui) handleCheckoutBranch(branchName string) error {
}
func (gui *Gui) handleCheckoutByName(g *gocui.Gui, v *gocui.View) error {
- gui.createPromptPanel(g, v, gui.Tr.SLocalize("BranchName")+":", func(g *gocui.Gui, v *gocui.View) error {
+ gui.createPromptPanel(g, v, gui.Tr.SLocalize("BranchName")+":", "", func(g *gocui.Gui, v *gocui.View) error {
return gui.handleCheckoutBranch(gui.trimmedContent(v))
})
return nil
@@ -221,7 +221,7 @@ func (gui *Gui) handleNewBranch(g *gocui.Gui, v *gocui.View) error {
"branchName": branch.Name,
},
)
- gui.createPromptPanel(g, v, message, func(g *gocui.Gui, v *gocui.View) error {
+ gui.createPromptPanel(g, v, message, "", func(g *gocui.Gui, v *gocui.View) error {
if err := gui.GitCommand.NewBranch(gui.trimmedContent(v)); err != nil {
return gui.createErrorPanel(g, err.Error())
}
diff --git a/pkg/gui/commits_panel.go b/pkg/gui/commits_panel.go
index d58e89ebf..a20c52f45 100644
--- a/pkg/gui/commits_panel.go
+++ b/pkg/gui/commits_panel.go
@@ -237,7 +237,7 @@ func (gui *Gui) handleRenameCommit(g *gocui.Gui, v *gocui.View) error {
if gui.State.Panels.Commits.SelectedLine != 0 {
return gui.createErrorPanel(g, gui.Tr.SLocalize("OnlyRenameTopCommit"))
}
- return gui.createPromptPanel(g, v, gui.Tr.SLocalize("renameCommit"), func(g *gocui.Gui, v *gocui.View) error {
+ return gui.createPromptPanel(g, v, gui.Tr.SLocalize("renameCommit"), "", func(g *gocui.Gui, v *gocui.View) error {
if err := gui.GitCommand.RenameCommit(v.Buffer()); err != nil {
return gui.createErrorPanel(g, err.Error())
}
diff --git a/pkg/gui/confirmation_panel.go b/pkg/gui/confirmation_panel.go
index 6913400a1..f9e2dbfbd 100644
--- a/pkg/gui/confirmation_panel.go
+++ b/pkg/gui/confirmation_panel.go
@@ -64,13 +64,16 @@ func (gui *Gui) getConfirmationPanelDimensions(g *gocui.Gui, wrap bool, prompt s
height/2 + panelHeight/2
}
-func (gui *Gui) createPromptPanel(g *gocui.Gui, currentView *gocui.View, title string, handleConfirm func(*gocui.Gui, *gocui.View) error) error {
+func (gui *Gui) createPromptPanel(g *gocui.Gui, currentView *gocui.View, title string, initialContent string, handleConfirm func(*gocui.Gui, *gocui.View) error) error {
gui.onNewPopupPanel()
- confirmationView, err := gui.prepareConfirmationPanel(currentView, title, "", false)
+ confirmationView, err := gui.prepareConfirmationPanel(currentView, title, initialContent, false)
if err != nil {
return err
}
confirmationView.Editable = true
+ if err := gui.renderString(g, "confirmation", initialContent); err != nil {
+ return err
+ }
// in the future we might want to give createPromptPanel the returnFocusOnClose arg too, but for now we're always setting it to true
return gui.setKeyBindings(g, handleConfirm, nil, true)
}
diff --git a/pkg/gui/files_panel.go b/pkg/gui/files_panel.go
index ba5c56db2..034860115 100644
--- a/pkg/gui/files_panel.go
+++ b/pkg/gui/files_panel.go
@@ -424,14 +424,14 @@ func (gui *Gui) pullFiles(g *gocui.Gui, v *gocui.View) error {
return nil
}
-func (gui *Gui) pushWithForceFlag(g *gocui.Gui, v *gocui.View, force bool) error {
+func (gui *Gui) pushWithForceFlag(g *gocui.Gui, v *gocui.View, force bool, upstream string) error {
if err := gui.createLoaderPanel(gui.g, v, gui.Tr.SLocalize("PushWait")); err != nil {
return err
}
go func() {
unamePassOpend := false
branchName := gui.State.Branches[0].Name
- err := gui.GitCommand.Push(branchName, force, func(passOrUname string) string {
+ err := gui.GitCommand.Push(branchName, force, upstream, func(passOrUname string) string {
unamePassOpend = true
return gui.waitForPassUname(g, v, passOrUname)
})
@@ -443,13 +443,21 @@ func (gui *Gui) pushWithForceFlag(g *gocui.Gui, v *gocui.View, force bool) error
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.GetCurrentBranchUpstreamDifferenceCount()
- if pullables == "?" || pullables == "0" {
- return gui.pushWithForceFlag(g, v, false)
+ currentBranchName, err := gui.GitCommand.CurrentBranchName()
+ if err != nil {
+ return err
+ }
+
+ if pullables == "?" {
+ return gui.createPromptPanel(g, v, gui.Tr.SLocalize("EnterUpstream"), "origin "+currentBranchName, func(g *gocui.Gui, v *gocui.View) error {
+ return gui.pushWithForceFlag(g, v, false, gui.trimmedContent(v))
+ })
+ } else if pullables == "0" {
+ return gui.pushWithForceFlag(g, v, false, "")
}
- err := gui.createConfirmationPanel(g, nil, true, gui.Tr.SLocalize("ForcePush"), gui.Tr.SLocalize("ForcePushPrompt"), func(g *gocui.Gui, v *gocui.View) error {
- return gui.pushWithForceFlag(g, v, true)
+ return gui.createConfirmationPanel(g, nil, true, gui.Tr.SLocalize("ForcePush"), gui.Tr.SLocalize("ForcePushPrompt"), func(g *gocui.Gui, v *gocui.View) error {
+ return gui.pushWithForceFlag(g, v, true, "")
}, nil)
- return err
}
func (gui *Gui) handleSwitchToMerge(g *gocui.Gui, v *gocui.View) error {
@@ -626,7 +634,7 @@ func (gui *Gui) handleCreateResetMenu(g *gocui.Gui, v *gocui.View) error {
}
func (gui *Gui) handleCustomCommand(g *gocui.Gui, v *gocui.View) error {
- return gui.createPromptPanel(g, v, gui.Tr.SLocalize("CustomCommand"), func(g *gocui.Gui, v *gocui.View) error {
+ return gui.createPromptPanel(g, v, gui.Tr.SLocalize("CustomCommand"), "", func(g *gocui.Gui, v *gocui.View) error {
command := gui.trimmedContent(v)
gui.SubProcess = gui.OSCommand.RunCustomCommand(command)
return gui.Errors.ErrSubProcess
diff --git a/pkg/gui/stash_panel.go b/pkg/gui/stash_panel.go
index 4ed35489d..055a4773d 100644
--- a/pkg/gui/stash_panel.go
+++ b/pkg/gui/stash_panel.go
@@ -139,7 +139,7 @@ func (gui *Gui) handleStashSave(stashFunc func(message string) error) error {
if len(gui.trackedFiles()) == 0 && len(gui.stagedFiles()) == 0 {
return gui.createErrorPanel(gui.g, gui.Tr.SLocalize("NoTrackedStagedFilesStash"))
}
- return gui.createPromptPanel(gui.g, gui.getFilesView(), gui.Tr.SLocalize("StashChanges"), func(g *gocui.Gui, v *gocui.View) error {
+ return gui.createPromptPanel(gui.g, gui.getFilesView(), gui.Tr.SLocalize("StashChanges"), "", func(g *gocui.Gui, v *gocui.View) error {
if err := stashFunc(gui.trimmedContent(v)); err != nil {
gui.createErrorPanel(g, err.Error())
}
diff --git a/pkg/i18n/dutch.go b/pkg/i18n/dutch.go
index b68acf54f..f11ce7342 100644
--- a/pkg/i18n/dutch.go
+++ b/pkg/i18n/dutch.go
@@ -757,6 +757,9 @@ func addDutch(i18nObject *i18n.Bundle) error {
}, &i18n.Message{
ID: "ExitLineByLineMode",
Other: `exit line-by-line mode`,
+ }, &i18n.Message{
+ ID: "EnterUpstream",
+ Other: `Enter upstream as '<remote> <branchname>'`,
},
)
}
diff --git a/pkg/i18n/english.go b/pkg/i18n/english.go
index 96880cc7d..347253236 100644
--- a/pkg/i18n/english.go
+++ b/pkg/i18n/english.go
@@ -834,6 +834,9 @@ func addEnglish(i18nObject *i18n.Bundle) error {
}, &i18n.Message{
ID: "ExitLineByLineMode",
Other: `exit line-by-line mode`,
+ }, &i18n.Message{
+ ID: "EnterUpstream",
+ Other: `Enter upstream as '<remote> <branchname>'`,
},
)
}
diff --git a/pkg/i18n/polish.go b/pkg/i18n/polish.go
index 8100cb6ba..3bd6e93f0 100644
--- a/pkg/i18n/polish.go
+++ b/pkg/i18n/polish.go
@@ -740,6 +740,9 @@ func addPolish(i18nObject *i18n.Bundle) error {
}, &i18n.Message{
ID: "ExitLineByLineMode",
Other: `exit line-by-line mode`,
+ }, &i18n.Message{
+ ID: "EnterUpstream",
+ Other: `Enter upstream as '<remote> <branchname>'`,
},
)
}