Re: git 2.24: git revert <commit1> <commit2> requires extra '--continue'?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Brian & Gábor

Thanks to Brian for reporting this and Gábor for bisecting and creating the tests.

On 23/11/2019 00:34, SZEDER Gábor wrote:
On Fri, Nov 22, 2019 at 03:10:20PM -0800, Brian Norris wrote:
Hi! I'm using git 2.24 (or, a variant of that packaged my distro -- I
can try to build my own if this is deemed not reproducible), and I
feel like I've been seeing a regression here:

Previously, when reverting multiple commits (with the default --edit
behavior), as soon as I'm done editing the first revert commit
message, the second revert commit pops up an editor, and I'm on my
way. Now, it seems to require an extra 'git revert --continue' prompt
in between, yet it doesn't actually recommend that. This is highly
confusing, and seemingly unnecessary.

Thanks for the report, this is indeed a regression in v2.24.0: it
bisects down to a47ba3c777 (rebase -i: check for updated todo after
squash and reword, 2019-08-19) [Cc'ing Phillip].  It's not specific to
'git revert', but with a slight variation affects 'git cherry-pick' as
well.

Thanks, I suspect it's missing an 'if (is_rebase_i(opts))' I'll take a look later and come up with a fix

Best Wishes

Phillip

An annotated transcript provided below.

I transcribed your transcript into tests that can be run in our test
framework and demonstrate this regression:

   --- >8 ---

#!/bin/sh

test_description='test'

. ./test-lib.sh

test_expect_success "Brian's revert regression" '
	test_create_repo revert &&
	(
		cd revert &&

		echo 1 >file &&
		git add file &&
		git commit -m first &&
		echo 2 >file &&
		git commit -am second &&
		echo 3 >file &&
		git commit -am third &&

		git checkout -b branch &&

		git revert --edit HEAD HEAD^ &&

		echo 1 >expect &&
		test_cmp expect file
	)
'

test_expect_success "a variant of Brian's regression for cherry-pick" '
	test_create_repo cherry-pick &&
	(
		cd cherry-pick &&

		echo 1 >file &&
		git add file &&
		git commit -m first &&
		echo 2 >file &&
		git commit -am second &&
		echo 3 >file &&
		git commit -am third &&

		git checkout -b branch HEAD^^ &&

		git cherry-pick --edit master^ master &&

		echo 3 >expect &&
		test_cmp expect file
	)
'

test_done

   ---  >8  ---

They both succeed on a47ba3c777's parent, but fail on a47ba3c777 when
the 'git revert' or 'git cherry-pick' commands return with exit code 1
after reverting/cherry-picking the first commit instead of processing
the second commit:

   + git revert --edit HEAD HEAD^
   [branch 88ea48c] Revert "third"
    Author: A U Thor <author@xxxxxxxxxxx>
    1 file changed, 1 insertion(+), 1 deletion(-)
   On branch branch
   Revert currently in progress.
nothing to commit, working tree clean
   error: last command exited with $?=1
   not ok 1 - Brian's revert regression



   + git cherry-pick --edit master^ master
   [branch 2cb3f74] second
    Author: A U Thor <author@xxxxxxxxxxx>
    Date: Sat Nov 23 00:17:32 2019 +0000
    1 file changed, 1 insertion(+), 1 deletion(-)
   On branch branch
   Cherry-pick currently in progress.
nothing to commit, working tree clean
   The previous cherry-pick is now empty, possibly due to conflict
   resolution.
   If you wish to commit it anyway, use:
git commit --allow-empty If you wish to skip this commit, use: git reset Then "git cherry-pick --continue" will resume cherry-picking
   the remaining commits.
   error: last command exited with $?=1
   not ok 2 - a variant of Brian's regression for cherry-pick


These test should probably be squeezed into
't3508-cherry-pick-many-commits.sh', but Friday has just turned into
Saturday around here, so that's enough from me for now.


Note that none of this happens with --no-edit; my reverts happen
smoothly, with no extra need for --continue.

Regards,
Brian

$ mkdir tmp
$ cd tmp
/tmp$ git init
Initialized empty Git repository in [...]/tmp/.git/
/tmp$ touch foo
/tmp$ git add foo
/tmp$ echo bar >> foo
/tmp$ git commit -am baz
[master (root-commit) a388f78d9013] baz
  1 file changed, 1 insertion(+)
  create mode 100644 foo
/tmp$ echo pow >> foo
/tmp$ git commit -am whizzbang
[master 51753222dd9a] whizzbang
  1 file changed, 1 insertion(+)
/tmp$ echo pop >> foo
/tmp$ git commit -am nothing
[master 7153607b11e0] nothing
  1 file changed, 1 insertion(+)
/tmp$ git revert HEAD HEAD^
## EDITOR pops up, as expected
[master 586469974ec2] Revert "nothing"
  1 file changed, 1 deletion(-)
On branch master
Revert currently in progress.

nothing to commit, working tree clean
## Unexpected, confusing pause? No prompt to '--continue'
/tmp$ git log --oneline
586469974ec2 (HEAD -> master) Revert "nothing"
7153607b11e0 nothing
51753222dd9a whizzbang
a388f78d9013 baz
/tmp$ git status
On branch master
Revert currently in progress.
   (run "git revert --continue" to continue)
   (use "git revert --skip" to skip this patch)
   (use "git revert --abort" to cancel the revert operation)

nothing to commit, working tree clean
/tmp$ git revert --continue
## EDITOR pops up, as expected
[master b8dd23f61d07] Revert "whizzbang"
  1 file changed, 1 deletion(-)
On branch master
Revert currently in progress.

nothing to commit, working tree clean
## Unexpected state; both reverts happened, but revert is still in progress?
/tmp$ git log --oneline
b8dd23f61d07 (HEAD -> master) Revert "whizzbang"
586469974ec2 Revert "nothing"
7153607b11e0 nothing
51753222dd9a whizzbang
a388f78d9013 baz
/tmp$ git status
On branch master
Revert currently in progress.
   (run "git revert --continue" to continue)
   (use "git revert --skip" to skip this patch)
   (use "git revert --abort" to cancel the revert operation)

nothing to commit, working tree clean
## OK...I'll run it one more time.
/tmp$ git revert --continue
/tmp$ git status
On branch master
nothing to commit, working tree clean
## *Now* I'm done
/tmp$ git log --oneline
b8dd23f61d07 (HEAD -> master) Revert "whizzbang"
586469974ec2 Revert "nothing"
7153607b11e0 nothing
51753222dd9a whizzbang
a388f78d9013 baz



[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux