Re: [PATCH 2/4] format-patch: fix a bug in option exclusivity and add a test to t4014
- From
- Dragan Simic <dsimic@manjaro.org>
- Date
- Apr 18, 2024, 09:12 UTC
- Message-ID
- <fa2532fdfd57944c7dd915b0ecc9ce15@manjaro.org>
- In-Reply-To
- <47ac35d45693aa5b9fa061e85da6e176@manjaro.org>
Hello Patrick,
On 2024-04-17 08:56, Dragan Simic wrote:
Show 50 quoted lines
> On 2024-04-17 08:27, Patrick Steinhardt wrote:
>> On Wed, Apr 17, 2024 at 05:32:42AM +0200, Dragan Simic wrote:
>>> Fix a bug that allows --rfc and -k options to be specified together
>>> when
>>> executing "git format-patch". This bug was introduced back in the
>>> commit
>>> e0d7db7423a9 ("format-patch: --rfc honors what --subject-prefix
>>> sets"),
>>> about eight months ago, but it has remained undetected so far,
>>> presumably
>>> because of no associated test coverage.
>>>
>>> Add a new test to the t4014 that covers the mutual exclusivity of the
>>> --rfc
>>> and -k command-line options for "git format-patch", for future
>>> coverage.
>>>
>>> Signed-off-by: Dragan Simic <dsimic@manjaro.org>
>>> ---
>>> builtin/log.c | 5 ++++-
>>> t/t4014-format-patch.sh | 4 ++++
>>> 2 files changed, 8 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/builtin/log.c b/builtin/log.c
>>> index c0a8bb95e983..e5a238f1cf2c 100644
>>> --- a/builtin/log.c
>>> +++ b/builtin/log.c
>>> @@ -2050,8 +2050,11 @@ int cmd_format_patch(int argc, const char
>>> **argv, const char *prefix)
>>> if (cover_from_description_arg)
>>> cover_from_description_mode =
>>> parse_cover_from_description(cover_from_description_arg);
>>>
>>> - if (rfc)
>>> + /* Also mark the subject prefix as modified, for later checks */
>>> + if (rfc) {
>>> strbuf_insertstr(&sprefix, 0, "RFC ");
>>> + subject_prefix = 1;
>>> + }
>>
>> As an alternative fix, can we drop `subject_prefix` and replace it
>> with
>> `sprefix.len` instead? It seems to merely be a proxy value for that
>> anyway, and if we didn't have that variable then the bug would not
>> have
>> been possible to begin with.
>
> Thanks for your feedback!
>
> I'll think about it, and I'll come back a bit later with an update.Unfortunately, we can't use sprefix.len instead, because it can still be zero even if the --subject-prefix option was present, more specifically if we receive --subject-prefix="" on the command line.
The checks that use subject_prefix need to check if --subject-prefix was specified at all as an option, instead of checking if the actual subject prefix is of non-zero length.
As you already noted, if sprefix.len was used instead of the separate subject_prefix variable, the '--rfc -k' bug wouldn't be possible, but the new '--subject-prefix="" -k' bug would be possible instead.
Show 18 quoted lines
>>> if (reroll_count) {
>>> strbuf_addf(&sprefix, " v%s", reroll_count);
>>> diff --git a/t/t4014-format-patch.sh b/t/t4014-format-patch.sh
>>> index e37a1411ee24..e22c4ac34e6e 100755
>>> --- a/t/t4014-format-patch.sh
>>> +++ b/t/t4014-format-patch.sh
>>> @@ -1397,6 +1397,10 @@ test_expect_success '--rfc is argument order
>>> independent' '
>>> test_cmp expect actual
>>> '
>>>
>>> +test_expect_success '--rfc and -k cannot be used together' '
>>> + test_must_fail git format-patch -1 --stdout --rfc -k >patch
>>> +'
>>> +
>>> test_expect_success '--from=ident notices bogus ident' '
>>> test_must_fail git format-patch -1 --stdout --from=foo >patch
>>> '