[PATCH] commit: switch core.commentChar if it's found in existing commit

2014-05-16 Thread Nguyễn Thái Ngọc Duy
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

2014-05-16 Thread Junio C Hamano
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

2014-05-16 Thread Junio C Hamano
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