]> git.ipfire.org Git - thirdparty/git.git/commitdiff
Merge branch 'jc/format-patch-rfc-more'
authorJunio C Hamano <gitster@pobox.com>
Tue, 30 Apr 2024 21:49:42 +0000 (14:49 -0700)
committerJunio C Hamano <gitster@pobox.com>
Tue, 30 Apr 2024 21:49:43 +0000 (14:49 -0700)
The "--rfc" option of "git format-patch" learned to take an
optional string value to be used in place of "RFC" to tweak the
"[PATCH]" on the subject header.

* jc/format-patch-rfc-more:
  format-patch: "--rfc=-(WIP)" appends to produce [PATCH (WIP)]
  format-patch: allow --rfc to optionally take a value, like --rfc=WIP

Documentation/git-format-patch.txt
builtin/log.c
t/t4014-format-patch.sh

index 728bb3821c1729dffe7565fa812570c315d0f878..369af2c4a76af9210ffcc40231b4a03ef178f03e 100644 (file)
@@ -20,7 +20,7 @@ SYNOPSIS
                   [--in-reply-to=<message-id>] [--suffix=.<sfx>]
                   [--ignore-if-in-upstream] [--always]
                   [--cover-from-description=<mode>]
-                  [--rfc] [--subject-prefix=<subject-prefix>]
+                  [--rfc[=<rfc>]] [--subject-prefix=<subject-prefix>]
                   [(--reroll-count|-v) <n>]
                   [--to=<email>] [--cc=<email>]
                   [--[no-]cover-letter] [--quiet]
@@ -238,10 +238,21 @@ the patches (with a value of e.g. "PATCH my-project").
        value of the `format.filenameMaxLength` configuration
        variable, or 64 if unconfigured.
 
---rfc::
-       Prepends "RFC" to the subject prefix (producing "RFC PATCH" by
-       default). RFC means "Request For Comments"; use this when sending
-       an experimental patch for discussion rather than application.
+--rfc[=<rfc>]::
+       Prepends the string _<rfc>_ (defaults to "RFC") to
+       the subject prefix.  As the subject prefix defaults to
+       "PATCH", you'll get "RFC PATCH" by default.
++
+RFC means "Request For Comments"; use this when sending
+an experimental patch for discussion rather than application.
+"--rfc=WIP" may also be a useful way to indicate that a patch
+is not complete yet ("WIP" stands for "Work In Progress").
++
+If the convention of the receiving community for a particular extra
+string is to have it _after_ the subject prefix, the string _<rfc>_
+can be prefixed with a dash ("`-`") to signal that the the rest of
+the _<rfc>_ string should be appended to the subject prefix instead,
+e.g., `--rfc='-(WIP)'` results in "PATCH (WIP)".
 
 -v <n>::
 --reroll-count=<n>::
index 8bab30fcc70d5ba1efa92e72c36c826f02467d5b..4da73999053141ad51b866fec7387071c3ca9108 100644 (file)
@@ -1494,6 +1494,19 @@ static int subject_prefix_callback(const struct option *opt, const char *arg,
        return 0;
 }
 
+static int rfc_callback(const struct option *opt, const char *arg,
+                       int unset)
+{
+       const char **rfc = opt->value;
+
+       *rfc = opt->value;
+       if (unset)
+               *rfc = NULL;
+       else
+               *rfc = arg ? arg : "RFC";
+       return 0;
+}
+
 static int numbered_cmdline_opt = 0;
 
 static int numbered_callback(const struct option *opt, const char *arg,
@@ -1907,8 +1920,8 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
        struct strbuf rdiff2 = STRBUF_INIT;
        struct strbuf rdiff_title = STRBUF_INIT;
        struct strbuf sprefix = STRBUF_INIT;
+       const char *rfc = NULL;
        int creation_factor = -1;
-       int rfc = 0;
 
        const struct option builtin_format_patch_options[] = {
                OPT_CALLBACK_F('n', "numbered", &numbered, NULL,
@@ -1932,7 +1945,9 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
                            N_("mark the series as Nth re-roll")),
                OPT_INTEGER(0, "filename-max-length", &fmt_patch_name_max,
                            N_("max length of output filename")),
-               OPT_BOOL(0, "rfc", &rfc, N_("use [RFC PATCH] instead of [PATCH]")),
+               OPT_CALLBACK_F(0, "rfc", &rfc, N_("rfc"),
+                              N_("add <rfc> (default 'RFC') before 'PATCH'"),
+                              PARSE_OPT_OPTARG, rfc_callback),
                OPT_STRING(0, "cover-from-description", &cover_from_description_arg,
                            N_("cover-from-description-mode"),
                            N_("generate parts of a cover letter based on a branch's description")),
@@ -2050,9 +2065,12 @@ 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) {
-               strbuf_insertstr(&sprefix, 0, "RFC ");
+       if (rfc && rfc[0]) {
                subject_prefix = 1;
+               if (rfc[0] == '-')
+                       strbuf_addf(&sprefix, " %s", rfc + 1);
+               else
+                       strbuf_insertf(&sprefix, 0, "%s ", rfc);
        }
 
        if (reroll_count) {
index 90fe6d066cc025d5f1f5df82e60b00dba9f87e01..ba85b582c5a90cffabbd23b594032158262ffb19 100755 (executable)
@@ -1368,12 +1368,38 @@ test_expect_success 'empty subject prefix does not have extra space' '
        test_cmp expect actual
 '
 
-test_expect_success '--rfc' '
+test_expect_success '--rfc and --no-rfc' '
        cat >expect <<-\EOF &&
        Subject: [RFC PATCH 1/1] header with . in it
        EOF
        git format-patch -n -1 --stdout --rfc >patch &&
        grep "^Subject:" patch >actual &&
+       test_cmp expect actual &&
+       git format-patch -n -1 --stdout --rfc --no-rfc >patch &&
+       sed -e "s/RFC //" expect >expect-raw &&
+       grep "^Subject:" patch >actual &&
+       test_cmp expect-raw actual
+'
+
+test_expect_success '--rfc=WIP and --rfc=' '
+       cat >expect <<-\EOF &&
+       Subject: [WIP PATCH 1/1] header with . in it
+       EOF
+       git format-patch -n -1 --stdout --rfc=WIP >patch &&
+       grep "^Subject:" patch >actual &&
+       test_cmp expect actual &&
+       git format-patch -n -1 --stdout --rfc --rfc= >patch &&
+       sed -e "s/WIP //" expect >expect-raw &&
+       grep "^Subject:" patch >actual &&
+       test_cmp expect-raw actual
+'
+
+test_expect_success '--rfc=-(WIP) appends' '
+       cat >expect <<-\EOF &&
+       Subject: [PATCH (WIP) 1/1] header with . in it
+       EOF
+       git format-patch -n -1 --stdout --rfc="-(WIP)" >patch &&
+       grep "^Subject:" patch >actual &&
        test_cmp expect actual
 '