* [PATCH] strbuf_add_wrapped_text(): factor out strbuf_add_indented_text()
@ 2009-11-22 16:15 René Scharfe
0 siblings, 0 replies; only message in thread
From: René Scharfe @ 2009-11-22 16:15 UTC (permalink / raw)
To: Git Mailing List; +Cc: Junio C Hamano
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
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2009-11-22 16:15 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-11-22 16:15 [PATCH] strbuf_add_wrapped_text(): factor out strbuf_add_indented_text() René Scharfe
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox