interpret-trailers: add --parse convenience option

The last few commits have added command line options that
can turn interpret-trailers into a parsing tool. Since
they'd most often be used together, let's provide a
convenient single option for callers to invoke this mode.

This is implemented as a callback rather than a boolean so
that its effect is applied immediately, as if those options
had been specified. Later options can then override them.
E.g.:

  git interpret-trailers --parse --no-unfold

would work.

Let's also update the documentation to make clear that this
parsing mode behaves quite differently than the normal
"add trailers to the input" mode.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Jeff King
2017-08-15 06:23:34 -04:00
committed by Junio C Hamano
parent 000023961a
commit 99e09dafd7
2 changed files with 26 additions and 7 deletions

View File

@ -3,24 +3,27 @@ git-interpret-trailers(1)
NAME NAME
---- ----
git-interpret-trailers - help add structured information into commit messages git-interpret-trailers - add or parse structured information in commit messages
SYNOPSIS SYNOPSIS
-------- --------
[verse] [verse]
'git interpret-trailers' [--in-place] [--trim-empty] [(--trailer <token>[(=|:)<value>])...] [<file>...] 'git interpret-trailers' [options] [(--trailer <token>[(=|:)<value>])...] [<file>...]
'git interpret-trailers' [options] [--parse] [<file>...]
DESCRIPTION DESCRIPTION
----------- -----------
Help adding 'trailers' lines, that look similar to RFC 822 e-mail Help parsing or adding 'trailers' lines, that look similar to RFC 822 e-mail
headers, at the end of the otherwise free-form part of a commit headers, at the end of the otherwise free-form part of a commit
message. message.
This command reads some patches or commit messages from either the This command reads some patches or commit messages from either the
<file> arguments or the standard input if no <file> is specified. Then <file> arguments or the standard input if no <file> is specified. If
this command applies the arguments passed using the `--trailer` `--parse` is specified, the output consists of the parsed trailers.
option, if any, to the commit message part of each input file. The
result is emitted on the standard output. Otherwise, the this command applies the arguments passed using the
`--trailer` option, if any, to the commit message part of each input
file. The result is emitted on the standard output.
Some configuration variables control the way the `--trailer` arguments Some configuration variables control the way the `--trailer` arguments
are applied to each commit message and the way any existing trailer in are applied to each commit message and the way any existing trailer in
@ -92,6 +95,10 @@ OPTIONS
Remove any whitespace-continuation in trailers, so that each Remove any whitespace-continuation in trailers, so that each
trailer appears on a line by itself with its full content. trailer appears on a line by itself with its full content.
--parse::
A convenience alias for `--only-trailers --only-input
--unfold`.
CONFIGURATION VARIABLES CONFIGURATION VARIABLES
----------------------- -----------------------

View File

@ -16,6 +16,16 @@ static const char * const git_interpret_trailers_usage[] = {
NULL NULL
}; };
static int parse_opt_parse(const struct option *opt, const char *arg,
int unset)
{
struct process_trailer_options *v = opt->value;
v->only_trailers = 1;
v->only_input = 1;
v->unfold = 1;
return 0;
}
int cmd_interpret_trailers(int argc, const char **argv, const char *prefix) int cmd_interpret_trailers(int argc, const char **argv, const char *prefix)
{ {
struct process_trailer_options opts = PROCESS_TRAILER_OPTIONS_INIT; struct process_trailer_options opts = PROCESS_TRAILER_OPTIONS_INIT;
@ -27,6 +37,8 @@ int cmd_interpret_trailers(int argc, const char **argv, const char *prefix)
OPT_BOOL(0, "only-trailers", &opts.only_trailers, N_("output only the trailers")), OPT_BOOL(0, "only-trailers", &opts.only_trailers, N_("output only the trailers")),
OPT_BOOL(0, "only-input", &opts.only_input, N_("do not apply config rules")), OPT_BOOL(0, "only-input", &opts.only_input, N_("do not apply config rules")),
OPT_BOOL(0, "unfold", &opts.unfold, N_("join whitespace-continued values")), OPT_BOOL(0, "unfold", &opts.unfold, N_("join whitespace-continued values")),
{ OPTION_CALLBACK, 0, "parse", &opts, NULL, N_("set parsing options"),
PARSE_OPT_NOARG | PARSE_OPT_NONEG, parse_opt_parse },
OPT_STRING_LIST(0, "trailer", &trailers, N_("trailer"), OPT_STRING_LIST(0, "trailer", &trailers, N_("trailer"),
N_("trailer(s) to add")), N_("trailer(s) to add")),
OPT_END() OPT_END()