Hi, I found a bug when I use format-patch to export a patch which contains comment with some multibyte characters. I also found the relation source, but I can't understand the source clearly, so I think I need a help to know how can I fix it. At first, the symptom. I commit a fix to my repository with comment like following: ----------------------------------------------------- XXXXXXXXXXXX YYYYYY ----------------------------------------------------- two lines of multibyte language comment. then I use format-patch to export this fix, I get a patch file like following: ------------------------------------------------------------------------------ From d3532c3263a02a2367a3aa5c9cc3f0bd738b79b1 Mon Sep 17 00:00:00 2001 From: xz <xz> Date: Fri, 11 Feb 2011 21:30:35 +0900 Subject: [PATCH] =?UTF-8?q?=E6=97=A5=E6=9C=AC=E8=AA=9E=E3=81=8C=E5=A4=A7=E4=B8=88=E5=A4=AB =20=E6=94=B9=E8=A1=8C=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- testfile.txt | 4 +++- 1 files changed, 3 insertions(+), 1 deletions(-) diff --git a/testfile.txt b/testfile.txt index 1e5d832..da982fd 100644 --- a/testfile.txt +++ b/testfile.txt @@ -1 +1,3 @@ -sadfasdf \ No newline at end of file +sadfasdf .......... ------------------------------------------------------------------------------- If I use am to apply this patch, am can't analyze the comment correctly, then the committed comment will become "=?UTF-8?q?=E6=97=A5=E6=9C=AC=E8=AA=9E=E3=81=8C=E5=A4=A7=E4=B8=88=E5=A4=AB". Above is the symptom. Then I did some try, I modify the comment to 3 lines: ----------------------------------------------------- XXXXXXXXXXXX YYYYYY ----------------------------------------------------- add a empty line, then I get a patch like following: ------------------------------------------------------------------------------ From d3532c3263a02a2367a3aa5c9cc3f0bd738b79b1 Mon Sep 17 00:00:00 2001 From: xz <xz> Date: Fri, 11 Feb 2011 21:30:35 +0900 Subject: [PATCH] =?UTF-8?q?=E6=97=A5=E6=9C=AC=E8=AA=9E=E3=81=8C=E5=A4=A7=E4=B8=88=E5=A4=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit YYYYYY --- testfile.txt | 4 +++- 1 files changed, 3 insertions(+), 1 deletions(-) diff --git a/testfile.txt b/testfile.txt index 1e5d832..da982fd 100644 --- a/testfile.txt +++ b/testfile.txt @@ -1 +1,3 @@ -sadfasdf \ No newline at end of file +sadfasdf .......... ------------------------------------------------------------------------------- this patch will be applied successfully. So I know the problem is about the subject creating. I search the source, then I found the following function at "pretty.c:655": const char *format_subject(struct strbuf *sb, const char *msg, const char *line_separator) { int first = 1; for (;;) { const char *line = msg; int linelen = get_one_line(line); msg += linelen; if (!linelen || is_empty_line(line, &linelen)) break; if (!sb)cat continue; strbuf_grow(sb, linelen + 2); if (!first) strbuf_addstr(sb, line_separator); strbuf_add(sb, line, linelen); first = 0; } return msg; } At first I want to know: Does this function means that always add the first line of comment to the argument sb, then return the rest? Is there any other thing that I didn't considered? I found 4 place where to call this function, I think there is no problem about 3 of them, but I don't know is there any other problem to the rest one which is at "pretty.c:931". At last, if what I think is correct, I plan to fix it as following: const char *format_subject(struct strbuf *sb, const char *msg, const char *line_separator) { int first = 1; //for (;;) { const char *line = msg; int linelen = get_one_line(line); msg += linelen; if (!linelen || is_empty_line(line, &linelen)) return msg; //break; if (!sb) return msg; //continue; strbuf_grow(sb, linelen + 2); if (!first) strbuf_addstr(sb, line_separator); strbuf_add(sb, line, linelen); first = 0; //} return msg; } I dont't think it is necessary to have a loop here, so I want to remove the loop. Is there anybody can confirm my fix for me? -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html