strbuf_add_wrapped_text(): factor out strbuf_add_indented_text()
Add a new helper function, strbuf_add_indented_text(), to indent text without a width limit, and call it from strbuf_add_wrapped_text(). It respects both indent (applied to the first line) and indent2 (applied to the rest of the lines); indent2 was ignored by the indent-only path of strbuf_add_wrapped_text() before the patch. Two simple test cases are added, one exercising strbuf_add_wrapped_text() and the other strbuf_add_indented_text(). Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
b482759983
commit
37bb5d7443
@ -63,6 +63,27 @@ test_expect_success 'format' '
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
cat > expect << EOF
|
||||
This is
|
||||
the sixth
|
||||
commit.
|
||||
This is
|
||||
the fifth
|
||||
commit.
|
||||
EOF
|
||||
|
||||
test_expect_success 'format %w(12,1,2)' '
|
||||
|
||||
git log -2 --format="%w(12,1,2)This is the %s commit." > actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'format %w(,1,2)' '
|
||||
|
||||
git log -2 --format="%w(,1,2)This is%nthe %s%ncommit." > actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
cat > expect << EOF
|
||||
804a787 sixth
|
||||
394ef78 fifth
|
||||
|
26
utf8.c
26
utf8.c
@ -298,6 +298,22 @@ static void print_spaces(struct strbuf *buf, int count)
|
||||
strbuf_write(buf, s, count);
|
||||
}
|
||||
|
||||
static void strbuf_add_indented_text(struct strbuf *buf, const char *text,
|
||||
int indent, int indent2)
|
||||
{
|
||||
if (indent < 0)
|
||||
indent = 0;
|
||||
while (*text) {
|
||||
const char *eol = strchrnul(text, '\n');
|
||||
if (*eol == '\n')
|
||||
eol++;
|
||||
print_spaces(buf, indent);
|
||||
strbuf_write(buf, text, eol - text);
|
||||
text = eol;
|
||||
indent = indent2;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Wrap the text, if necessary. The variable indent is the indent for the
|
||||
* first line, indent2 is the indent for all other lines.
|
||||
@ -311,15 +327,7 @@ int strbuf_add_wrapped_text(struct strbuf *buf,
|
||||
const char *bol = text, *space = NULL;
|
||||
|
||||
if (width <= 0) {
|
||||
/* just indent */
|
||||
while (*text) {
|
||||
const char *eol = strchrnul(text, '\n');
|
||||
if (*eol == '\n')
|
||||
eol++;
|
||||
print_spaces(buf, indent);
|
||||
strbuf_write(buf, text, eol-text);
|
||||
text = eol;
|
||||
}
|
||||
strbuf_add_indented_text(buf, text, indent, indent2);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user