summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRyooooooga <eial5q265e5@gmail.com>2023-03-23 00:11:17 +0900
committerStefan Haller <stefan@haller-berlin.de>2023-05-02 16:27:32 +0200
commit30656b5ac63181bb96d12b2fa2661b608c28c3d5 (patch)
tree60f89aec82618c059d12a34edbe88713bad69286
parent88d4313970783d37f4e27354983b5313c108cd2d (diff)
chore(git_commands): support old git version (`git rebase --empty=keep`)
-rw-r--r--pkg/commands/git_commands/rebase.go10
-rw-r--r--pkg/commands/git_commands/rebase_test.go52
2 files changed, 46 insertions, 16 deletions
diff --git a/pkg/commands/git_commands/rebase.go b/pkg/commands/git_commands/rebase.go
index 50c599a66..e7a2d766a 100644
--- a/pkg/commands/git_commands/rebase.go
+++ b/pkg/commands/git_commands/rebase.go
@@ -181,12 +181,18 @@ func (self *RebaseCommands) PrepareInteractiveRebaseCommand(opts PrepareInteract
debug = "TRUE"
}
+ emptyArg := " --empty=keep"
+ if self.version.IsOlderThan(2, 26, 0) {
+ emptyArg = ""
+ }
+
rebaseMergesArg := " --rebase-merges"
if self.version.IsOlderThan(2, 22, 0) {
rebaseMergesArg = ""
}
- cmdStr := fmt.Sprintf("git rebase --interactive --autostash --keep-empty --empty=keep --no-autosquash%s %s",
- rebaseMergesArg, opts.baseShaOrRoot)
+
+ cmdStr := fmt.Sprintf("git rebase --interactive --autostash --keep-empty%s --no-autosquash%s %s",
+ emptyArg, rebaseMergesArg, opts.baseShaOrRoot)
self.Log.WithField("command", cmdStr).Debug("RunCommand")
cmdObj := self.cmd.New(cmdStr)
diff --git a/pkg/commands/git_commands/rebase_test.go b/pkg/commands/git_commands/rebase_test.go
index 1ef22ff5d..f865468fb 100644
--- a/pkg/commands/git_commands/rebase_test.go
+++ b/pkg/commands/git_commands/rebase_test.go
@@ -16,37 +16,60 @@ import (
func TestRebaseRebaseBranch(t *testing.T) {
type scenario struct {
- testName string
- arg string
- runner *oscommands.FakeCmdObjRunner
- test func(error)
+ testName string
+ arg string
+ gitVersion *GitVersion
+ runner *oscommands.FakeCmdObjRunner
+ test func(error)
}
scenarios := []scenario{
{
- testName: "successful rebase",
- arg: "master",
+ testName: "successful rebase",
+ arg: "master",
+ gitVersion: &GitVersion{2, 26, 0, ""},
runner: oscommands.NewFakeRunner(t).
- Expect(`git rebase --interactive --autostash --keep-empty --empty=keep --no-autosquash master`, "", nil),
+ Expect(`git rebase --interactive --autostash --keep-empty --empty=keep --no-autosquash --rebase-merges master`, "", nil),
test: func(err error) {
assert.NoError(t, err)
},
},
{
- testName: "unsuccessful rebase",
- arg: "master",
+ testName: "unsuccessful rebase",
+ arg: "master",
+ gitVersion: &GitVersion{2, 26, 0, ""},
runner: oscommands.NewFakeRunner(t).
- Expect(`git rebase --interactive --autostash --keep-empty --empty=keep --no-autosquash master`, "", errors.New("error")),
+ Expect(`git rebase --interactive --autostash --keep-empty --empty=keep --no-autosquash --rebase-merges master`, "", errors.New("error")),
test: func(err error) {
assert.Error(t, err)
},
},
+ {
+ testName: "successful rebase (< 2.26.0)",
+ arg: "master",
+ gitVersion: &GitVersion{2, 25, 5, ""},
+ runner: oscommands.NewFakeRunner(t).
+ Expect(`git rebase --interactive --autostash --keep-empty --no-autosquash --rebase-merges master`, "", nil),
+ test: func(err error) {
+ assert.NoError(t, err)
+ },
+ },
+ {
+ testName: "successful rebase (< 2.22.0)",
+ arg: "master",
+ gitVersion: &GitVersion{2, 21, 9, ""},
+ runner: oscommands.NewFakeRunner(t).
+ Expect(`git rebase --interactive --autostash --keep-empty --no-autosquash master`, "", nil),
+ test: func(err error) {
+ assert.NoError(t, err)
+ },
+ },
}
for _, s := range scenarios {
s := s
t.Run(s.testName, func(t *testing.T) {
- instance := buildRebaseCommands(commonDeps{runner: s.runner})
+ instance := buildRebaseCommands(commonDeps{runner: s.runner, gitVersion: s.gitVersion})
s.test(instance.RebaseBranch(s.arg))
})
}
@@ -126,7 +149,7 @@ func TestRebaseDiscardOldFileChanges(t *testing.T) {
commitIndex: 0,
fileName: "test999.txt",
runner: oscommands.NewFakeRunner(t).
- Expect(`git rebase --interactive --autostash --keep-empty --empty=keep --no-autosquash abcdef`, "", nil).
+ Expect(`git rebase --interactive --autostash --keep-empty --empty=keep --no-autosquash --rebase-merges abcdef`, "", nil).
Expect(`git cat-file -e HEAD^:"test999.txt"`, "", nil).
Expect(`git checkout HEAD^ -- "test999.txt"`, "", nil).
Expect(`git commit --amend --no-edit --allow-empty`, "", nil).
@@ -143,8 +166,9 @@ func TestRebaseDiscardOldFileChanges(t *testing.T) {
s := s
t.Run(s.testName, func(t *testing.T) {
instance := buildRebaseCommands(commonDeps{
- runner: s.runner,
- gitConfig: git_config.NewFakeGitConfig(s.gitConfigMockResponses),
+ runner: s.runner,
+ gitVersion: &GitVersion{2, 26, 0, ""},
+ gitConfig: git_config.NewFakeGitConfig(s.gitConfigMockResponses),
})
s.test(instance.DiscardOldFileChanges(s.commits, s.commitIndex, s.fileName))