[PATCH] commit: switch core.commentChar if it's found in existing commit
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
Re: [PATCH] commit: switch core.commentChar if it's found in existing commit
Nguyễn Thái Ngọc Duy pclo...@gmail.com writes: 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[] = !@#$%^|:;~; Did you really mean to add a SP to the 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 */ -- 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
Re: [PATCH] commit: switch core.commentChar if it's found in existing commit
Junio C Hamano gits...@pobox.com writes: Nguyễn Thái Ngọc Duy pclo...@gmail.com writes: 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[] = !@#$%^|:;~; Did you really mean to add a SP to the candidates? Please ignore this noise. I realized that the SP is there only to be overwritten in the meantime, and this is an old message sent out before that realization, just emerging from my mail provider's outbox. -- 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