mirror of
https://github.com/jesseduffield/lazygit.git
synced 2025-05-13 05:15:53 +02:00
feat: support for push --force-if-includes
This commit is contained in:
parent
cd9111837e
commit
e00f248cf7
3 changed files with 42 additions and 2 deletions
|
@ -15,6 +15,7 @@ import (
|
||||||
type commonDeps struct {
|
type commonDeps struct {
|
||||||
runner *oscommands.FakeCmdObjRunner
|
runner *oscommands.FakeCmdObjRunner
|
||||||
userConfig *config.UserConfig
|
userConfig *config.UserConfig
|
||||||
|
gitVersion *GitVersion
|
||||||
gitConfig *git_config.FakeGitConfig
|
gitConfig *git_config.FakeGitConfig
|
||||||
getenv func(string) string
|
getenv func(string) string
|
||||||
removeFile func(string) error
|
removeFile func(string) error
|
||||||
|
@ -48,6 +49,11 @@ func buildGitCommon(deps commonDeps) *GitCommon {
|
||||||
gitCommon.Common.UserConfig = config.GetDefaultConfig()
|
gitCommon.Common.UserConfig = config.GetDefaultConfig()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gitCommon.version = deps.gitVersion
|
||||||
|
if gitCommon.version == nil {
|
||||||
|
gitCommon.version = &GitVersion{2, 0, 0, ""}
|
||||||
|
}
|
||||||
|
|
||||||
gitConfig := deps.gitConfig
|
gitConfig := deps.gitConfig
|
||||||
if gitConfig == nil {
|
if gitConfig == nil {
|
||||||
gitConfig = git_config.NewFakeGitConfig(nil)
|
gitConfig = git_config.NewFakeGitConfig(nil)
|
||||||
|
|
|
@ -29,7 +29,11 @@ func (self *SyncCommands) PushCmdObj(opts PushOpts) (oscommands.ICmdObj, error)
|
||||||
cmdStr := "git push"
|
cmdStr := "git push"
|
||||||
|
|
||||||
if opts.Force {
|
if opts.Force {
|
||||||
cmdStr += " --force-with-lease"
|
if self.version.IsOlderThan(2, 30, 0) {
|
||||||
|
cmdStr += " --force-with-lease"
|
||||||
|
} else {
|
||||||
|
cmdStr += " --force-with-lease --force-if-includes"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if opts.SetUpstream {
|
if opts.SetUpstream {
|
||||||
|
|
|
@ -10,6 +10,7 @@ import (
|
||||||
func TestSyncPush(t *testing.T) {
|
func TestSyncPush(t *testing.T) {
|
||||||
type scenario struct {
|
type scenario struct {
|
||||||
testName string
|
testName string
|
||||||
|
version *GitVersion
|
||||||
opts PushOpts
|
opts PushOpts
|
||||||
test func(oscommands.ICmdObj, error)
|
test func(oscommands.ICmdObj, error)
|
||||||
}
|
}
|
||||||
|
@ -17,6 +18,7 @@ func TestSyncPush(t *testing.T) {
|
||||||
scenarios := []scenario{
|
scenarios := []scenario{
|
||||||
{
|
{
|
||||||
testName: "Push with force disabled",
|
testName: "Push with force disabled",
|
||||||
|
version: &GitVersion{2, 29, 3, ""},
|
||||||
opts: PushOpts{Force: false},
|
opts: PushOpts{Force: false},
|
||||||
test: func(cmdObj oscommands.ICmdObj, err error) {
|
test: func(cmdObj oscommands.ICmdObj, err error) {
|
||||||
assert.Equal(t, cmdObj.ToString(), "git push")
|
assert.Equal(t, cmdObj.ToString(), "git push")
|
||||||
|
@ -25,14 +27,25 @@ func TestSyncPush(t *testing.T) {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
testName: "Push with force enabled",
|
testName: "Push with force enabled",
|
||||||
|
version: &GitVersion{2, 29, 3, ""},
|
||||||
opts: PushOpts{Force: true},
|
opts: PushOpts{Force: true},
|
||||||
test: func(cmdObj oscommands.ICmdObj, err error) {
|
test: func(cmdObj oscommands.ICmdObj, err error) {
|
||||||
assert.Equal(t, cmdObj.ToString(), "git push --force-with-lease")
|
assert.Equal(t, cmdObj.ToString(), "git push --force-with-lease")
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
testName: "Push with force enabled (>= 2.30.0)",
|
||||||
|
version: &GitVersion{2, 30, 0, ""},
|
||||||
|
opts: PushOpts{Force: true},
|
||||||
|
test: func(cmdObj oscommands.ICmdObj, err error) {
|
||||||
|
assert.Equal(t, cmdObj.ToString(), "git push --force-with-lease --force-if-includes")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
testName: "Push with force disabled, upstream supplied",
|
testName: "Push with force disabled, upstream supplied",
|
||||||
|
version: &GitVersion{2, 29, 3, ""},
|
||||||
opts: PushOpts{
|
opts: PushOpts{
|
||||||
Force: false,
|
Force: false,
|
||||||
UpstreamRemote: "origin",
|
UpstreamRemote: "origin",
|
||||||
|
@ -45,6 +58,7 @@ func TestSyncPush(t *testing.T) {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
testName: "Push with force disabled, setting upstream",
|
testName: "Push with force disabled, setting upstream",
|
||||||
|
version: &GitVersion{2, 29, 3, ""},
|
||||||
opts: PushOpts{
|
opts: PushOpts{
|
||||||
Force: false,
|
Force: false,
|
||||||
UpstreamRemote: "origin",
|
UpstreamRemote: "origin",
|
||||||
|
@ -58,6 +72,7 @@ func TestSyncPush(t *testing.T) {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
testName: "Push with force enabled, setting upstream",
|
testName: "Push with force enabled, setting upstream",
|
||||||
|
version: &GitVersion{2, 29, 3, ""},
|
||||||
opts: PushOpts{
|
opts: PushOpts{
|
||||||
Force: true,
|
Force: true,
|
||||||
UpstreamRemote: "origin",
|
UpstreamRemote: "origin",
|
||||||
|
@ -69,8 +84,23 @@ func TestSyncPush(t *testing.T) {
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
testName: "Push with force enabled, setting upstream (>= 2.30.0)",
|
||||||
|
version: &GitVersion{2, 30, 0, ""},
|
||||||
|
opts: PushOpts{
|
||||||
|
Force: true,
|
||||||
|
UpstreamRemote: "origin",
|
||||||
|
UpstreamBranch: "master",
|
||||||
|
SetUpstream: true,
|
||||||
|
},
|
||||||
|
test: func(cmdObj oscommands.ICmdObj, err error) {
|
||||||
|
assert.Equal(t, cmdObj.ToString(), `git push --force-with-lease --force-if-includes --set-upstream "origin" "master"`)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
testName: "Push with remote branch but no origin",
|
testName: "Push with remote branch but no origin",
|
||||||
|
version: &GitVersion{2, 29, 3, ""},
|
||||||
opts: PushOpts{
|
opts: PushOpts{
|
||||||
Force: true,
|
Force: true,
|
||||||
UpstreamRemote: "",
|
UpstreamRemote: "",
|
||||||
|
@ -87,7 +117,7 @@ func TestSyncPush(t *testing.T) {
|
||||||
for _, s := range scenarios {
|
for _, s := range scenarios {
|
||||||
s := s
|
s := s
|
||||||
t.Run(s.testName, func(t *testing.T) {
|
t.Run(s.testName, func(t *testing.T) {
|
||||||
instance := buildSyncCommands(commonDeps{})
|
instance := buildSyncCommands(commonDeps{gitVersion: s.version})
|
||||||
s.test(instance.PushCmdObj(s.opts))
|
s.test(instance.PushCmdObj(s.opts))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue