pretty: Introduce ' ' modifier to add space if non-empty

We have the '+' modifiier which helps combine format specifiers which
may possibly be empty, e.g. '%s%+b%n'.

Introduce an analogous ' ' (space) modifier which adds a space before
non-empty items. This helps assemble "one line type" format specifiers.

Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Michael J Gruber 2010-06-14 18:12:29 +02:00 committed by Junio C Hamano
parent 6068cdcc83
commit 7b88176e9b
3 changed files with 24 additions and 3 deletions

View File

@ -159,6 +159,10 @@ If you add a `-` (minus sign) after '%' of a placeholder, line-feeds that
immediately precede the expansion are deleted if and only if the immediately precede the expansion are deleted if and only if the
placeholder expands to an empty string. placeholder expands to an empty string.
If you add a ` ` (space) after '%' of a placeholder, a space
is inserted immediately before the expansion if and only if the
placeholder expands to a non-empty string.
* 'tformat:' * 'tformat:'
+ +
The 'tformat:' format works exactly like 'format:', except that it The 'tformat:' format works exactly like 'format:', except that it

View File

@ -942,6 +942,7 @@ static size_t format_commit_item(struct strbuf *sb, const char *placeholder,
NO_MAGIC, NO_MAGIC,
ADD_LF_BEFORE_NON_EMPTY, ADD_LF_BEFORE_NON_EMPTY,
DEL_LF_BEFORE_EMPTY, DEL_LF_BEFORE_EMPTY,
ADD_SP_BEFORE_NON_EMPTY,
} magic = NO_MAGIC; } magic = NO_MAGIC;
switch (placeholder[0]) { switch (placeholder[0]) {
@ -951,6 +952,9 @@ static size_t format_commit_item(struct strbuf *sb, const char *placeholder,
case '+': case '+':
magic = ADD_LF_BEFORE_NON_EMPTY; magic = ADD_LF_BEFORE_NON_EMPTY;
break; break;
case ' ':
magic = ADD_SP_BEFORE_NON_EMPTY;
break;
default: default:
break; break;
} }
@ -965,8 +969,11 @@ static size_t format_commit_item(struct strbuf *sb, const char *placeholder,
if ((orig_len == sb->len) && magic == DEL_LF_BEFORE_EMPTY) { if ((orig_len == sb->len) && magic == DEL_LF_BEFORE_EMPTY) {
while (sb->len && sb->buf[sb->len - 1] == '\n') while (sb->len && sb->buf[sb->len - 1] == '\n')
strbuf_setlen(sb, sb->len - 1); strbuf_setlen(sb, sb->len - 1);
} else if ((orig_len != sb->len) && magic == ADD_LF_BEFORE_NON_EMPTY) { } else if (orig_len != sb->len) {
if (magic == ADD_LF_BEFORE_NON_EMPTY)
strbuf_insert(sb, orig_len, "\n", 1); strbuf_insert(sb, orig_len, "\n", 1);
else if (magic == ADD_SP_BEFORE_NON_EMPTY)
strbuf_insert(sb, orig_len, " ", 1);
} }
return consumed + 1; return consumed + 1;
} }
@ -976,7 +983,7 @@ static size_t userformat_want_item(struct strbuf *sb, const char *placeholder,
{ {
struct userformat_want *w = context; struct userformat_want *w = context;
if (*placeholder == '+' || *placeholder == '-') if (*placeholder == '+' || *placeholder == '-' || *placeholder == ' ')
placeholder++; placeholder++;
switch (*placeholder) { switch (*placeholder) {

View File

@ -200,6 +200,16 @@ test_expect_success 'add LF before non-empty (2)' '
grep "^$" actual grep "^$" actual
' '
test_expect_success 'add SP before non-empty (1)' '
git show -s --pretty=format:"%s% bThanks" HEAD^^ >actual &&
test $(wc -w <actual) = 2
'
test_expect_success 'add SP before non-empty (2)' '
git show -s --pretty=format:"%s% sThanks" HEAD^^ >actual &&
test $(wc -w <actual) = 4
'
test_expect_success '--abbrev' ' test_expect_success '--abbrev' '
echo SHORT SHORT SHORT >expect2 && echo SHORT SHORT SHORT >expect2 &&
echo LONG LONG LONG >expect3 && echo LONG LONG LONG >expect3 &&