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

Merge branch 'jm/format-patch-mail-sig'

* jm/format-patch-mail-sig:
  format-patch: add "--signature-file=<file>" option
  format-patch: make newline after signature conditional
......@@ -1122,6 +1122,10 @@ format.signature::
Set this variable to the empty string ("") to suppress
signature generation.
format.signaturefile::
Works just like format.signature except the contents of the
file specified by this variable will be used as the signature.
format.suffix::
The default for format-patch is to output files with the suffix
`.patch`. Use this variable to change that suffix (make sure to
......
......@@ -14,6 +14,7 @@ SYNOPSIS
[(--attach|--inline)[=<boundary>] | --no-attach]
[-s | --signoff]
[--signature=<signature> | --no-signature]
[--signature-file=<file>]
[-n | --numbered | -N | --no-numbered]
[--start-number <n>] [--numbered-files]
[--in-reply-to=Message-Id] [--suffix=.<sfx>]
......@@ -233,6 +234,9 @@ configuration options in linkgit:git-notes[1] to use this workflow).
signature option is omitted the signature defaults to the Git version
number.
--signature-file=<file>::
Works just like --signature except the signature is read from a file.
--suffix=.<sfx>::
Instead of using `.patch` as the suffix for generated
filenames, use specified suffix. A common alternative is
......
......@@ -669,6 +669,7 @@ static void add_header(const char *value)
static int thread;
static int do_signoff;
static const char *signature = git_version_string;
static const char *signature_file;
static int config_cover_letter;
enum {
......@@ -738,6 +739,8 @@ static int git_format_config(const char *var, const char *value, void *cb)
}
if (!strcmp(var, "format.signature"))
return git_config_string(&signature, var, value);
if (!strcmp(var, "format.signaturefile"))
return git_config_pathname(&signature_file, var, value);
if (!strcmp(var, "format.coverletter")) {
if (value && !strcasecmp(value, "auto")) {
config_cover_letter = COVER_AUTO;
......@@ -840,8 +843,13 @@ static void gen_message_id(struct rev_info *info, char *base)
static void print_signature(void)
{
if (signature && *signature)
printf("-- \n%s\n\n", signature);
if (!signature || !*signature)
return;
printf("-- \n%s", signature);
if (signature[strlen(signature)-1] != '\n')
putchar('\n');
putchar('\n');
}
static void add_branch_description(struct strbuf *buf, const char *branch_name)
......@@ -1226,6 +1234,8 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
PARSE_OPT_OPTARG, thread_callback },
OPT_STRING(0, "signature", &signature, N_("signature"),
N_("add a signature")),
OPT_FILENAME(0, "signature-file", &signature_file,
N_("add a signature from a file")),
OPT__QUIET(&quiet, N_("don't print the patch filenames")),
OPT_END()
};
......@@ -1443,6 +1453,18 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
cover_letter = (config_cover_letter == COVER_ON);
}
if (!signature) {
; /* --no-signature inhibits all signatures */
} else if (signature && signature != git_version_string) {
; /* non-default signature already set */
} else if (signature_file) {
struct strbuf buf = STRBUF_INIT;
if (strbuf_read_file(&buf, signature_file, 128) < 0)
die_errno(_("unable to read signature file '%s'"), signature_file);
signature = strbuf_detach(&buf, NULL);
}
if (in_reply_to || thread || cover_letter)
rev.ref_message_ids = xcalloc(1, sizeof(struct string_list));
if (in_reply_to) {
......
......@@ -762,6 +762,67 @@ test_expect_success 'format-patch --signature="" suppresses signatures' '
! grep "^-- \$" output
'
test_expect_success 'prepare mail-signature input' '
cat >mail-signature <<-\EOF
Test User <test.email@kernel.org>
http://git.kernel.org/cgit/git/git.git
git.kernel.org/?p=git/git.git;a=summary
EOF
'
test_expect_success '--signature-file=file works' '
git format-patch --stdout --signature-file=mail-signature -1 >output &&
check_patch output &&
sed -e "1,/^-- \$/d" <output >actual &&
{
cat mail-signature && echo
} >expect &&
test_cmp expect actual
'
test_expect_success 'format.signaturefile works' '
test_config format.signaturefile mail-signature &&
git format-patch --stdout -1 >output &&
check_patch output &&
sed -e "1,/^-- \$/d" <output >actual &&
{
cat mail-signature && echo
} >expect &&
test_cmp expect actual
'
test_expect_success '--no-signature suppresses format.signaturefile ' '
test_config format.signaturefile mail-signature &&
git format-patch --stdout --no-signature -1 >output &&
check_patch output &&
! grep "^-- \$" output
'
test_expect_success '--signature-file overrides format.signaturefile' '
cat >other-mail-signature <<-\EOF
Use this other signature instead of mail-signature.
EOF
test_config format.signaturefile mail-signature &&
git format-patch --stdout \
--signature-file=other-mail-signature -1 >output &&
check_patch output &&
sed -e "1,/^-- \$/d" <output >actual &&
{
cat other-mail-signature && echo
} >expect &&
test_cmp expect actual
'
test_expect_success '--signature overrides format.signaturefile' '
test_config format.signaturefile mail-signature &&
git format-patch --stdout --signature="my sig" -1 >output &&
check_patch output &&
grep "my sig" output
'
test_expect_success TTY 'format-patch --stdout paginates' '
rm -f pager_used &&
test_terminal env GIT_PAGER="wc >pager_used" git format-patch --stdout --all &&
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册