From 37bb5d744309df6ff05ea5f34112082cdc301d69 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Ren=C3=A9=20Scharfe?= Date: Sun, 22 Nov 2009 17:15:29 +0100 Subject: [PATCH] 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 Signed-off-by: Junio C Hamano --- t/t4202-log.sh | 21 +++++++++++++++++++++ utf8.c | 26 +++++++++++++++++--------- 2 files changed, 38 insertions(+), 9 deletions(-) diff --git a/t/t4202-log.sh b/t/t4202-log.sh index 1e952ca55..779a5adf5 100755 --- a/t/t4202-log.sh +++ b/t/t4202-log.sh @@ -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 diff --git a/utf8.c b/utf8.c index 5c18f0c28..01d1869fa 100644 --- a/utf8.c +++ b/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; } -- 2.26.2