Subject: Re: [PATCH 2/2] format-patch: handle range-diff on notes correctly for single patches

From: Junio C Hamano <[email-masked]>
Date: Mon, 22 Sep 2025 15:01:25 -0700

[email-masked] writes:

> From: Kristoffer Haugsbakk <[email-masked]>
>
> No `--[no-]notes` options are sent to the range-diff subprocess in
> `range-diff.c` when making a single patch.  This means that you can get
> different Git notes below the commit message and in the range-diff
> part.  (See the previous commit for elaboration.)

Would this also mean "range-diff --no-notes" would not have any
effect in squelching the note output in such a mode?  If so, perhaps
we should say not just "can get different Git notes" but "can get
notes even when you asked not to"?

> @@ -718,7 +718,8 @@ static void show_diff_of_diff(struct rev_info *opt)
>  			.creation_factor = opt->creation_factor,
>  			.dual_color = 1,
>  			.max_memory = RANGE_DIFF_MAX_MEMORY_DEFAULT,
> -			.diffopt = &opts
> +			.diffopt = &opts,
> +			.other_arg = &opt->rdiff_other_arg
>  		};
>  
>  		memcpy(&dq, &diff_queued_diff, sizeof(diff_queued_diff));
> diff --git a/t/t3206-range-diff.sh b/t/t3206-range-diff.sh
> index e091df6d01d..1e812df806b 100755
> --- a/t/t3206-range-diff.sh
> +++ b/t/t3206-range-diff.sh
> @@ -707,7 +707,7 @@ test_expect_success 'format-patch --range-diff does not compare notes by default
>  	! grep "note" 0000-*
>  '
>  
> -test_expect_success 'format-patch --notes=custom --range-diff only compares custom notes' '
> +test_expect_success 'format-patch --notes=custom --range-diff --cover-letter only compares custom notes' '
>  	test_when_finished "git notes remove topic unmodified || :" &&
>  	git notes add -m "topic note" topic &&
>  	git notes add -m "unmodified note" unmodified &&
> @@ -721,6 +721,20 @@ test_expect_success 'format-patch --notes=custom --range-diff only compares cust
>  	! grep "## Notes ##" 0000-*
>  '
>  
> +# --range-diff on a single commit requires --no-cover-letter
> +test_expect_success 'format-patch --notes=custom --range-diff on single commit only compares custom notes' '
> +	test_when_finished "git notes remove HEAD unmodified || :" &&
> +	git notes add -m "topic note" HEAD &&
> +	test_when_finished "git notes --ref=custom remove HEAD unmodified || :" &&
> +	git notes add -m "unmodified note" unmodified &&
> +	git notes --ref=custom add -m "topic note (custom)" HEAD &&
> +	git notes --ref=custom add -m "unmodified note (custom)" unmodified &&
> +	git format-patch --notes=custom --range-diff=$prev \
> +		-1 --stdout >actual &&
> +	test_grep "## Notes (custom) ##" actual &&
> +	test_grep ! "## Notes ##" actual
> +'

Sounds sensible.

>  test_expect_success 'format-patch --range-diff with --no-notes' '
>  	test_when_finished "git notes remove topic unmodified || :" &&
>  	git notes add -m "topic note" topic &&