summaryrefslogtreecommitdiffstats
path: root/pkg/gui/files_panel.go
diff options
context:
space:
mode:
authorJesse Duffield <jessedduffield@gmail.com>2022-01-15 14:20:09 +1100
committerJesse Duffield <jessedduffield@gmail.com>2022-01-15 15:34:01 +1100
commit1c84f7731920e1970d52f81361d321268054e559 (patch)
tree077e68eb695b29fdf911f48a83c654b8bfb72f35 /pkg/gui/files_panel.go
parent8d8bdb948b089250c22f3ac4f549152a209dcdb2 (diff)
always specify upstream when pushing/pulling
Diffstat (limited to 'pkg/gui/files_panel.go')
-rw-r--r--pkg/gui/files_panel.go83
1 files changed, 28 insertions, 55 deletions
diff --git a/pkg/gui/files_panel.go b/pkg/gui/files_panel.go
index d121c8275..4201afb11 100644
--- a/pkg/gui/files_panel.go
+++ b/pkg/gui/files_panel.go
@@ -655,42 +655,40 @@ func (gui *Gui) handlePullFiles() error {
// if we have no upstream branch we need to set that first
if !currentBranch.IsTrackingRemote() {
- // see if we have this branch in our config with an upstream
- branches, err := gui.Git.Config.Branches()
- if err != nil {
- return gui.surfaceError(err)
- }
- for branchName, branch := range branches {
- if branchName == currentBranch.Name {
- return gui.pullFiles(PullFilesOptions{RemoteName: branch.Remote, BranchName: branch.Name, action: action})
- }
- }
-
suggestedRemote := getSuggestedRemote(gui.State.Remotes)
return gui.prompt(promptOpts{
title: gui.Tr.EnterUpstream,
- initialContent: suggestedRemote + "/" + currentBranch.Name,
- findSuggestionsFunc: gui.getRemoteBranchesSuggestionsFunc("/"),
+ initialContent: suggestedRemote + " " + currentBranch.Name,
+ findSuggestionsFunc: gui.getRemoteBranchesSuggestionsFunc(" "),
handleConfirm: func(upstream string) error {
- if err := gui.Git.Branch.SetCurrentBranchUpstream(upstream); err != nil {
+ var upstreamBranch, upstreamRemote string
+ split := strings.Split(upstream, " ")
+ if len(split) != 2 {
+ return gui.createErrorPanel(gui.Tr.InvalidUpstream)
+ }
+
+ upstreamRemote = split[0]
+ upstreamBranch = split[1]
+
+ if err := gui.Git.Branch.SetCurrentBranchUpstream(upstreamRemote, upstreamBranch); err != nil {
errorMessage := err.Error()
if strings.Contains(errorMessage, "does not exist") {
errorMessage = fmt.Sprintf("upstream branch %s not found.\nIf you expect it to exist, you should fetch (with 'f').\nOtherwise, you should push (with 'shift+P')", upstream)
}
return gui.createErrorPanel(errorMessage)
}
- return gui.pullFiles(PullFilesOptions{action: action})
+ return gui.pullFiles(PullFilesOptions{UpstreamRemote: upstreamRemote, UpstreamBranch: upstreamBranch, action: action})
},
})
}
- return gui.pullFiles(PullFilesOptions{action: action})
+ return gui.pullFiles(PullFilesOptions{UpstreamRemote: currentBranch.UpstreamRemote, UpstreamBranch: currentBranch.UpstreamBranch, action: action})
}
type PullFilesOptions struct {
- RemoteName string
- BranchName string
+ UpstreamRemote string
+ UpstreamBranch string
FastForwardOnly bool
action string
}
@@ -714,8 +712,8 @@ func (gui *Gui) pullWithLock(opts PullFilesOptions) error {
err := gui.Git.Sync.Pull(
git_commands.PullOptions{
- RemoteName: opts.RemoteName,
- BranchName: opts.BranchName,
+ RemoteName: opts.UpstreamRemote,
+ BranchName: opts.UpstreamBranch,
FastForwardOnly: opts.FastForwardOnly,
},
)
@@ -782,28 +780,18 @@ func (gui *Gui) pushFiles() error {
}
if currentBranch.IsTrackingRemote() {
+ opts := pushOpts{
+ force: false,
+ upstreamRemote: currentBranch.UpstreamRemote,
+ upstreamBranch: currentBranch.UpstreamBranch,
+ }
if currentBranch.HasCommitsToPull() {
- return gui.requestToForcePush()
+ opts.force = true
+ return gui.requestToForcePush(opts)
} else {
- return gui.push(pushOpts{})
+ return gui.push(opts)
}
} else {
- // see if we have an upstream for this branch in our config
- upstreamRemote, upstreamBranch, err := gui.upstreamForBranchInConfig(currentBranch.Name)
- if err != nil {
- return gui.surfaceError(err)
- }
-
- if upstreamBranch != "" {
- return gui.push(
- pushOpts{
- force: false,
- upstreamRemote: upstreamRemote,
- upstreamBranch: upstreamBranch,
- },
- )
- }
-
suggestedRemote := getSuggestedRemote(gui.State.Remotes)
if gui.Git.Config.GetPushToCurrent() {
@@ -850,7 +838,7 @@ func getSuggestedRemote(remotes []*models.Remote) string {
return remotes[0].Name
}
-func (gui *Gui) requestToForcePush() error {
+func (gui *Gui) requestToForcePush(opts pushOpts) error {
forcePushDisabled := gui.UserConfig.Git.DisableForcePushing
if forcePushDisabled {
return gui.createErrorPanel(gui.Tr.ForcePushDisabled)
@@ -860,26 +848,11 @@ func (gui *Gui) requestToForcePush() error {
title: gui.Tr.ForcePush,
prompt: gui.Tr.ForcePushPrompt,
handleConfirm: func() error {
- return gui.push(pushOpts{force: true})
+ return gui.push(opts)
},
})
}
-func (gui *Gui) upstreamForBranchInConfig(branchName string) (string, string, error) {
- branches, err := gui.Git.Config.Branches()
- if err != nil {
- return "", "", err
- }
-
- for configBranchName, configBranch := range branches {
- if configBranchName == branchName {
- return configBranch.Remote, configBranchName, nil
- }
- }
-
- return "", "", nil
-}
-
func (gui *Gui) switchToMerge() error {
file := gui.getSelectedFile()
if file == nil {