pretty: add support for "valueonly" option in %(trailers)
With the new "key=" option to %(trailers) it often makes little sense to show the key, as it by definition already is knows which trailer is printed there. This new "valueonly" option makes it omit the key when printing trailers. E.g.: $ git show -s --pretty='%s%n%(trailers:key=Signed-off-by,valueonly)' aaaa88182 will show: > upload-pack: fix broken if/else chain in config callback > Jeff King <peff@peff.net> > Junio C Hamano <gitster@pobox.com> Signed-off-by: Anders Waldenborg <anders@0x63.nu> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Anders Waldenborg committed
Jan 28, 2019 at 22:33 UTC
d9b936db5226ed4b87d42a2c91324adc50c768b6
5 files changed
+15
-3
Documentation/pretty-formats.txt
+2
@@ -243,6 +243,8 @@ endif::git-rev-list[]
243
option was given. In same way as to for `only` it can be followed
244
by an equal sign and explicit value. E.g.,
245
`%(trailers:only,unfold=true)` unfolds and shows all trailer lines.
246
+** 'valueonly[=val]': skip over the key part of the trailer line and only
247
+ show the value part. Also this optionally allows explicit value.
248
249
NOTE: Some placeholders may depend on other options given to the
250
revision traversal engine. For example, the `%g*` reflog options will
pretty.c
+2
-1
@@ -1391,7 +1391,8 @@ static size_t format_commit_one(struct strbuf *sb, /* in UTF-8 */
1391
opts.filter_data = &filter_list;
1392
opts.only_trailers = 1;
1393
} else if (!match_placeholder_bool_arg(arg, "only", &arg, &opts.only_trailers) &&
1394
- !match_placeholder_bool_arg(arg, "unfold", &arg, &opts.unfold))
1394
+ !match_placeholder_bool_arg(arg, "unfold", &arg, &opts.unfold) &&
1395
+ !match_placeholder_bool_arg(arg, "valueonly", &arg, &opts.value_only))
1396
break;
1397
}
1398
}
t/t4205-log-pretty-formats.sh
+6
@@ -673,6 +673,12 @@ test_expect_success '%(trailers:key) without value is error' '
673
test_cmp expect actual
674
'
675
676
+test_expect_success '%(trailers:key=foo,valueonly) shows only value' '
677
+ git log --no-walk --pretty="format:%(trailers:key=Acked-by,valueonly)" >actual &&
678
+ echo "A U Thor <author@example.com>" >expect &&
679
+ test_cmp expect actual
680
+'
681
+
682
test_expect_success 'trailer parsing not fooled by --- line' '
683
git commit --allow-empty -F - <<-\EOF &&
684
this is the subject
trailer.c
+4
-2
@@ -1150,8 +1150,10 @@ static void format_trailer_info(struct strbuf *out,
1150
if (!opts->filter || opts->filter(&tok, opts->filter_data)) {
1151
if (opts->unfold)
1152
unfold_value(&val);
1153
-
1154
- strbuf_addf(out, "%s: %s\n", tok.buf, val.buf);
1153
+ if (!opts->value_only)
1154
+ strbuf_addf(out, "%s: ", tok.buf);
1155
+ strbuf_addbuf(out, &val);
1156
+ strbuf_addch(out, '\n');
1157
}
1158
strbuf_release(&tok);
1159
strbuf_release(&val);
trailer.h
+1
@@ -72,6 +72,7 @@ struct process_trailer_options {
72
int only_input;
73
int unfold;
74
int no_divider;
75
+ int value_only;
76
int (*filter)(const struct strbuf *, void *);
77
void *filter_data;
78
};