Skip to content

Commit

Permalink
strbuf_add_wrapped_text(): factor out strbuf_add_indented_text()
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
René Scharfe authored and Junio C Hamano committed Nov 23, 2009
1 parent b482759 commit 37bb5d7
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 9 deletions.
21 changes: 21 additions & 0 deletions t/t4202-log.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
26 changes: 17 additions & 9 deletions utf8.c
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -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;
}

Expand Down

0 comments on commit 37bb5d7

Please sign in to comment.