Skip to content

Commit d9b936d

Browse files
wandersgitster
authored andcommitted
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)' aaaa881 will show: > upload-pack: fix broken if/else chain in config callback > Jeff King <[email protected]> > Junio C Hamano <[email protected]> Signed-off-by: Anders Waldenborg <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 250bea0 commit d9b936d

File tree

5 files changed

+15
-3
lines changed

5 files changed

+15
-3
lines changed

Documentation/pretty-formats.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,8 @@ endif::git-rev-list[]
243243
option was given. In same way as to for `only` it can be followed
244244
by an equal sign and explicit value. E.g.,
245245
`%(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.
246248

247249
NOTE: Some placeholders may depend on other options given to the
248250
revision traversal engine. For example, the `%g*` reflog options will

pretty.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1391,7 +1391,8 @@ static size_t format_commit_one(struct strbuf *sb, /* in UTF-8 */
13911391
opts.filter_data = &filter_list;
13921392
opts.only_trailers = 1;
13931393
} 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))
13951396
break;
13961397
}
13971398
}

t/t4205-log-pretty-formats.sh

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -673,6 +673,12 @@ test_expect_success '%(trailers:key) without value is error' '
673673
test_cmp expect actual
674674
'
675675

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 <[email protected]>" >expect &&
679+
test_cmp expect actual
680+
'
681+
676682
test_expect_success 'trailer parsing not fooled by --- line' '
677683
git commit --allow-empty -F - <<-\EOF &&
678684
this is the subject

trailer.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1150,8 +1150,10 @@ static void format_trailer_info(struct strbuf *out,
11501150
if (!opts->filter || opts->filter(&tok, opts->filter_data)) {
11511151
if (opts->unfold)
11521152
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');
11551157
}
11561158
strbuf_release(&tok);
11571159
strbuf_release(&val);

trailer.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ struct process_trailer_options {
7272
int only_input;
7373
int unfold;
7474
int no_divider;
75+
int value_only;
7576
int (*filter)(const struct strbuf *, void *);
7677
void *filter_data;
7778
};

0 commit comments

Comments
 (0)