提交 55571f78 编写于 作者: J Junio C Hamano

Merge branch 'bg/format-patch-N'

* bg/format-patch-N:
  Rearrange git-format-patch synopsis to improve clarity.
  format-patch: Test --[no-]numbered and format.numbered
  format-patch: Add configuration and off switch for --numbered
...@@ -432,6 +432,12 @@ fetch.unpackLimit:: ...@@ -432,6 +432,12 @@ fetch.unpackLimit::
pack from a push can make the push operation complete faster, pack from a push can make the push operation complete faster,
especially on slow filesystems. especially on slow filesystems.
format.numbered::
A boolean which can enable sequence numbers in patch subjects.
Seting this option to "auto" will enable it only if there is
more than one patch. See --numbered option in
gitlink:git-format-patch[1].
format.headers:: format.headers::
Additional email headers to include in a patch to be submitted Additional email headers to include in a patch to be submitted
by mail. See gitlink:git-format-patch[1]. by mail. See gitlink:git-format-patch[1].
......
...@@ -9,9 +9,10 @@ git-format-patch - Prepare patches for e-mail submission ...@@ -9,9 +9,10 @@ git-format-patch - Prepare patches for e-mail submission
SYNOPSIS SYNOPSIS
-------- --------
[verse] [verse]
'git-format-patch' [-n | -k] [-o <dir> | --stdout] [--thread] 'git-format-patch' [-k] [-o <dir> | --stdout] [--thread]
[--attach[=<boundary>] | --inline[=<boundary>]] [--attach[=<boundary>] | --inline[=<boundary>]]
[-s | --signoff] [<common diff options>] [-s | --signoff] [<common diff options>]
[-n | --numbered | -N | --no-numbered]
[--start-number <n>] [--numbered-files] [--start-number <n>] [--numbered-files]
[--in-reply-to=Message-Id] [--suffix=.<sfx>] [--in-reply-to=Message-Id] [--suffix=.<sfx>]
[--ignore-if-in-upstream] [--ignore-if-in-upstream]
...@@ -77,6 +78,9 @@ include::diff-options.txt[] ...@@ -77,6 +78,9 @@ include::diff-options.txt[]
-n|--numbered:: -n|--numbered::
Name output in '[PATCH n/m]' format. Name output in '[PATCH n/m]' format.
-N|--no-numbered::
Name output in '[PATCH]' format.
--start-number <n>:: --start-number <n>::
Start numbering the patches at <n> instead of 1. Start numbering the patches at <n> instead of 1.
...@@ -142,15 +146,16 @@ not add any suffix. ...@@ -142,15 +146,16 @@ not add any suffix.
CONFIGURATION CONFIGURATION
------------- -------------
You can specify extra mail header lines to be added to each You can specify extra mail header lines to be added to each message
message in the repository configuration. You can also specify in the repository configuration, new defaults for the subject prefix
new defaults for the subject prefix and file suffix. and file suffix, and number patches when outputting more than one.
------------ ------------
[format] [format]
headers = "Organization: git-foo\n" headers = "Organization: git-foo\n"
subjectprefix = CHANGE subjectprefix = CHANGE
suffix = .txt suffix = .txt
numbered = auto
------------ ------------
......
...@@ -273,6 +273,8 @@ static int istitlechar(char c) ...@@ -273,6 +273,8 @@ static int istitlechar(char c)
static char *extra_headers = NULL; static char *extra_headers = NULL;
static int extra_headers_size = 0; static int extra_headers_size = 0;
static const char *fmt_patch_suffix = ".patch"; static const char *fmt_patch_suffix = ".patch";
static int numbered = 0;
static int auto_number = 0;
static int git_format_config(const char *var, const char *value) static int git_format_config(const char *var, const char *value)
{ {
...@@ -297,6 +299,15 @@ static int git_format_config(const char *var, const char *value) ...@@ -297,6 +299,15 @@ static int git_format_config(const char *var, const char *value)
if (!strcmp(var, "diff.color") || !strcmp(var, "color.diff")) { if (!strcmp(var, "diff.color") || !strcmp(var, "color.diff")) {
return 0; return 0;
} }
if (!strcmp(var, "format.numbered")) {
if (!strcasecmp(value, "auto")) {
auto_number = 1;
return 0;
}
numbered = git_config_bool(var, value);
return 0;
}
return git_log_config(var, value); return git_log_config(var, value);
} }
...@@ -466,7 +477,6 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix) ...@@ -466,7 +477,6 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
struct rev_info rev; struct rev_info rev;
int nr = 0, total, i, j; int nr = 0, total, i, j;
int use_stdout = 0; int use_stdout = 0;
int numbered = 0;
int start_number = -1; int start_number = -1;
int keep_subject = 0; int keep_subject = 0;
int numbered_files = 0; /* _just_ numbers */ int numbered_files = 0; /* _just_ numbers */
...@@ -503,6 +513,11 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix) ...@@ -503,6 +513,11 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
else if (!strcmp(argv[i], "-n") || else if (!strcmp(argv[i], "-n") ||
!strcmp(argv[i], "--numbered")) !strcmp(argv[i], "--numbered"))
numbered = 1; numbered = 1;
else if (!strcmp(argv[i], "-N") ||
!strcmp(argv[i], "--no-numbered")) {
numbered = 0;
auto_number = 0;
}
else if (!prefixcmp(argv[i], "--start-number=")) else if (!prefixcmp(argv[i], "--start-number="))
start_number = strtol(argv[i] + 15, NULL, 10); start_number = strtol(argv[i] + 15, NULL, 10);
else if (!strcmp(argv[i], "--numbered-files")) else if (!strcmp(argv[i], "--numbered-files"))
...@@ -642,6 +657,8 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix) ...@@ -642,6 +657,8 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
list[nr - 1] = commit; list[nr - 1] = commit;
} }
total = nr; total = nr;
if (!keep_subject && auto_number && total > 1)
numbered = 1;
if (numbered) if (numbered)
rev.total = total + start_number - 1; rev.total = total + start_number - 1;
rev.add_signoff = add_signoff; rev.add_signoff = add_signoff;
......
#!/bin/sh
#
# Copyright (c) 2006 Brian C Gernhardt
#
test_description='Format-patch numbering options'
. ./test-lib.sh
test_expect_success setup '
echo A > file &&
git add file &&
git commit -m First &&
echo B >> file &&
git commit -a -m Second &&
echo C >> file &&
git commit -a -m Third
'
# Each of these gets used multiple times.
test_num_no_numbered() {
cnt=$(grep "^Subject: \[PATCH\]" $1 | wc -l) &&
test $cnt = $2
}
test_single_no_numbered() {
test_num_no_numbered $1 1
}
test_no_numbered() {
test_num_no_numbered $1 2
}
test_single_numbered() {
grep "^Subject: \[PATCH 1/1\]" $1
}
test_numbered() {
grep "^Subject: \[PATCH 1/2\]" $1 &&
grep "^Subject: \[PATCH 2/2\]" $1
}
test_expect_success 'Default: no numbered' '
git format-patch --stdout HEAD~2 >patch0 &&
test_no_numbered patch0
'
test_expect_success 'Use --numbered' '
git format-patch --numbered --stdout HEAD~2 >patch1 &&
test_numbered patch1
'
test_expect_success 'format.numbered = true' '
git config format.numbered true &&
git format-patch --stdout HEAD~2 >patch2 &&
test_numbered patch2
'
test_expect_success 'format.numbered && single patch' '
git format-patch --stdout HEAD^ > patch3 &&
test_single_numbered patch3
'
test_expect_success 'format.numbered && --no-numbered' '
git format-patch --no-numbered --stdout HEAD~2 >patch4 &&
test_no_numbered patch4
'
test_expect_success 'format.numbered = auto' '
git config format.numbered auto
git format-patch --stdout HEAD~2 > patch5 &&
test_numbered patch5
'
test_expect_success 'format.numbered = auto && single patch' '
git format-patch --stdout HEAD^ > patch6 &&
test_single_no_numbered patch6
'
test_expect_success 'format.numbered = auto && --no-numbered' '
git format-patch --no-numbered --stdout HEAD~2 > patch7 &&
test_no_numbered patch7
'
test_done
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册