TODO: should only be enabled explicitly to avoid unexpected trimming

Signed-off-by: Nguyễn Thái Ngọc Duy <pclo...@gmail.com>
---
 And I did not remember I was in interactive rebase mode when I made
 the series. This patch is for discussion only. My screen seems to
 flash (I think) printing trailing spaces.

 pretty.c          |  1 +
 strbuf.c          | 29 +++++++++++++++++++++++++++++
 strbuf.h          |  1 +
 t/t9010-svn-fe.sh |  2 +-
 4 files changed, 32 insertions(+), 1 deletion(-)

diff --git a/pretty.c b/pretty.c
index 6662f52..70f776b 100644
--- a/pretty.c
+++ b/pretty.c
@@ -1327,6 +1327,7 @@ void format_commit_message(const struct commit *commit,
 
        strbuf_expand(sb, format, format_commit_item, &context);
        rewrap_message_tail(sb, &context, 0, 0, 0);
+       delete_trailing_whitespace(sb);
 
        if (context.message != commit->buffer)
                free(context.message);
diff --git a/strbuf.c b/strbuf.c
index 0510f76..e001175 100644
--- a/strbuf.c
+++ b/strbuf.c
@@ -488,3 +488,32 @@ int fprintf_ln(FILE *fp, const char *fmt, ...)
                return -1;
        return ret + 1;
 }
+
+void delete_trailing_whitespace(struct strbuf *sb)
+{
+       char *src = sb->buf, *dst = sb->buf;
+       char *end = src + sb->len, *anchor = NULL;
+       while (src < end) {
+               if (*src == ' ') {
+                       if (anchor)
+                               src++;
+                       else
+                               anchor = src++;
+               } else if (*src == '\n') {
+                       if (anchor) {
+                               *dst++ = *src++;
+                               anchor = NULL;
+                       } else
+                               *dst++ = *src++;
+               } else {
+                       if (anchor) {
+                               memcpy(dst, anchor, src - anchor);
+                               dst += src - anchor;
+                               anchor = NULL;
+                       }
+                       *dst++ = *src++;
+               }
+       }
+       sb->len = dst - sb->buf;
+       sb->buf[sb->len] = '\0';
+}
diff --git a/strbuf.h b/strbuf.h
index be941ee..75a8908 100644
--- a/strbuf.h
+++ b/strbuf.h
@@ -42,6 +42,7 @@ static inline void strbuf_setlen(struct strbuf *sb, size_t 
len) {
 extern void strbuf_trim(struct strbuf *);
 extern void strbuf_rtrim(struct strbuf *);
 extern void strbuf_ltrim(struct strbuf *);
+extern void delete_trailing_whitespace(struct strbuf *);
 extern int strbuf_cmp(const struct strbuf *, const struct strbuf *);
 
 extern struct strbuf **strbuf_split_buf(const char *, size_t,
diff --git a/t/t9010-svn-fe.sh b/t/t9010-svn-fe.sh
index b7eed24..b603e70 100755
--- a/t/t9010-svn-fe.sh
+++ b/t/t9010-svn-fe.sh
@@ -96,7 +96,7 @@ test_expect_failure PIPE 'empty revision' '
 
 test_expect_success PIPE 'empty properties' '
        reinit_git &&
-       printf "rev <nobody, nobody@local>: %s\n" "" "" >expect &&
+       printf "rev <nobody, nobody@local>: %s\n" "" "" | sed "s/ *$//" >expect 
&&
        cat >emptyprop.dump <<-\EOF &&
        SVN-fs-dump-format-version: 3
 
-- 
1.7.12.1.384.g7b808e7

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to