git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v5] format-patch --signature-file <file>
@ 2014-05-20  8:00 Jeremiah Mahler
  2014-05-20  8:00 ` Jeremiah Mahler
  0 siblings, 1 reply; 15+ messages in thread
From: Jeremiah Mahler @ 2014-05-20  8:00 UTC (permalink / raw)
  To: Jeff King; +Cc: git, Jeremiah Mahler

v5 of patch to add format-patch --signature-file <file> option.

This revision includes more suggestions from Jeff King and Junio C Hamano:

  - Use git_config_pathname instead of git_config_string for ~ expansion.

  - Eliminated head/tail --lines which is not POSIX compliant.
    Replaced with sed equivalents.

  - Used test_config instead of git config which also handles unsetting.

  - Use a DEFAULT_SIGNATURE variable to better describe its purpose
    instead of git_version_string which could be confusing.


Jeremiah Mahler (1):
  format-patch --signature-file <file>

 Documentation/config.txt           |  4 ++++
 Documentation/git-format-patch.txt |  4 ++++
 builtin/log.c                      | 19 ++++++++++++++++++-
 t/t4014-format-patch.sh            | 32 ++++++++++++++++++++++++++++++++
 4 files changed, 58 insertions(+), 1 deletion(-)

-- 
Jeremiah Mahler
jmmahler@gmail.com
http://github.com/jmahler

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [PATCH v5] format-patch --signature-file <file>
  2014-05-20  8:00 [PATCH v5] format-patch --signature-file <file> Jeremiah Mahler
@ 2014-05-20  8:00 ` Jeremiah Mahler
  2014-05-20  8:27   ` Jeff King
  0 siblings, 1 reply; 15+ messages in thread
From: Jeremiah Mahler @ 2014-05-20  8:00 UTC (permalink / raw)
  To: Jeff King; +Cc: git, Jeremiah Mahler

Added option that allows a signature file to be used with format-patch
so that signatures with newlines and other special characters can be
easily included.

  $ git format-patch --signature-file ~/.signature -1

The config variable format.signaturefile is also provided so that it
can be added by default.

  $ git config format.signaturefile ~/.signature

  $ git format-patch -1

Signed-off-by: Jeremiah Mahler <jmmahler@gmail.com>
---
 Documentation/config.txt           |  4 ++++
 Documentation/git-format-patch.txt |  4 ++++
 builtin/log.c                      | 19 ++++++++++++++++++-
 t/t4014-format-patch.sh            | 32 ++++++++++++++++++++++++++++++++
 4 files changed, 58 insertions(+), 1 deletion(-)

diff --git a/Documentation/config.txt b/Documentation/config.txt
index 1932e9b..140ed77 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -1114,6 +1114,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
diff --git a/Documentation/git-format-patch.txt b/Documentation/git-format-patch.txt
index 5c0a4ab..c0fd470 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,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
diff --git a/builtin/log.c b/builtin/log.c
index 39e8836..7ebe302 100644
--- a/builtin/log.c
+++ b/builtin/log.c
@@ -672,7 +672,9 @@ static void add_header(const char *value)
 #define THREAD_DEEP 2
 static int thread;
 static int do_signoff;
-static const char *signature = git_version_string;
+#define DEFAULT_SIGNATURE git_version_string
+static const char *signature = DEFAULT_SIGNATURE;
+static const char *signature_file;
 static int config_cover_letter;
 
 enum {
@@ -742,6 +744,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;
@@ -1230,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()
 	};
@@ -1447,6 +1453,17 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
 			cover_letter = (config_cover_letter == COVER_ON);
 	}
 
+	if (signature_file) {
+		if (signature && signature != DEFAULT_SIGNATURE)
+			die(_("cannot specify both signature and 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) {
diff --git a/t/t4014-format-patch.sh b/t/t4014-format-patch.sh
index 9c80633..74f0aec 100755
--- a/t/t4014-format-patch.sh
+++ b/t/t4014-format-patch.sh
@@ -762,6 +762,38 @@ 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 &&
+	sed -n -e "/^-- $/,\$p" <output | sed -e "1 d" | sed -e "\$d" | sed -e "\$d" >output2 &&
+	test_cmp expect output2
+'
+
+test_expect_success 'format-patch --signature and --signature-file die' '
+	test_must_fail git format-patch --stdout --signature="foo" --signature-file=expect -1 >output
+'
+
+test_expect_success 'format-patch --no-signature and --signature-file OK' '
+	git format-patch --stdout --no-signature --signature-file=expect -1
+'
+
+test_expect_success 'format-patch with format.signaturefile config' '
+	test_config format.signaturefile expect &&
+	git format-patch --stdout -1 >output &&
+	check_patch output &&
+	sed -n -e "/^-- $/,\$p" <output | sed -e "1 d" | sed -e "\$d" | sed -e "\$d" >output2 &&
+	test_cmp 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

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* Re: [PATCH v5] format-patch --signature-file <file>
  2014-05-20  8:00 ` Jeremiah Mahler
@ 2014-05-20  8:27   ` Jeff King
  2014-05-20 17:53     ` Junio C Hamano
  2014-05-21  0:42     ` Jeremiah Mahler
  0 siblings, 2 replies; 15+ messages in thread
From: Jeff King @ 2014-05-20  8:27 UTC (permalink / raw)
  To: Jeremiah Mahler; +Cc: git

On Tue, May 20, 2014 at 01:00:06AM -0700, Jeremiah Mahler wrote:

> Added option that allows a signature file to be used with format-patch
> so that signatures with newlines and other special characters can be
> easily included.
> 
>   $ git format-patch --signature-file ~/.signature -1
> 
> The config variable format.signaturefile is also provided so that it
> can be added by default.
> 
>   $ git config format.signaturefile ~/.signature
> 
>   $ git format-patch -1
> 
> Signed-off-by: Jeremiah Mahler <jmmahler@gmail.com>

Thanks for keeping at it. This looks good, but I have one question:

> +test_expect_success 'format-patch --signature-file=file' '
> +	git format-patch --stdout --signature-file=expect -1 >output &&
> +	check_patch output &&
> +	sed -n -e "/^-- $/,\$p" <output | sed -e "1 d" | sed -e "\$d" | sed -e "\$d" >output2 &&
> +	test_cmp expect output2
> +'

Here we drop two final lines from the email output. But if I just use
vanilla git and try this, I get nothing:

  $ git format-patch -1 --stdout |
    sed -n -e "/^-- $/,\$p" | sed -e "1 d" | sed -e "\$d" | sed -e "\$d"

Removing the second dropped line works:

  $ git format-patch -1 --stdout |
    sed -n -e "/^-- $/,\$p" | sed -e "1 d" | sed -e "\$d"
  2.0.0.rc1.436.g03cb729

I guess the signature code is adding its own newline, so that the
default signature (or "--signature=foo") works. But it adds it
unconditionally, which is probably not what we want for signatures read
from a file.

Do we maybe want something like this right before your patch?

-- >8 --
Subject: format-patch: make newline after signature conditional

When we print an email signature, we print the divider "--
\n", then the signature string, then two newlines.
Traditionally the signature is a one-liner (and the default
is just the git version), so the extra newline makes sense.

But one could easily specify a longer, multi-line signature,
like:

  git format-patch --signature='
  this is my long signature

  it has multiple lines
  ' ...

We should notice that it already has its own trailing
newline, and suppress one of ours.

Signed-off-by: Jeff King <peff@peff.net>
---
In the example above, there's also a newline before the signature
starts. Should we suppress the first one, too?

Also, I'm not clear on the purpose of the extra trailing line in the
first place. Emails now end with (">" added to show blanks):

  > -- 
  > 2.0.0-rc3...
  >

Is there are a reason for that final blank line?

 builtin/log.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/builtin/log.c b/builtin/log.c
index 39e8836..5acc048 100644
--- a/builtin/log.c
+++ b/builtin/log.c
@@ -844,8 +844,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)
-- 
2.0.0.rc1.436.g03cb729

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* Re: [PATCH v5] format-patch --signature-file <file>
  2014-05-20  8:27   ` Jeff King
@ 2014-05-20 17:53     ` Junio C Hamano
  2014-05-20 18:24       ` Jeff King
  2014-05-21  0:42     ` Jeremiah Mahler
  1 sibling, 1 reply; 15+ messages in thread
From: Junio C Hamano @ 2014-05-20 17:53 UTC (permalink / raw)
  To: Jeff King; +Cc: Jeremiah Mahler, git

Jeff King <peff@peff.net> writes:

> But one could easily specify a longer, multi-line signature,
> like:
>
>   git format-patch --signature='
>   this is my long signature
>
>   it has multiple lines
>   ' ...
>
> We should notice that it already has its own trailing
> newline, and suppress one of ours.
>
> Signed-off-by: Jeff King <peff@peff.net>
> ---
> In the example above, there's also a newline before the signature
> starts. Should we suppress the first one, too?
>
> Also, I'm not clear on the purpose of the extra trailing line in the
> first place. Emails now end with (">" added to show blanks):
>
>   > -- 
>   > 2.0.0-rc3...
>   >
>
> Is there are a reason for that final blank line?

I actually think these "supress extra LFs" trying to be overly smart
and inviting unnecessary surprises.  Unlike log messages people type
(in which we do squash runs of blank lines and other prettifying),
mail-signature string is not something people keep typing, and it
would be better to keep it simple and consistent, i.e. we can
declare that the users who use non-default mail-signature can and
should learn to:

    --signature='this is the first line of my long sig

    with a blank line and then it ends here'

and be done with it, I think.

The trailing blank after the mail-signature is a different issue.  I
think it is safe to remove it and I also think the result may look
better, but at the same time, it is very close to the "if we were
writing format-patch today, then we would..." category, I would say.

>  builtin/log.c | 9 +++++++--
>  1 file changed, 7 insertions(+), 2 deletions(-)
>
> diff --git a/builtin/log.c b/builtin/log.c
> index 39e8836..5acc048 100644
> --- a/builtin/log.c
> +++ b/builtin/log.c
> @@ -844,8 +844,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)

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH v5] format-patch --signature-file <file>
  2014-05-20 17:53     ` Junio C Hamano
@ 2014-05-20 18:24       ` Jeff King
  2014-05-20 18:46         ` Junio C Hamano
  0 siblings, 1 reply; 15+ messages in thread
From: Jeff King @ 2014-05-20 18:24 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Jeremiah Mahler, git

On Tue, May 20, 2014 at 10:53:11AM -0700, Junio C Hamano wrote:

> I actually think these "supress extra LFs" trying to be overly smart
> and inviting unnecessary surprises.  Unlike log messages people type
> (in which we do squash runs of blank lines and other prettifying),
> mail-signature string is not something people keep typing, and it
> would be better to keep it simple and consistent, i.e. we can
> declare that the users who use non-default mail-signature can and
> should learn to:
> 
>     --signature='this is the first line of my long sig
> 
>     with a blank line and then it ends here'
> 
> and be done with it, I think.

If it were just "--signature", I'd agree. After all, nobody is even
complaining. But this is also in preparation for --signature-file.
Should the user create a file without a trailing newline?

We can special-case --signature-file to strip the final newline from the
read file, but it seems friendlier to handle it at the printing stage
(and then we handle the unlikely but possible --signature as above for
free). I don't think it would adversely impact any real-world case,
because somebody would have to:

  1. already be including an extra trailing newline

  2. really _want_ three newlines at the end

> The trailing blank after the mail-signature is a different issue.  I
> think it is safe to remove it and I also think the result may look
> better, but at the same time, it is very close to the "if we were
> writing format-patch today, then we would..." category, I would say.

Yeah. I think it is probably extraneous and would not hurt to remove.
But it may not be worth worrying about (it's really the _two_ lines
caused by the unconditional newline above that bugs me).

-Peff

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH v5] format-patch --signature-file <file>
  2014-05-20 18:24       ` Jeff King
@ 2014-05-20 18:46         ` Junio C Hamano
  2014-05-21 16:42           ` Jeff King
  0 siblings, 1 reply; 15+ messages in thread
From: Junio C Hamano @ 2014-05-20 18:46 UTC (permalink / raw)
  To: Jeff King; +Cc: Jeremiah Mahler, git

Jeff King <peff@peff.net> writes:

> If it were just "--signature", I'd agree. After all, nobody is even
> complaining. But this is also in preparation for --signature-file.
> Should the user create a file without a trailing newline?

Ahh, I missed that part.

I am fine with processing it with stripspace().

By the way, at some point we may want to move that helper function
to strbuf.c, but that is a separate issue.

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH v5] format-patch --signature-file <file>
  2014-05-20  8:27   ` Jeff King
  2014-05-20 17:53     ` Junio C Hamano
@ 2014-05-21  0:42     ` Jeremiah Mahler
  1 sibling, 0 replies; 15+ messages in thread
From: Jeremiah Mahler @ 2014-05-21  0:42 UTC (permalink / raw)
  To: Jeff King; +Cc: git

On Tue, May 20, 2014 at 04:27:40AM -0400, Jeff King wrote:
> On Tue, May 20, 2014 at 01:00:06AM -0700, Jeremiah Mahler wrote:
> 
...
> > +test_expect_success 'format-patch --signature-file=file' '
> > +	git format-patch --stdout --signature-file=expect -1 >output &&
> > +	check_patch output &&
> > +	sed -n -e "/^-- $/,\$p" <output | sed -e "1 d" | sed -e "\$d" | sed -e "\$d" >output2 &&
> > +	test_cmp expect output2
> > +'
> 
> Here we drop two final lines from the email output. But if I just use
> vanilla git and try this, I get nothing:
> 
>   $ git format-patch -1 --stdout |
>     sed -n -e "/^-- $/,\$p" | sed -e "1 d" | sed -e "\$d" | sed -e "\$d"
> 
> Removing the second dropped line works:
> 
>   $ git format-patch -1 --stdout |
>     sed -n -e "/^-- $/,\$p" | sed -e "1 d" | sed -e "\$d"
>   2.0.0.rc1.436.g03cb729
> 
> I guess the signature code is adding its own newline, so that the
> default signature (or "--signature=foo") works. But it adds it
> unconditionally, which is probably not what we want for signatures read
> from a file.
> 
> Do we maybe want something like this right before your patch?
> 
> -- >8 --
> Subject: format-patch: make newline after signature conditional
> 
> When we print an email signature, we print the divider "--
> \n", then the signature string, then two newlines.
> Traditionally the signature is a one-liner (and the default
> is just the git version), so the extra newline makes sense.
> 
> But one could easily specify a longer, multi-line signature,
> like:
> 
>   git format-patch --signature='
>   this is my long signature
> 
>   it has multiple lines
>   ' ...
> 
> We should notice that it already has its own trailing
> newline, and suppress one of ours.
> 
> Signed-off-by: Jeff King <peff@peff.net>
> ---
> In the example above, there's also a newline before the signature
> starts. Should we suppress the first one, too?
> 
> Also, I'm not clear on the purpose of the extra trailing line in the
> first place. Emails now end with (">" added to show blanks):
> 
>   > -- 
>   > 2.0.0-rc3...
>   >
> 
> Is there are a reason for that final blank line?
> 
>  builtin/log.c | 9 +++++++--
>  1 file changed, 7 insertions(+), 2 deletions(-)
> 
> diff --git a/builtin/log.c b/builtin/log.c
> index 39e8836..5acc048 100644
> --- a/builtin/log.c
> +++ b/builtin/log.c
> @@ -844,8 +844,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)
> -- 
> 2.0.0.rc1.436.g03cb729
> 

The simple solution, leaving things as they are, appeals to me.
For the purposes of testing just expect whatever odd number of blank
lines are produced.  Or perhaps slurp all the trailing blank lines and
then compare.

It would be nice if every signature was followed by exactly one blank line.
But if it had two it wouldn't bother me much.

-- 
Jeremiah Mahler
jmmahler@gmail.com
http://github.com/jmahler

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH v5] format-patch --signature-file <file>
  2014-05-20 18:46         ` Junio C Hamano
@ 2014-05-21 16:42           ` Jeff King
  2014-05-21 16:55             ` Jeremiah Mahler
  2014-05-21 17:37             ` Junio C Hamano
  0 siblings, 2 replies; 15+ messages in thread
From: Jeff King @ 2014-05-21 16:42 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Jeremiah Mahler, git

On Tue, May 20, 2014 at 11:46:51AM -0700, Junio C Hamano wrote:

> Jeff King <peff@peff.net> writes:
> 
> > If it were just "--signature", I'd agree. After all, nobody is even
> > complaining. But this is also in preparation for --signature-file.
> > Should the user create a file without a trailing newline?
> 
> Ahh, I missed that part.
> 
> I am fine with processing it with stripspace().

I wasn't planning on anything as drastic as stripspace. I really just
wanted to suppress the one newline, which is almost certainly the right
thing to include for "--signature", but the wrong thing for
"--signature-file" (i.e., the patch I posted earlier).

Stripspace() would drop all extra whitespace, and I wondered if people
would _want_ it in their sigs (e.g., a blank line after the "-- " but
before their .sig content).

I dunno. Maybe it is not worth caring too much about. I don't want to
hold up Jeremiah's patch for something that I suspect neither of us
cares _that_ much about (I know I am not planning on using
--signature-file myself). I just don't want to deal with a patch later
that says "oh, this spacing is wrong" and have to respond "yes, but we
have to retain it so as not to break existing users".

> By the way, at some point we may want to move that helper function
> to strbuf.c, but that is a separate issue.

Agreed. I was touching some string functions earlier today and noticed
that strbuf.c actually contains a lot of non-strbuf functions for
dealing with C strings. That's fine, I guess, but I also wondered if we
should have a separate file for C-string functions. I suppose it doesn't
matter that much either way, as long as it's in a libgit.a file (and
stripspace currently is _not_, which I assume is what you were
indicating above).

-Peff

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH v5] format-patch --signature-file <file>
  2014-05-21 16:42           ` Jeff King
@ 2014-05-21 16:55             ` Jeremiah Mahler
  2014-05-21 17:00               ` Jeff King
  2014-05-21 17:37             ` Junio C Hamano
  1 sibling, 1 reply; 15+ messages in thread
From: Jeremiah Mahler @ 2014-05-21 16:55 UTC (permalink / raw)
  To: Jeff King; +Cc: git

On Wed, May 21, 2014 at 12:42:55PM -0400, Jeff King wrote:
> On Tue, May 20, 2014 at 11:46:51AM -0700, Junio C Hamano wrote:
> 
> > Jeff King <peff@peff.net> writes:
> > 
> > > If it were just "--signature", I'd agree. After all, nobody is even
> > > complaining. But this is also in preparation for --signature-file.
> > > Should the user create a file without a trailing newline?
> > 
> > Ahh, I missed that part.
> > 
> > I am fine with processing it with stripspace().
> 
> I wasn't planning on anything as drastic as stripspace. I really just
> wanted to suppress the one newline, which is almost certainly the right
> thing to include for "--signature", but the wrong thing for
> "--signature-file" (i.e., the patch I posted earlier).
> 
> Stripspace() would drop all extra whitespace, and I wondered if people
> would _want_ it in their sigs (e.g., a blank line after the "-- " but
> before their .sig content).
> 
> I dunno. Maybe it is not worth caring too much about. I don't want to
> hold up Jeremiah's patch for something that I suspect neither of us
> cares _that_ much about (I know I am not planning on using
> --signature-file myself). I just don't want to deal with a patch later
> that says "oh, this spacing is wrong" and have to respond "yes, but we
> have to retain it so as not to break existing users".
> 
> > By the way, at some point we may want to move that helper function
> > to strbuf.c, but that is a separate issue.
> 
> Agreed. I was touching some string functions earlier today and noticed
> that strbuf.c actually contains a lot of non-strbuf functions for
> dealing with C strings. That's fine, I guess, but I also wondered if we
> should have a separate file for C-string functions. I suppose it doesn't
> matter that much either way, as long as it's in a libgit.a file (and
> stripspace currently is _not_, which I assume is what you were
> indicating above).
> 
> -Peff

I am fine with including your previous patch.

Would like me to test it out and create another patch set?

-- 
Jeremiah Mahler
jmmahler@gmail.com
http://github.com/jmahler

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH v5] format-patch --signature-file <file>
  2014-05-21 16:55             ` Jeremiah Mahler
@ 2014-05-21 17:00               ` Jeff King
  0 siblings, 0 replies; 15+ messages in thread
From: Jeff King @ 2014-05-21 17:00 UTC (permalink / raw)
  To: Jeremiah Mahler, git

On Wed, May 21, 2014 at 09:55:43AM -0700, Jeremiah Mahler wrote:

> I am fine with including your previous patch.

I think that would be my preference, but we'll see what Junio says.

> Would like me to test it out and create another patch set?

Yeah, that would be the logical next step. I think the only thing you
should need to adjust in your patch is to strip only one line from the
output, rather than two.

-Peff

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH v5] format-patch --signature-file <file>
  2014-05-21 16:42           ` Jeff King
  2014-05-21 16:55             ` Jeremiah Mahler
@ 2014-05-21 17:37             ` Junio C Hamano
  2014-05-21 17:59               ` Jeff King
  1 sibling, 1 reply; 15+ messages in thread
From: Junio C Hamano @ 2014-05-21 17:37 UTC (permalink / raw)
  To: Jeff King; +Cc: Jeremiah Mahler, git

Jeff King <peff@peff.net> writes:

> On Tue, May 20, 2014 at 11:46:51AM -0700, Junio C Hamano wrote:
>
>> Jeff King <peff@peff.net> writes:
>> 
>> > If it were just "--signature", I'd agree. After all, nobody is even
>> > complaining. But this is also in preparation for --signature-file.
>> > Should the user create a file without a trailing newline?
>> 
>> Ahh, I missed that part.
>> 
>> I am fine with processing it with stripspace().
>
> I wasn't planning on anything as drastic as stripspace. I really just
> wanted to suppress the one newline, which is almost certainly the right
> thing to include for "--signature", but the wrong thing for
> "--signature-file" (i.e., the patch I posted earlier).
> ...
> I dunno. Maybe it is not worth caring too much about.

I suggested stripspace() because I know we do not care too
much, actually.

Cleansing blank lines in one way for many types of user input
(e.g. commit log messages and tag messages) while doing it in a
completely different way just for "--signature-file" is warranted if
there is a good reason for them to be different, but I did not think
of any, and I still don't.  So...

>> By the way, at some point we may want to move that helper function
>> to strbuf.c, but that is a separate issue.
>
> Agreed. I was touching some string functions earlier today and noticed
> that strbuf.c actually contains a lot of non-strbuf functions for
> dealing with C strings. That's fine, I guess, but I also wondered if we
> should have a separate file for C-string functions. I suppose it doesn't
> matter that much either way, as long as it's in a libgit.a file (and
> stripspace currently is _not_, which I assume is what you were
> indicating above).

Yes, I thought you would have used it in your follow-up patch if it
were more prominent.

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH v5] format-patch --signature-file <file>
  2014-05-21 17:37             ` Junio C Hamano
@ 2014-05-21 17:59               ` Jeff King
  2014-05-21 18:26                 ` Junio C Hamano
  0 siblings, 1 reply; 15+ messages in thread
From: Jeff King @ 2014-05-21 17:59 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Jeremiah Mahler, git

On Wed, May 21, 2014 at 10:37:05AM -0700, Junio C Hamano wrote:

> > I wasn't planning on anything as drastic as stripspace. I really just
> > wanted to suppress the one newline, which is almost certainly the right
> > thing to include for "--signature", but the wrong thing for
> > "--signature-file" (i.e., the patch I posted earlier).
> > ...
> > I dunno. Maybe it is not worth caring too much about.
> 
> I suggested stripspace() because I know we do not care too
> much, actually.
> 
> Cleansing blank lines in one way for many types of user input
> (e.g. commit log messages and tag messages) while doing it in a
> completely different way just for "--signature-file" is warranted if
> there is a good reason for them to be different, but I did not think
> of any, and I still don't.  So...

I didn't think of mine as cleansing. It is more like "do not duplicate a
newline ourselves if there is already one there".  But I guess those are
two sides of the same coin.

-Peff

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH v5] format-patch --signature-file <file>
  2014-05-21 17:59               ` Jeff King
@ 2014-05-21 18:26                 ` Junio C Hamano
  2014-05-21 20:47                   ` Jeff King
  0 siblings, 1 reply; 15+ messages in thread
From: Junio C Hamano @ 2014-05-21 18:26 UTC (permalink / raw)
  To: Jeff King; +Cc: Jeremiah Mahler, git

Jeff King <peff@peff.net> writes:

> On Wed, May 21, 2014 at 10:37:05AM -0700, Junio C Hamano wrote:
>
>> > I wasn't planning on anything as drastic as stripspace. I really just
>> > wanted to suppress the one newline, which is almost certainly the right
>> > thing to include for "--signature", but the wrong thing for
>> > "--signature-file" (i.e., the patch I posted earlier).
>> > ...
>> > I dunno. Maybe it is not worth caring too much about.
>> 
>> I suggested stripspace() because I know we do not care too
>> much, actually.
>> 
>> Cleansing blank lines in one way for many types of user input
>> (e.g. commit log messages and tag messages) while doing it in a
>> completely different way just for "--signature-file" is warranted if
>> there is a good reason for them to be different, but I did not think
>> of any, and I still don't.  So...
>
> I didn't think of mine as cleansing. It is more like "do not duplicate a
> newline ourselves if there is already one there".  But I guess those are
> two sides of the same coin.

Yeah, I agree with the last sentence.  My mention of "cleansing"
took into account your "do we want to omit the leading blank as
well?" as well.  In any case, wouldn't reusing stripspace() make the
fix-up shorter?

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH v5] format-patch --signature-file <file>
  2014-05-21 18:26                 ` Junio C Hamano
@ 2014-05-21 20:47                   ` Jeff King
  2014-05-21 21:14                     ` Jeremiah Mahler
  0 siblings, 1 reply; 15+ messages in thread
From: Jeff King @ 2014-05-21 20:47 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Jeremiah Mahler, git

On Wed, May 21, 2014 at 11:26:18AM -0700, Junio C Hamano wrote:

> Yeah, I agree with the last sentence.  My mention of "cleansing"
> took into account your "do we want to omit the leading blank as
> well?" as well.  In any case, wouldn't reusing stripspace() make the
> fix-up shorter?

Not really. Doing stripspace() on the file we read would be a one-liner,
but it doesn't address the extra line. We _already_ have
stripspace-compatible output in the file, with a trailing newline. It's
the one we add for the cmdline arg or default (which lack a newline
generally) that causes the doubling.

So I think it would be something like:

diff --git a/builtin/log.c b/builtin/log.c
index 39e8836..0312402 100644
--- a/builtin/log.c
+++ b/builtin/log.c
@@ -844,8 +844,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) {
+		struct strbuf buf = STRBUF_INIT;
+		strbuf_addstr(&buf, signature);
+		stripspace(&buf, 0);
+		printf("-- \n%s\n", buf.buf);
+		strbuf_release(&buf);
+	}
 }
 
 static void add_branch_description(struct strbuf *buf, const char *branch_name)

I.e., make sure we have consistent stripspace output, and then stop
adding the extra newline in the printf (notice we still include the
"extra" blank at the end, though we can obviously easily drop it here).
Compare to the previous patch I sent, or to the shortest possible:

diff --git a/builtin/log.c b/builtin/log.c
index 39e8836..16b8771 100644
--- a/builtin/log.c
+++ b/builtin/log.c
@@ -845,7 +845,8 @@ 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);
+		printf("-- \n%s%s\n", signature,
+		       ends_with(signature, "\n") ? "" : "\n");
 }
 
 static void add_branch_description(struct strbuf *buf, const char *branch_name)

But I'm not sure "length of code" is the right metric. They're all
pretty easy to do, if we can decide on which.

I think the ratio of usefulness to number of words in this sub-thread is
getting off. I'd be OK with any of:

  1. Leave it as-is. Files get two blank lines.

  2. Conditional newline

  3. Stripspace.

-Peff

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* Re: [PATCH v5] format-patch --signature-file <file>
  2014-05-21 20:47                   ` Jeff King
@ 2014-05-21 21:14                     ` Jeremiah Mahler
  0 siblings, 0 replies; 15+ messages in thread
From: Jeremiah Mahler @ 2014-05-21 21:14 UTC (permalink / raw)
  To: Jeff King; +Cc: Junio C Hamano, git

On Wed, May 21, 2014 at 04:47:39PM -0400, Jeff King wrote:
> On Wed, May 21, 2014 at 11:26:18AM -0700, Junio C Hamano wrote:
> 
...
> I think the ratio of usefulness to number of words in this sub-thread is
> getting off. I'd be OK with any of:
...
> 
> -Peff

I think this has become a discussion about the airspeed of an unladen swallow.
:-)

I think we're close to a final patch. v7 sent.

-- 
Jeremiah Mahler
jmmahler@gmail.com
http://github.com/jmahler

^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2014-05-21 21:14 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-05-20  8:00 [PATCH v5] format-patch --signature-file <file> Jeremiah Mahler
2014-05-20  8:00 ` Jeremiah Mahler
2014-05-20  8:27   ` Jeff King
2014-05-20 17:53     ` Junio C Hamano
2014-05-20 18:24       ` Jeff King
2014-05-20 18:46         ` Junio C Hamano
2014-05-21 16:42           ` Jeff King
2014-05-21 16:55             ` Jeremiah Mahler
2014-05-21 17:00               ` Jeff King
2014-05-21 17:37             ` Junio C Hamano
2014-05-21 17:59               ` Jeff King
2014-05-21 18:26                 ` Junio C Hamano
2014-05-21 20:47                   ` Jeff King
2014-05-21 21:14                     ` Jeremiah Mahler
2014-05-21  0:42     ` Jeremiah Mahler

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).