* [PATCH v2] format-patch --signature-file <file>
@ 2014-05-16 1:31 Jeremiah Mahler
2014-05-16 1:31 ` Jeremiah Mahler
0 siblings, 1 reply; 13+ messages in thread
From: Jeremiah Mahler @ 2014-05-16 1:31 UTC (permalink / raw)
To: Jonathan Nieder; +Cc: git, Jeremiah Mahler
On Tue, May 13, 2014 at 09:07:12AM -0700, Jonathan Nieder wrote:
> Hi,
>
> Jeremiah Mahler wrote:
>
> > # from a string
> > $ git format-patch --signature "from a string" origin
> >
> > # or from a file
> > $ git format-patch --signature ~/.signature origin
>
> Interesting. But... what if I want my patch to end with
>
> --
> /home/jrnieder/.signature
>
> ? It seems safer to introduce a separate --signature-file option.
>
It is probably smarter to avoid that corner case entirely.
Good idea.
> [...]
> > builtin/log.c | 26 ++++++++++++++++++++++++--
> > 1 file changed, 24 insertions(+), 2 deletions(-)
>
> Tests?
>
I added a test which checks that a valid patch is produced and that
the signature from the file appears in the output.
> Thanks and hope that helps,
> Jonathan
In addition to addressing the suggestions from Jonathan I also
updated the Documentation.
This solution uses a static buffer to store the signature which does
create a size limitation (1024 bytes). I considered a solution
using malloc but I could not figure out a clean way of determining when
to free the memory.
Thanks for the help and suggestions.
Jeremiah Mahler (1):
format-patch --signature-file <file>
Documentation/git-format-patch.txt | 7 +++++++
builtin/log.c | 24 ++++++++++++++++++++++++
t/t4014-format-patch.sh | 13 +++++++++++++
3 files changed, 44 insertions(+)
--
Jeremiah Mahler
jmmahler@gmail.com
http://github.com/jmahler
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH v2] format-patch --signature-file <file>
2014-05-16 1:31 [PATCH v2] format-patch --signature-file <file> Jeremiah Mahler
@ 2014-05-16 1:31 ` Jeremiah Mahler
2014-05-16 8:14 ` Jeff King
0 siblings, 1 reply; 13+ messages in thread
From: Jeremiah Mahler @ 2014-05-16 1:31 UTC (permalink / raw)
To: Jonathan Nieder; +Cc: git, Jeremiah Mahler
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 <jmmahler@gmail.com>
---
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
^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH v2] format-patch --signature-file <file>
2014-05-16 1:31 ` Jeremiah Mahler
@ 2014-05-16 8:14 ` Jeff King
2014-05-17 7:25 ` Jeremiah Mahler
0 siblings, 1 reply; 13+ messages in thread
From: Jeff King @ 2014-05-16 8:14 UTC (permalink / raw)
To: Jeremiah Mahler; +Cc: Jonathan Nieder, git
On Thu, May 15, 2014 at 06:31:21PM -0700, Jeremiah Mahler wrote:
> 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.
I think this version looks nicer than the original.
A few questions/comments:
> +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;
> +}
We have routines for reading directly into a strbuf, which eliminates
the need for this 1024-byte limit. We even have a wrapper that can make
this much shorter:
struct strbuf buf = STRBUF_INIT;
strbuf_read_file(&buf, arg, 128);
*signature = strbuf_detach(&buf, NULL);
I notice that you ignore any errors. Is that intentional (so that we
silently ignore missing --signature files)? If so, should we actually
treat it as an empty file (e.g., in my code above, we always set
*signature, even if the file was missing)?
Finally, I suspect that:
cd path/in/repo &&
git format-patch --signature-file=foo
will not work, as we chdir() to the toplevel before evaluating the
arguments. You can fix that either by using parse-option's OPT_FILENAME
to save the filename, followed by opening the file after all arguments
are processed; or by manually fixing up the filename.
Since parse-options already knows how to do this fixup (it does it for
OPT_FILENAME), it would be nice if it were a flag rather than a full
type, so you could specify at as an option to your callback here:
> + { OPTION_CALLBACK, 0, "signature-file", &signature, N_("signature-file"),
> + N_("add a signature from contents of a file"),
> + PARSE_OPT_NONEG, signature_file_callback },
Noticing your OPT_NONEG, though, I wonder if you should simply use an
OPT_FILENAME. I would expect --no-signature-file to countermand any
earlier --signature-file on the command-line (or if we eventually grow a
config option, which seems sensible, it would tell git to ignore the
option). The usual ordering for that is:
1. Read config and store format.signatureFile as a string
"signature_file".
2. Parse arguments. --signature-file=... sets signature_file, and
--no-signature-file sets it to NULL.
3. If signature_file is non-NULL, load it.
And I believe OPT_FILENAME will implement (2) for you.
One downside of doing it this way is that you need to specify what will
happen when both "--signature" (or format.signature) and
"--signature-file" are set. With your current code, I think
"--signature=foo --signature-file=bar" will take the second one. I think
it would be fine to prefer one to the other, or to just notice that both
are set and complain.
-Peff
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v2] format-patch --signature-file <file>
2014-05-16 8:14 ` Jeff King
@ 2014-05-17 7:25 ` Jeremiah Mahler
2014-05-17 7:42 ` Jeff King
0 siblings, 1 reply; 13+ messages in thread
From: Jeremiah Mahler @ 2014-05-17 7:25 UTC (permalink / raw)
To: Jeff King; +Cc: git
On Fri, May 16, 2014 at 04:14:45AM -0400, Jeff King wrote:
> On Thu, May 15, 2014 at 06:31:21PM -0700, Jeremiah Mahler wrote:
...
>
> A few questions/comments:
>
> > +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;
> > +}
>
> We have routines for reading directly into a strbuf, which eliminates
> the need for this 1024-byte limit. We even have a wrapper that can make
> this much shorter:
>
> struct strbuf buf = STRBUF_INIT;
>
> strbuf_read_file(&buf, arg, 128);
> *signature = strbuf_detach(&buf, NULL);
>
Yes, that is much cleaner.
The memory returned by strbuf_detach() will have to be freed as well.
> I notice that you ignore any errors. Is that intentional (so that we
> silently ignore missing --signature files)? If so, should we actually
> treat it as an empty file (e.g., in my code above, we always set
> *signature, even if the file was missing)?
>
> Finally, I suspect that:
>
> cd path/in/repo &&
> git format-patch --signature-file=foo
>
> will not work, as we chdir() to the toplevel before evaluating the
> arguments. You can fix that either by using parse-option's OPT_FILENAME
> to save the filename, followed by opening the file after all arguments
> are processed; or by manually fixing up the filename.
>
Yes, it wouldn't have worked.
Using OPT_FILENAME is a much better solution.
> Since parse-options already knows how to do this fixup (it does it for
> OPT_FILENAME), it would be nice if it were a flag rather than a full
> type, so you could specify at as an option to your callback here:
>
> > + { OPTION_CALLBACK, 0, "signature-file", &signature, N_("signature-file"),
> > + N_("add a signature from contents of a file"),
> > + PARSE_OPT_NONEG, signature_file_callback },
>
> Noticing your OPT_NONEG, though, I wonder if you should simply use an
> OPT_FILENAME. I would expect --no-signature-file to countermand any
> earlier --signature-file on the command-line (or if we eventually grow a
> config option, which seems sensible, it would tell git to ignore the
> option). The usual ordering for that is:
>
Another case is when both --signature="foo" and --no-signature-file are used.
Currently this would only negate the file option which would allow
the --signature option to be used.
> 1. Read config and store format.signatureFile as a string
> "signature_file".
>
> 2. Parse arguments. --signature-file=... sets signature_file, and
> --no-signature-file sets it to NULL.
>
> 3. If signature_file is non-NULL, load it.
>
> And I believe OPT_FILENAME will implement (2) for you.
>
> One downside of doing it this way is that you need to specify what will
> happen when both "--signature" (or format.signature) and
> "--signature-file" are set. With your current code, I think
> "--signature=foo --signature-file=bar" will take the second one. I think
> it would be fine to prefer one to the other, or to just notice that both
> are set and complain.
>
> -Peff
Having --signature-file override --signature seems simpler to implement.
The signature variable has a default value which complicates
determining whether it was set or not.
Thanks for the great suggestions.
--
Jeremiah Mahler
jmmahler@gmail.com
http://github.com/jmahler
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v2] format-patch --signature-file <file>
2014-05-17 7:25 ` Jeremiah Mahler
@ 2014-05-17 7:42 ` Jeff King
2014-05-17 8:59 ` Jeremiah Mahler
0 siblings, 1 reply; 13+ messages in thread
From: Jeff King @ 2014-05-17 7:42 UTC (permalink / raw)
To: Jeremiah Mahler; +Cc: git
On Sat, May 17, 2014 at 12:25:48AM -0700, Jeremiah Mahler wrote:
> > We have routines for reading directly into a strbuf, which eliminates
> > the need for this 1024-byte limit. We even have a wrapper that can make
> > this much shorter:
> >
> > struct strbuf buf = STRBUF_INIT;
> >
> > strbuf_read_file(&buf, arg, 128);
> > *signature = strbuf_detach(&buf, NULL);
> >
>
> Yes, that is much cleaner.
> The memory returned by strbuf_detach() will have to be freed as well.
In cases like this, we often let the memory leak. It's in a global that
stays valid through the whole program, so we just let the program's exit
clean it up.
> Having --signature-file override --signature seems simpler to implement.
> The signature variable has a default value which complicates
> determining whether it was set or not.
Yeah, the default value complicates it. I think you can handle that just
by moving the default to the main logic, like:
static const char *signature;
static const char *signature_file;
...
if (signature) {
if (signature_file)
die("you cannot specify both a signature and a signature-file");
/* otherwise, we already have the value */
} else if (signature_file) {
struct strbuf buf = STRBUF_INIT;
strbuf_read(&buf, signature_file, 128);
signature = strbuf_detach(&buf);
} else
signature = git_version_string;
and as a bonus, that keeps all of the logic together in one (fairly
readable) chain.
-Peff
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v2] format-patch --signature-file <file>
2014-05-17 7:42 ` Jeff King
@ 2014-05-17 8:59 ` Jeremiah Mahler
2014-05-17 10:00 ` Jeff King
0 siblings, 1 reply; 13+ messages in thread
From: Jeremiah Mahler @ 2014-05-17 8:59 UTC (permalink / raw)
To: Jeff King; +Cc: git
On Sat, May 17, 2014 at 03:42:24AM -0400, Jeff King wrote:
> On Sat, May 17, 2014 at 12:25:48AM -0700, Jeremiah Mahler wrote:
>
> > > We have routines for reading directly into a strbuf, which eliminates
> > > the need for this 1024-byte limit. We even have a wrapper that can make
> > > this much shorter:
> > >
> > > struct strbuf buf = STRBUF_INIT;
> > >
> > > strbuf_read_file(&buf, arg, 128);
> > > *signature = strbuf_detach(&buf, NULL);
> > >
> >
> > Yes, that is much cleaner.
> > The memory returned by strbuf_detach() will have to be freed as well.
>
> In cases like this, we often let the memory leak. It's in a global that
> stays valid through the whole program, so we just let the program's exit
> clean it up.
>
It bugs me but I see your point.
It works just fine in this situation.
> > Having --signature-file override --signature seems simpler to implement.
> > The signature variable has a default value which complicates
> > determining whether it was set or not.
>
> Yeah, the default value complicates it. I think you can handle that just
> by moving the default to the main logic, like:
>
> static const char *signature;
> static const char *signature_file;
>
> ...
>
> if (signature) {
> if (signature_file)
> die("you cannot specify both a signature and a signature-file");
> /* otherwise, we already have the value */
> } else if (signature_file) {
> struct strbuf buf = STRBUF_INIT;
> strbuf_read(&buf, signature_file, 128);
> signature = strbuf_detach(&buf);
> } else
> signature = git_version_string;
>
Before, --no-signature would clear the &signature.
With this code it sees it as not being set and assigns
the default version string.
> and as a bonus, that keeps all of the logic together in one (fairly
> readable) chain.
>
> -Peff
--
Jeremiah Mahler
jmmahler@gmail.com
http://github.com/jmahler
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v2] format-patch --signature-file <file>
2014-05-17 8:59 ` Jeremiah Mahler
@ 2014-05-17 10:00 ` Jeff King
2014-05-17 15:39 ` Jeremiah Mahler
0 siblings, 1 reply; 13+ messages in thread
From: Jeff King @ 2014-05-17 10:00 UTC (permalink / raw)
To: Jeremiah Mahler; +Cc: git
On Sat, May 17, 2014 at 01:59:11AM -0700, Jeremiah Mahler wrote:
> > if (signature) {
> > if (signature_file)
> > die("you cannot specify both a signature and a signature-file");
> > /* otherwise, we already have the value */
> > } else if (signature_file) {
> > struct strbuf buf = STRBUF_INIT;
> > strbuf_read(&buf, signature_file, 128);
> > signature = strbuf_detach(&buf);
> > } else
> > signature = git_version_string;
> >
>
> Before, --no-signature would clear the &signature.
> With this code it sees it as not being set and assigns
> the default version string.
Ah, you're right. Thanks for catching it.
If you wanted to know whether it was set, I guess you'd have to compare
it to the default, like:
if (signature_file) {
if (signature && signature != git_version_string)
die("you cannot specify both a signature and a signature-file");
... read signature file ...
}
though it's a bit ugly that this code has to know what the default is.
Having signature-file take precedence is OK with me, but it feels
somewhat arbitrary to me from the user's perspective.
-Peff
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v2] format-patch --signature-file <file>
2014-05-17 10:00 ` Jeff King
@ 2014-05-17 15:39 ` Jeremiah Mahler
2014-05-19 16:54 ` Junio C Hamano
0 siblings, 1 reply; 13+ messages in thread
From: Jeremiah Mahler @ 2014-05-17 15:39 UTC (permalink / raw)
To: Jeff King; +Cc: git
On Sat, May 17, 2014 at 06:00:14AM -0400, Jeff King wrote:
> On Sat, May 17, 2014 at 01:59:11AM -0700, Jeremiah Mahler wrote:
>
> > > if (signature) {
> > > if (signature_file)
> > > die("you cannot specify both a signature and a signature-file");
> > > /* otherwise, we already have the value */
> > > } else if (signature_file) {
> > > struct strbuf buf = STRBUF_INIT;
> > > strbuf_read(&buf, signature_file, 128);
> > > signature = strbuf_detach(&buf);
> > > } else
> > > signature = git_version_string;
> > >
> >
> > Before, --no-signature would clear the &signature.
> > With this code it sees it as not being set and assigns
> > the default version string.
>
> Ah, you're right. Thanks for catching it.
>
> If you wanted to know whether it was set, I guess you'd have to compare
> it to the default, like:
>
> if (signature_file) {
> if (signature && signature != git_version_string)
> die("you cannot specify both a signature and a signature-file");
> ... read signature file ...
> }
>
That works until someone changes the default value.
But if they did that then some tests should fail.
I like the address comparision which avoids a string comparision.
> though it's a bit ugly that this code has to know what the default is.
> Having signature-file take precedence is OK with me, but it feels
> somewhat arbitrary to me from the user's perspective.
>
> -Peff
--
Jeremiah Mahler
jmmahler@gmail.com
http://github.com/jmahler
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v2] format-patch --signature-file <file>
2014-05-17 15:39 ` Jeremiah Mahler
@ 2014-05-19 16:54 ` Junio C Hamano
2014-05-20 5:46 ` Jeremiah Mahler
0 siblings, 1 reply; 13+ messages in thread
From: Junio C Hamano @ 2014-05-19 16:54 UTC (permalink / raw)
To: Jeremiah Mahler; +Cc: Jeff King, git
Jeremiah Mahler <jmmahler@gmail.com> writes:
> On Sat, May 17, 2014 at 06:00:14AM -0400, Jeff King wrote:
>>
>> If you wanted to know whether it was set, I guess you'd have to compare
>> it to the default, like:
>>
>> if (signature_file) {
>> if (signature && signature != git_version_string)
>> die("you cannot specify both a signature and a signature-file");
>> ... read signature file ...
>> }
>>
>
> That works until someone changes the default value.
> But if they did that then some tests should fail.
>
> I like the address comparision which avoids a string comparision.
Well, "avoids" is not quite a correct phrasing, because !strcmp()
would be wrong there. You cannot tell "the user did not set
anything and the variable stayed as the default" and "the user
explicitly gave us a string but it happened to be the same as the
default" apart with !strcmp(). Address comparison is not just
"avoids" but is the right thing to do in this case.
>> though it's a bit ugly that this code has to know what the default is.
Avoiding that is easy with an indirection, no? Something like this
at the top:
static const char *the_default_signature = git_version_string;
static const char *signature = the_default_signature;
and comparing to see if signature points at the same address as
the_default_signature would give you what you want, I think.
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v2] format-patch --signature-file <file>
2014-05-19 16:54 ` Junio C Hamano
@ 2014-05-20 5:46 ` Jeremiah Mahler
2014-05-20 6:21 ` Jeff King
0 siblings, 1 reply; 13+ messages in thread
From: Jeremiah Mahler @ 2014-05-20 5:46 UTC (permalink / raw)
To: Junio C Hamano; +Cc: git
On Mon, May 19, 2014 at 09:54:33AM -0700, Junio C Hamano wrote:
> Jeremiah Mahler <jmmahler@gmail.com> writes:
>
> > On Sat, May 17, 2014 at 06:00:14AM -0400, Jeff King wrote:
> >>
>
> Avoiding that is easy with an indirection, no? Something like this
> at the top:
>
> static const char *the_default_signature = git_version_string;
> static const char *signature = the_default_signature;
>
> and comparing to see if signature points at the same address as
> the_default_signature would give you what you want, I think.
I like your suggestion for a default signature variable.
Unfortunately, C doesn't like it as much.
static const char *the_default_signature = git_version_string;
static const char *signature = the_default_signature; // ERROR
// initializer element is not constant
--
Jeremiah Mahler
jmmahler@gmail.com
http://github.com/jmahler
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v2] format-patch --signature-file <file>
2014-05-20 5:46 ` Jeremiah Mahler
@ 2014-05-20 6:21 ` Jeff King
2014-05-20 15:06 ` Junio C Hamano
0 siblings, 1 reply; 13+ messages in thread
From: Jeff King @ 2014-05-20 6:21 UTC (permalink / raw)
To: Jeremiah Mahler; +Cc: Junio C Hamano, git
On Mon, May 19, 2014 at 10:46:21PM -0700, Jeremiah Mahler wrote:
> > Avoiding that is easy with an indirection, no? Something like this
> > at the top:
> >
> > static const char *the_default_signature = git_version_string;
> > static const char *signature = the_default_signature;
> >
> > and comparing to see if signature points at the same address as
> > the_default_signature would give you what you want, I think.
>
> I like your suggestion for a default signature variable.
> Unfortunately, C doesn't like it as much.
>
> static const char *the_default_signature = git_version_string;
> static const char *signature = the_default_signature; // ERROR
> // initializer element is not constant
You could do:
#define DEFAULT_SIGNATURE git_version_string
static const char *signature = DEFAULT_SIGNATURE;
...
if (signature == DEFAULT_SIGNATURE)
...
but maybe that is getting a little unwieldy, considering the scope of
the original problem.
-Peff
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v2] format-patch --signature-file <file>
2014-05-20 6:21 ` Jeff King
@ 2014-05-20 15:06 ` Junio C Hamano
2014-05-21 0:45 ` Jeremiah Mahler
0 siblings, 1 reply; 13+ messages in thread
From: Junio C Hamano @ 2014-05-20 15:06 UTC (permalink / raw)
To: Jeff King; +Cc: Jeremiah Mahler, git
Jeff King <peff@peff.net> writes:
> You could do:
>
> #define DEFAULT_SIGNATURE git_version_string
> static const char *signature = DEFAULT_SIGNATURE;
>
> ...
>
> if (signature == DEFAULT_SIGNATURE)
> ...
>
> but maybe that is getting a little unwieldy, considering the scope of
> the original problem.
I agree. It is an invitation for doing something like
#define DEFAULT_SIGNATURE "-- \nfoo bar\n"
which defeats the purpose.
I have an unrelated and larger design level suggestion, but it may
be better for me to refrain from sending it during the -rc freeze.
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v2] format-patch --signature-file <file>
2014-05-20 15:06 ` Junio C Hamano
@ 2014-05-21 0:45 ` Jeremiah Mahler
0 siblings, 0 replies; 13+ messages in thread
From: Jeremiah Mahler @ 2014-05-21 0:45 UTC (permalink / raw)
To: Junio C Hamano; +Cc: git, Jeff King
On Tue, May 20, 2014 at 08:06:50AM -0700, Junio C Hamano wrote:
> Jeff King <peff@peff.net> writes:
>
> > You could do:
> >
> > #define DEFAULT_SIGNATURE git_version_string
> > static const char *signature = DEFAULT_SIGNATURE;
> >
> > ...
> >
> > if (signature == DEFAULT_SIGNATURE)
> > ...
> >
> > but maybe that is getting a little unwieldy, considering the scope of
> > the original problem.
>
> I agree. It is an invitation for doing something like
>
> #define DEFAULT_SIGNATURE "-- \nfoo bar\n"
>
> which defeats the purpose.
>
> I have an unrelated and larger design level suggestion, but it may
> be better for me to refrain from sending it during the -rc freeze.
I will take DEFAULT_SIGNATURE out of the next patch revision.
--
Jeremiah Mahler
jmmahler@gmail.com
http://github.com/jmahler
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2014-05-21 0:46 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-05-16 1:31 [PATCH v2] format-patch --signature-file <file> Jeremiah Mahler
2014-05-16 1:31 ` Jeremiah Mahler
2014-05-16 8:14 ` Jeff King
2014-05-17 7:25 ` Jeremiah Mahler
2014-05-17 7:42 ` Jeff King
2014-05-17 8:59 ` Jeremiah Mahler
2014-05-17 10:00 ` Jeff King
2014-05-17 15:39 ` Jeremiah Mahler
2014-05-19 16:54 ` Junio C Hamano
2014-05-20 5:46 ` Jeremiah Mahler
2014-05-20 6:21 ` Jeff King
2014-05-20 15:06 ` Junio C Hamano
2014-05-21 0:45 ` 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).