Thread (1 message) 1 message, 1 author, 2020-10-13

Re: [PATCH] sequencer: fix gpg option passed to octopus merge

From: Junio C Hamano <hidden>
Date: 2020-10-13 04:45:27

Johannes Schindelin [off-list ref] writes:
quoted
Puzzling.  Why do you single out octopus merge like this?

sequencer.c::do_merge() is called from pick_commits() whenever we
see a "merge" insn, and not limited to an octopus merge.

Can we have a test to demonstrate the existing failure, so that we
can notice if this fix is broken in the future?
Yes, now that I understand that not only octopus merges are affected, I
would be very much in favor of adding a test case.
Ah, I see why the initial description was focused on octopus.  The
code special cases the two-parent merge using the recursive strategy
and uses completely separate codepath for it, which does not have
this problem but the codepath that handles octopus merges and merges
with the non-default strategy have the problem.
If I may suggest to add a new test case to t3435 based on t3430's
'--rebase-merges with strategies' and t3404's 'rebase -i
--gpg-sign=<key-id>'? Something along these lines:
In addition, a test that passes --no-gpg-sign from the command line, 
because commit.gpgsign is set in the repository used in these tests,
would be necessary---we want to make sure the command line overrides
the configured default (which is the topic of [patch 2/1]).
quoted hunk
-- snipsnap --
diff --git a/sequencer.c b/sequencer.c
index 00acb124962..88ccff4838d 100644
--- a/sequencer.c
+++ b/sequencer.c
@@ -3677,7 +3677,7 @@ static int do_merge(struct repository *r,
 		strvec_push(&cmd.args, "-F");
 		strvec_push(&cmd.args, git_path_merge_msg(r));
 		if (opts->gpg_sign)
-			strvec_push(&cmd.args, opts->gpg_sign);
+			strvec_pushf(&cmd.args, "-S%s", opts->gpg_sign);

 		/* Add the tips to be merged */
 		for (j = to_merge; j; j = j->next)
diff --git a/t/t3435-rebase-gpg-sign.sh b/t/t3435-rebase-gpg-sign.sh
index b47c59c190b..f70b280f5c1 100755
--- a/t/t3435-rebase-gpg-sign.sh
+++ b/t/t3435-rebase-gpg-sign.sh
@@ -68,4 +68,10 @@ test_expect_failure 'rebase -p --no-gpg-sign override commit.gpgsign' '
 	test_must_fail git verify-commit HEAD
 '

+test_expect_success 'rebase -r, GPG and merge strategies' '
+	git reset --hard merged &&
+	git rebase -fr --gpg-sign -s resolve --root &&
+	git verify-commit HEAD
+'
+
 test_done
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help