diff --git a/pkg/commands/git_commands/sync.go b/pkg/commands/git_commands/sync.go index 31561455a..1c93fc260 100644 --- a/pkg/commands/git_commands/sync.go +++ b/pkg/commands/git_commands/sync.go @@ -18,6 +18,7 @@ func NewSyncCommands(gitCommon *GitCommon) *SyncCommands { // Push pushes to a branch type PushOpts struct { + Force bool ForceWithLease bool UpstreamRemote string UpstreamBranch string @@ -30,6 +31,7 @@ func (self *SyncCommands) PushCmdObj(task gocui.Task, opts PushOpts) (oscommands } cmdArgs := NewGitCmd("push"). + ArgIf(opts.Force, "--force"). ArgIf(opts.ForceWithLease, "--force-with-lease"). ArgIf(opts.SetUpstream, "--set-upstream"). ArgIf(opts.UpstreamRemote != "", opts.UpstreamRemote). diff --git a/pkg/commands/git_commands/sync_test.go b/pkg/commands/git_commands/sync_test.go index f1f76415d..6ff8da840 100644 --- a/pkg/commands/git_commands/sync_test.go +++ b/pkg/commands/git_commands/sync_test.go @@ -32,6 +32,14 @@ func TestSyncPush(t *testing.T) { assert.NoError(t, err) }, }, + { + testName: "Push with force enabled", + opts: PushOpts{Force: true}, + test: func(cmdObj oscommands.ICmdObj, err error) { + assert.Equal(t, cmdObj.Args(), []string{"git", "push", "--force"}) + assert.NoError(t, err) + }, + }, { testName: "Push with force disabled, upstream supplied", opts: PushOpts{ diff --git a/pkg/gui/controllers/sync_controller.go b/pkg/gui/controllers/sync_controller.go index d94a49bb1..8c7334031 100644 --- a/pkg/gui/controllers/sync_controller.go +++ b/pkg/gui/controllers/sync_controller.go @@ -179,6 +179,7 @@ func (self *SyncController) pullWithLock(task gocui.Task, opts PullFilesOptions) } type pushOpts struct { + force bool forceWithLease bool upstreamRemote string upstreamBranch string @@ -197,13 +198,14 @@ func (self *SyncController) pushAux(currentBranch *models.Branch, opts pushOpts) err := self.c.Git().Sync.Push( task, git_commands.PushOpts{ + Force: opts.force, ForceWithLease: opts.forceWithLease, UpstreamRemote: opts.upstreamRemote, UpstreamBranch: opts.upstreamBranch, SetUpstream: opts.setUpstream, }) if err != nil { - if !opts.forceWithLease && strings.Contains(err.Error(), "Updates were rejected") { + if !opts.force && !opts.forceWithLease && strings.Contains(err.Error(), "Updates were rejected") { if opts.remoteBranchStoredLocally { return errors.New(self.c.Tr.UpdatesRejected) } @@ -217,7 +219,7 @@ func (self *SyncController) pushAux(currentBranch *models.Branch, opts pushOpts) Prompt: self.forcePushPrompt(), HandleConfirm: func() error { newOpts := opts - newOpts.forceWithLease = true + newOpts.force = true return self.pushAux(currentBranch, newOpts) },