Browse Source

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
Felipe Contreras 12 years ago committed by Junio C Hamano
parent
commit
2a4c26076c
  1. 5
      Documentation/config.txt
  2. 5
      Documentation/git-format-patch.txt
  3. 32
      builtin/log.c
  4. 28
      t/t4014-format-patch.sh

5
Documentation/config.txt

@ -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

5
Documentation/git-format-patch.txt

@ -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
------------ ------------





32
builtin/log.c

@ -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++;

28
t/t4014-format-patch.sh

@ -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…
Cancel
Save