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
|
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
|
cat > expect << EOF
|
||||||
804a787 sixth
|
804a787 sixth
|
||||||
394ef78 fifth
|
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);
|
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
|
* Wrap the text, if necessary. The variable indent is the indent for the
|
||||||
* first line, indent2 is the indent for all other lines.
|
* 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;
|
const char *bol = text, *space = NULL;
|
||||||
|
|
||||||
if (width <= 0) {
|
if (width <= 0) {
|
||||||
/* just indent */
|
strbuf_add_indented_text(buf, text, indent, indent2);
|
||||||
while (*text) {
|
|
||||||
const char *eol = strchrnul(text, '\n');
|
|
||||||
if (*eol == '\n')
|
|
||||||
eol++;
|
|
||||||
print_spaces(buf, indent);
|
|
||||||
strbuf_write(buf, text, eol-text);
|
|
||||||
text = eol;
|
|
||||||
}
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user