зеркало из https://github.com/microsoft/git.git
format-patch: add "--signature-file=<file>" option
Add an option to format-patch for reading a signature from a file. $ git format-patch -1 --signature-file=$HOME/.signature The config variable `format.signaturefile` can also be used to make this the default. $ git config format.signaturefile $HOME/.signature $ git format-patch -1 Signed-off-by: Jeremiah Mahler <jmmahler@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
c6076e2b4a
Коммит
7022650f61
|
@ -1114,6 +1114,10 @@ format.signature::
|
||||||
Set this variable to the empty string ("") to suppress
|
Set this variable to the empty string ("") to suppress
|
||||||
signature generation.
|
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::
|
format.suffix::
|
||||||
The default for format-patch is to output files with the suffix
|
The default for format-patch is to output files with the suffix
|
||||||
`.patch`. Use this variable to change that suffix (make sure to
|
`.patch`. Use this variable to change that suffix (make sure to
|
||||||
|
|
|
@ -14,6 +14,7 @@ SYNOPSIS
|
||||||
[(--attach|--inline)[=<boundary>] | --no-attach]
|
[(--attach|--inline)[=<boundary>] | --no-attach]
|
||||||
[-s | --signoff]
|
[-s | --signoff]
|
||||||
[--signature=<signature> | --no-signature]
|
[--signature=<signature> | --no-signature]
|
||||||
|
[--signature-file=<file>]
|
||||||
[-n | --numbered | -N | --no-numbered]
|
[-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>]
|
||||||
|
@ -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
|
signature option is omitted the signature defaults to the Git version
|
||||||
number.
|
number.
|
||||||
|
|
||||||
|
--signature-file=<file>::
|
||||||
|
Works just like --signature except the signature is read from a file.
|
||||||
|
|
||||||
--suffix=.<sfx>::
|
--suffix=.<sfx>::
|
||||||
Instead of using `.patch` as the suffix for generated
|
Instead of using `.patch` as the suffix for generated
|
||||||
filenames, use specified suffix. A common alternative is
|
filenames, use specified suffix. A common alternative is
|
||||||
|
|
|
@ -673,6 +673,7 @@ 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 const char *signature_file;
|
||||||
static int config_cover_letter;
|
static int config_cover_letter;
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
|
@ -742,6 +743,8 @@ 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.signaturefile"))
|
||||||
|
return git_config_pathname(&signature_file, var, value);
|
||||||
if (!strcmp(var, "format.coverletter")) {
|
if (!strcmp(var, "format.coverletter")) {
|
||||||
if (value && !strcasecmp(value, "auto")) {
|
if (value && !strcasecmp(value, "auto")) {
|
||||||
config_cover_letter = COVER_AUTO;
|
config_cover_letter = COVER_AUTO;
|
||||||
|
@ -1235,6 +1238,8 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
|
||||||
PARSE_OPT_OPTARG, thread_callback },
|
PARSE_OPT_OPTARG, thread_callback },
|
||||||
OPT_STRING(0, "signature", &signature, N_("signature"),
|
OPT_STRING(0, "signature", &signature, N_("signature"),
|
||||||
N_("add a 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__QUIET(&quiet, N_("don't print the patch filenames")),
|
||||||
OPT_END()
|
OPT_END()
|
||||||
};
|
};
|
||||||
|
@ -1452,6 +1457,18 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
|
||||||
cover_letter = (config_cover_letter == COVER_ON);
|
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)
|
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) {
|
||||||
|
|
|
@ -762,6 +762,67 @@ test_expect_success 'format-patch --signature="" suppresses signatures' '
|
||||||
! grep "^-- \$" output
|
! 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' '
|
test_expect_success TTY 'format-patch --stdout paginates' '
|
||||||
rm -f pager_used &&
|
rm -f pager_used &&
|
||||||
test_terminal env GIT_PAGER="wc >pager_used" git format-patch --stdout --all &&
|
test_terminal env GIT_PAGER="wc >pager_used" git format-patch --stdout --all &&
|
||||||
|
|
Загрузка…
Ссылка в новой задаче