Code

strbuf_add_wrapped_text(): factor out strbuf_add_indented_text()
authorRené Scharfe <rene.scharfe@lsrfire.ath.cx>
Sun, 22 Nov 2009 16:15:29 +0000 (17:15 +0100)
committerJunio C Hamano <gitster@pobox.com>
Mon, 23 Nov 2009 00:22:02 +0000 (16:22 -0800)
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>
t/t4202-log.sh
utf8.c

index 1e952ca55b1ff146000153d720f11d1b7fa22707..779a5adf554d77464f2a326a2eb919e224993746 100755 (executable)
@@ -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 5c18f0c28107c91d9b2ec124ea2896d20945aa58..01d1869fa3df23e71879f15e566d8733168912cd 100644 (file)
--- 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;
        }