Merge branch 'tb/delimit-pretty-trailers-args-with-comma'

The feature that allows --pretty='%(trailers)' to take modifiers
like "fold" and "only" used to separate these modifiers with a
comma, i.e. "%(trailers:fold:only)", but we changed our mind and
use a comma, i.e. "%(trailers:fold,only)".  Fast track this change
before this new feature becomes part of any official release.

* tb/delimit-pretty-trailers-args-with-comma:
  pretty.c: delimit "%(trailers)" arguments with ","
This commit is contained in:
Junio C Hamano 2017-10-07 16:27:52 +09:00
commit 436b35942c
2 changed files with 30 additions and 7 deletions

View File

@ -1056,6 +1056,24 @@ static size_t parse_padding_placeholder(struct strbuf *sb,
return 0;
}
static int match_placeholder_arg(const char *to_parse, const char *candidate,
const char **end)
{
const char *p;
if (!(skip_prefix(to_parse, candidate, &p)))
return 0;
if (*p == ',') {
*end = p + 1;
return 1;
}
if (*p == ')') {
*end = p;
return 1;
}
return 0;
}
static size_t format_commit_one(struct strbuf *sb, /* in UTF-8 */
const char *placeholder,
void *context)
@ -1285,11 +1303,16 @@ static size_t format_commit_one(struct strbuf *sb, /* in UTF-8 */
if (skip_prefix(placeholder, "(trailers", &arg)) {
struct process_trailer_options opts = PROCESS_TRAILER_OPTIONS_INIT;
while (*arg == ':') {
if (skip_prefix(arg, ":only", &arg))
opts.only_trailers = 1;
else if (skip_prefix(arg, ":unfold", &arg))
opts.unfold = 1;
if (*arg == ':') {
arg++;
for (;;) {
if (match_placeholder_arg(arg, "only", &arg))
opts.only_trailers = 1;
else if (match_placeholder_arg(arg, "unfold", &arg))
opts.unfold = 1;
else
break;
}
}
if (*arg == ')') {
format_trailers_from_commit(sb, msg + c->subject_off, &opts);

View File

@ -588,8 +588,8 @@ test_expect_success '%(trailers:unfold) unfolds trailers' '
'
test_expect_success ':only and :unfold work together' '
git log --no-walk --pretty="%(trailers:only:unfold)" >actual &&
git log --no-walk --pretty="%(trailers:unfold:only)" >reverse &&
git log --no-walk --pretty="%(trailers:only,unfold)" >actual &&
git log --no-walk --pretty="%(trailers:unfold,only)" >reverse &&
test_cmp actual reverse &&
{
grep -v patch.description <trailers | unfold &&