From 30656b5ac63181bb96d12b2fa2661b608c28c3d5 Mon Sep 17 00:00:00 2001 From: Ryooooooga Date: Thu, 23 Mar 2023 00:11:17 +0900 Subject: chore(git_commands): support old git version (`git rebase --empty=keep`) --- pkg/commands/git_commands/rebase.go | 10 ++++-- pkg/commands/git_commands/rebase_test.go | 52 +++++++++++++++++++++++--------- 2 files changed, 46 insertions(+), 16 deletions(-) (limited to 'pkg/commands/git_commands') 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)) -- cgit v1.2.3