If we need to use core.commentChar and it's already in the prepared
message, find another char among a small subset. This should stop
surprises because git strips some lines unexpectedly. Of course if
candicate characters happen to be all out, this change does not help.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclo...@gmail.com>
---
 On Fri, May 16, 2014 at 5:28 PM, Duy Nguyen <pclo...@gmail.com> wrote:
 > But maybe git should detect that the
 > current commit message has leading '#' and automatically switch to
 > another character..

 Something like this. Lightly tested.. I know there's a small bug..

 builtin/commit.c | 29 +++++++++++++++++++++++++++++
 1 file changed, 29 insertions(+)

diff --git a/builtin/commit.c b/builtin/commit.c
index 6ab4605..70ceb61 100644
--- a/builtin/commit.c
+++ b/builtin/commit.c
@@ -593,6 +593,32 @@ static char *cut_ident_timestamp_part(char *string)
        return ket;
 }
 
+static void adjust_comment_line_char(const struct strbuf *sb)
+{
+       char candidates[] = " !@#$%^&|:;~";
+       char *candidate;
+       const char *p;
+       if (!sb->len)
+               return;
+       candidates[0] = comment_line_char;
+       p = sb->buf;
+       do {
+               candidate = strchr(candidates, *p);
+               if (candidate)
+                       *candidate = ' ';
+               p = strchrnul(p, '\n');
+               if (*p)
+                       p++;
+       } while (*p);
+       if (strchr(candidates, comment_line_char)) {
+               p = candidates;
+               while (*p && *p == ' ')
+                       p++;
+               if (*p)
+                       comment_line_char = *p;
+       }
+}
+
 static int prepare_to_commit(const char *index_file, const char *prefix,
                             struct commit *current_head,
                             struct wt_status *s,
@@ -748,6 +774,9 @@ static int prepare_to_commit(const char *index_file, const 
char *prefix,
        if (fwrite(sb.buf, 1, sb.len, s->fp) < sb.len)
                die_errno(_("could not write commit template"));
 
+       if (use_editor && include_status)
+               adjust_comment_line_char(&sb);
+
        strbuf_release(&sb);
 
        /* This checks if committer ident is explicitly given */
-- 
1.9.1.346.ga2b5940

--
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