format-patch: add format.coverLetter configuration variable
Also, add a new option: 'auto', so if there's more than one patch, the cover letter is generated, otherwise it's not. Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
parent
aa089cd9ab
commit
2a4c26076c
|
@ -1096,6 +1096,11 @@ format.signoff::
|
||||||
the rights to submit this work under the same open source license.
|
the rights to submit this work under the same open source license.
|
||||||
Please see the 'SubmittingPatches' document for further discussion.
|
Please see the 'SubmittingPatches' document for further discussion.
|
||||||
|
|
||||||
|
format.coverLetter::
|
||||||
|
A boolean that controls whether to generate a cover-letter when
|
||||||
|
format-patch is invoked, but in addition can be set to "auto", to
|
||||||
|
generate a cover-letter only when there's more than one patch.
|
||||||
|
|
||||||
filter.<driver>.clean::
|
filter.<driver>.clean::
|
||||||
The command which is used to convert the content of a worktree
|
The command which is used to convert the content of a worktree
|
||||||
file to a blob upon checkin. See linkgit:gitattributes[5] for
|
file to a blob upon checkin. See linkgit:gitattributes[5] for
|
||||||
|
|
|
@ -20,7 +20,7 @@ SYNOPSIS
|
||||||
[--ignore-if-in-upstream]
|
[--ignore-if-in-upstream]
|
||||||
[--subject-prefix=Subject-Prefix] [(--reroll-count|-v) <n>]
|
[--subject-prefix=Subject-Prefix] [(--reroll-count|-v) <n>]
|
||||||
[--to=<email>] [--cc=<email>]
|
[--to=<email>] [--cc=<email>]
|
||||||
[--cover-letter] [--quiet] [--notes[=<ref>]]
|
[--[no-]cover-letter] [--quiet] [--notes[=<ref>]]
|
||||||
[<common diff options>]
|
[<common diff options>]
|
||||||
[ <since> | <revision range> ]
|
[ <since> | <revision range> ]
|
||||||
|
|
||||||
|
@ -195,7 +195,7 @@ will want to ensure that threading is disabled for `git send-email`.
|
||||||
`Cc:`, and custom) headers added so far from config or command
|
`Cc:`, and custom) headers added so far from config or command
|
||||||
line.
|
line.
|
||||||
|
|
||||||
--cover-letter::
|
--[no-]cover-letter::
|
||||||
In addition to the patches, generate a cover letter file
|
In addition to the patches, generate a cover letter file
|
||||||
containing the shortlog and the overall diffstat. You can
|
containing the shortlog and the overall diffstat. You can
|
||||||
fill in a description in the file before sending it out.
|
fill in a description in the file before sending it out.
|
||||||
|
@ -260,6 +260,7 @@ attachments, and sign off patches with configuration variables.
|
||||||
cc = <email>
|
cc = <email>
|
||||||
attach [ = mime-boundary-string ]
|
attach [ = mime-boundary-string ]
|
||||||
signoff = true
|
signoff = true
|
||||||
|
coverletter = auto
|
||||||
------------
|
------------
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -622,6 +622,14 @@ static void add_header(const char *value)
|
||||||
static int thread;
|
static int thread;
|
||||||
static int do_signoff;
|
static int do_signoff;
|
||||||
static const char *signature = git_version_string;
|
static const char *signature = git_version_string;
|
||||||
|
static int config_cover_letter;
|
||||||
|
|
||||||
|
enum {
|
||||||
|
COVER_UNSET,
|
||||||
|
COVER_OFF,
|
||||||
|
COVER_ON,
|
||||||
|
COVER_AUTO
|
||||||
|
};
|
||||||
|
|
||||||
static int git_format_config(const char *var, const char *value, void *cb)
|
static int git_format_config(const char *var, const char *value, void *cb)
|
||||||
{
|
{
|
||||||
|
@ -683,6 +691,14 @@ static int git_format_config(const char *var, const char *value, void *cb)
|
||||||
}
|
}
|
||||||
if (!strcmp(var, "format.signature"))
|
if (!strcmp(var, "format.signature"))
|
||||||
return git_config_string(&signature, var, value);
|
return git_config_string(&signature, var, value);
|
||||||
|
if (!strcmp(var, "format.coverletter")) {
|
||||||
|
if (value && !strcasecmp(value, "auto")) {
|
||||||
|
config_cover_letter = COVER_AUTO;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
config_cover_letter = git_config_bool(var, value) ? COVER_ON : COVER_OFF;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
return git_log_config(var, value, cb);
|
return git_log_config(var, value, cb);
|
||||||
}
|
}
|
||||||
|
@ -1074,7 +1090,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
|
||||||
int start_number = -1;
|
int start_number = -1;
|
||||||
int just_numbers = 0;
|
int just_numbers = 0;
|
||||||
int ignore_if_in_upstream = 0;
|
int ignore_if_in_upstream = 0;
|
||||||
int cover_letter = 0;
|
int cover_letter = -1;
|
||||||
int boundary_count = 0;
|
int boundary_count = 0;
|
||||||
int no_binary_diff = 0;
|
int no_binary_diff = 0;
|
||||||
struct commit *origin = NULL, *head = NULL;
|
struct commit *origin = NULL, *head = NULL;
|
||||||
|
@ -1309,11 +1325,6 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
|
||||||
*/
|
*/
|
||||||
rev.show_root_diff = 1;
|
rev.show_root_diff = 1;
|
||||||
|
|
||||||
if (cover_letter) {
|
|
||||||
if (!branch_name)
|
|
||||||
branch_name = find_branch_name(&rev);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ignore_if_in_upstream) {
|
if (ignore_if_in_upstream) {
|
||||||
/* Don't say anything if head and upstream are the same. */
|
/* Don't say anything if head and upstream are the same. */
|
||||||
if (rev.pending.nr == 2) {
|
if (rev.pending.nr == 2) {
|
||||||
|
@ -1354,6 +1365,13 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
|
||||||
numbered = 1;
|
numbered = 1;
|
||||||
if (numbered)
|
if (numbered)
|
||||||
rev.total = total + start_number - 1;
|
rev.total = total + start_number - 1;
|
||||||
|
if (cover_letter == -1) {
|
||||||
|
if (config_cover_letter == COVER_AUTO)
|
||||||
|
cover_letter = (total > 1);
|
||||||
|
else
|
||||||
|
cover_letter = (config_cover_letter == COVER_ON);
|
||||||
|
}
|
||||||
|
|
||||||
if (in_reply_to || thread || cover_letter)
|
if (in_reply_to || thread || cover_letter)
|
||||||
rev.ref_message_ids = xcalloc(1, sizeof(struct string_list));
|
rev.ref_message_ids = xcalloc(1, sizeof(struct string_list));
|
||||||
if (in_reply_to) {
|
if (in_reply_to) {
|
||||||
|
@ -1365,6 +1383,8 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
|
||||||
if (cover_letter) {
|
if (cover_letter) {
|
||||||
if (thread)
|
if (thread)
|
||||||
gen_message_id(&rev, "cover");
|
gen_message_id(&rev, "cover");
|
||||||
|
if (!branch_name)
|
||||||
|
branch_name = find_branch_name(&rev);
|
||||||
make_cover_letter(&rev, use_stdout,
|
make_cover_letter(&rev, use_stdout,
|
||||||
origin, nr, list, head, branch_name, quiet);
|
origin, nr, list, head, branch_name, quiet);
|
||||||
total++;
|
total++;
|
||||||
|
|
|
@ -1289,4 +1289,32 @@ test_expect_success 'cover letter with nothing' '
|
||||||
test_line_count = 0 actual
|
test_line_count = 0 actual
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'cover letter auto' '
|
||||||
|
mkdir -p tmp &&
|
||||||
|
test_when_finished "rm -rf tmp;
|
||||||
|
git config --unset format.coverletter" &&
|
||||||
|
|
||||||
|
git config format.coverletter auto &&
|
||||||
|
git format-patch -o tmp -1 >list &&
|
||||||
|
test_line_count = 1 list &&
|
||||||
|
git format-patch -o tmp -2 >list &&
|
||||||
|
test_line_count = 3 list
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'cover letter auto user override' '
|
||||||
|
mkdir -p tmp &&
|
||||||
|
test_when_finished "rm -rf tmp;
|
||||||
|
git config --unset format.coverletter" &&
|
||||||
|
|
||||||
|
git config format.coverletter auto &&
|
||||||
|
git format-patch -o tmp --cover-letter -1 >list &&
|
||||||
|
test_line_count = 2 list &&
|
||||||
|
git format-patch -o tmp --cover-letter -2 >list &&
|
||||||
|
test_line_count = 3 list &&
|
||||||
|
git format-patch -o tmp --no-cover-letter -1 >list &&
|
||||||
|
test_line_count = 1 list &&
|
||||||
|
git format-patch -o tmp --no-cover-letter -2 >list &&
|
||||||
|
test_line_count = 2 list
|
||||||
|
'
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
|
Loading…
Reference in New Issue