git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH] strbuf_add_wrapped_text(): factor out strbuf_add_indented_text()

From
René Scharfe <rene.scharfe@lsrfire.ath.cx>
Date
Nov 22, 2009, 16:15 UTC
Message-ID
<4B0963A1.1010900@lsrfire.ath.cx>

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>
---
 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 1e952ca..779a5ad 100755
--- a/t/t4202-log.sh
+++ b/t/t4202-log.sh
@@ -64,6 +64,27 @@ test_expect_success 'format' '
 '
 
 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
 5d31159 fourth
diff --git a/utf8.c b/utf8.c
index 5c18f0c..01d1869 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;
 	}
 
-- 
1.6.5.3
Message 1 of 1 in “strbuf_add_wrapped_text(): factor out strbuf_add_indented_text()”
  1. strbuf_add_wrapped_text(): factor out strbuf_add_indented_text()René Scharfe, Nov 22, 2009

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.