Skip to content

Commit

Permalink
format-patch: allow a non-integral version numbers
Browse files Browse the repository at this point in the history
Usually we can only use `format-patch -v<n>` to generate integral
version numbers patches, but if we can provide `format-patch` with
non-integer versions numbers of patches, this may help us to send patches
such as "v1.1" versions sometimes.

Signed-off-by: ZheNing Hu <adlternative@gmail.com>
  • Loading branch information
adlternative committed Feb 25, 2021
1 parent 966e671 commit f995e84
Show file tree
Hide file tree
Showing 5 changed files with 20 additions and 20 deletions.
6 changes: 3 additions & 3 deletions Documentation/git-format-patch.txt
Expand Up @@ -215,12 +215,12 @@ populated with placeholder text.

-v <n>::
--reroll-count=<n>::
Mark the series as the <n>-th iteration of the topic. The
Mark the series as the specified version of the topic. The
output filenames have `v<n>` prepended to them, and the
subject prefix ("PATCH" by default, but configurable via the
`--subject-prefix` option) has ` v<n>` appended to it. E.g.
`--reroll-count=4` may produce `v4-0001-add-makefile.patch`
file that has "Subject: [PATCH v4 1/20] Add makefile" in it.
`--reroll-count 4.4` may produce `v4.4-0001-add-makefile.patch`
file that has "Subject: [PATCH v4.4 1/20] Add makefile" in it.

--to=<email>::
Add a `To:` header to the email headers. This is in addition
Expand Down
20 changes: 10 additions & 10 deletions builtin/log.c
Expand Up @@ -1662,13 +1662,13 @@ static void print_bases(struct base_tree_info *bases, FILE *file)
oidclr(&bases->base_commit);
}

static const char *diff_title(struct strbuf *sb, int reroll_count,
static const char *diff_title(struct strbuf *sb, const char *reroll_count,
const char *generic, const char *rerolled)
{
if (reroll_count <= 0)
if (!reroll_count)
strbuf_addstr(sb, generic);
else /* RFC may be v0, so allow -v1 to diff against v0 */
strbuf_addf(sb, rerolled, reroll_count - 1);
strbuf_addf(sb, rerolled, "last version");
return sb->buf;
}

Expand Down Expand Up @@ -1717,7 +1717,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
struct strbuf buf = STRBUF_INIT;
int use_patch_format = 0;
int quiet = 0;
int reroll_count = -1;
const char *reroll_count = NULL;
char *cover_from_description_arg = NULL;
char *branch_name = NULL;
char *base_commit = NULL;
Expand Down Expand Up @@ -1751,8 +1751,8 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
N_("use <sfx> instead of '.patch'")),
OPT_INTEGER(0, "start-number", &start_number,
N_("start numbering patches at <n> instead of 1")),
OPT_INTEGER('v', "reroll-count", &reroll_count,
N_("mark the series as Nth re-roll")),
OPT_STRING('v', "reroll-count",&reroll_count, N_("reroll-count"),
N_("mark the series as specified version re-roll")),
OPT_INTEGER(0, "filename-max-length", &fmt_patch_name_max,
N_("max length of output filename")),
OPT_CALLBACK_F(0, "rfc", &rev, NULL,
Expand Down Expand Up @@ -1862,9 +1862,9 @@ 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 (0 < reroll_count) {
if (reroll_count) {
struct strbuf sprefix = STRBUF_INIT;
strbuf_addf(&sprefix, "%s v%d",
strbuf_addf(&sprefix, "%s v%s",
rev.subject_prefix, reroll_count);
rev.reroll_count = reroll_count;
rev.subject_prefix = strbuf_detach(&sprefix, NULL);
Expand Down Expand Up @@ -2080,7 +2080,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
rev.idiff_oid2 = get_commit_tree_oid(list[0]);
rev.idiff_title = diff_title(&idiff_title, reroll_count,
_("Interdiff:"),
_("Interdiff against v%d:"));
_("Interdiff against %s:"));
}

if (creation_factor < 0)
Expand All @@ -2099,7 +2099,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
rev.creation_factor = creation_factor;
rev.rdiff_title = diff_title(&rdiff_title, reroll_count,
_("Range-diff:"),
_("Range-diff against v%d:"));
_("Range-diff against %s:"));
}

if (!signature) {
Expand Down
4 changes: 2 additions & 2 deletions log-tree.c
Expand Up @@ -369,8 +369,8 @@ void fmt_output_subject(struct strbuf *filename,
int start_len = filename->len;
int max_len = start_len + info->patch_name_max - (strlen(suffix) + 1);

if (0 < info->reroll_count)
strbuf_addf(filename, "v%d-", info->reroll_count);
if (info->reroll_count)
strbuf_addf(filename, "v%s-", info->reroll_count);
strbuf_addf(filename, "%04d-%s", nr, subject);

if (max_len < filename->len)
Expand Down
2 changes: 1 addition & 1 deletion revision.h
Expand Up @@ -235,7 +235,7 @@ struct rev_info {
const char *mime_boundary;
const char *patch_suffix;
int numbered_files;
int reroll_count;
const char *reroll_count;
char *message_id;
struct ident_split from_ident;
struct string_list *ref_message_ids;
Expand Down
8 changes: 4 additions & 4 deletions t/t4014-format-patch.sh
Expand Up @@ -372,10 +372,10 @@ test_expect_success 'filename limit applies only to basename' '

test_expect_success 'reroll count' '
rm -fr patches &&
git format-patch -o patches --cover-letter --reroll-count 4 main..side >list &&
! grep -v "^patches/v4-000[0-3]-" list &&
git format-patch -o patches --cover-letter --reroll-count 4.4 main..side >list &&
! grep -v "^patches/v4.4-000[0-3]-" list &&
sed -n -e "/^Subject: /p" $(cat list) >subjects &&
! grep -v "^Subject: \[PATCH v4 [0-3]/3\] " subjects
! grep -v "^Subject: \[PATCH v4.4 [0-3]/3\] " subjects
'

test_expect_success 'reroll count (-v)' '
Expand Down Expand Up @@ -2252,7 +2252,7 @@ test_expect_success 'interdiff: cover-letter' '

test_expect_success 'interdiff: reroll-count' '
git format-patch --cover-letter --interdiff=boop~2 -v2 -1 boop &&
test_i18ngrep "^Interdiff ..* v1:$" v2-0000-cover-letter.patch
test_i18ngrep "^Interdiff ..* last version:$" v2-0000-cover-letter.patch
'

test_expect_success 'interdiff: solo-patch' '
Expand Down

0 comments on commit f995e84

Please sign in to comment.