[PATCH v2] format-patch --signature-file <file>
From: Jeremiah Mahler <hidden>
Date: 2016-06-15 23:01:11
Subsystem:
documentation, the rest · Maintainers:
Jonathan Corbet, Linus Torvalds
Added feature that allows a signature file to be used with format-patch. $ git format-patch --signature-file ~/.signature -1 Now signatures with newlines and other special characters can be easily included. Signed-off-by: Jeremiah Mahler <redacted> --- Documentation/git-format-patch.txt | 7 +++++++ builtin/log.c | 24 ++++++++++++++++++++++++ t/t4014-format-patch.sh | 13 +++++++++++++ 3 files changed, 44 insertions(+)
diff --git a/Documentation/git-format-patch.txt b/Documentation/git-format-patch.txt
index 5c0a4ab..dd57841 100644
--- a/Documentation/git-format-patch.txt
+++ b/Documentation/git-format-patch.txt@@ -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,12 @@ 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>:: + Add a signature, by including the contents of a file, to each message + produced. Per RFC 3676 the signature is separated from the body by a + line with '-- ' on it. If the signature option is omitted the signature + defaults to the Git version number. + --suffix=.<sfx>:: Instead of using `.patch` as the suffix for generated filenames, use specified suffix. A common alternative is
diff --git a/builtin/log.c b/builtin/log.c
index 39e8836..4a7308d 100644
--- a/builtin/log.c
+++ b/builtin/log.c@@ -1147,6 +1147,27 @@ static int from_callback(const struct option *opt, const char *arg, int unset) return 0; } +static int signature_file_callback(const struct option *opt, const char *arg, + int unset) +{ + const char **signature = opt->value; + static char buf[1024]; + size_t sz; + FILE *fd; + + fd = fopen(arg, "r"); + if (fd) { + sz = sizeof(buf); + sz = fread(buf, 1, sz - 1, fd); + if (sz) { + buf[sz] = '\0'; + *signature = buf; + } + fclose(fd); + } + return 0; +} + int cmd_format_patch(int argc, const char **argv, const char *prefix) { struct commit *commit;
@@ -1230,6 +1251,9 @@ 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")), + { OPTION_CALLBACK, 0, "signature-file", &signature, N_("signature-file"), + N_("add a signature from contents of a file"), + PARSE_OPT_NONEG, signature_file_callback }, OPT__QUIET(&quiet, N_("don't print the patch filenames")), OPT_END() };
diff --git a/t/t4014-format-patch.sh b/t/t4014-format-patch.sh
index 9c80633..19b67e3 100755
--- a/t/t4014-format-patch.sh
+++ b/t/t4014-format-patch.sh@@ -762,6 +762,19 @@ test_expect_success 'format-patch --signature="" suppresses signatures' ' ! grep "^-- \$" output ' +cat > expect << 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 'format-patch --signature-file file' ' + git format-patch --stdout --signature-file expect -1 >output && + check_patch output && + fgrep -x -f output expect >output2 && + diff expect output2 +' + 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 &&
--
Jeremiah Mahler
jmmahler@gmail.com
http://github.com/jmahler