Before this change the author was taken from the raw commit without reencoding. Signed-off-by: Uwe Kleine-König <u.kleine-koenig@xxxxxxxxxxxxxx> Cc: Jiri Kosina <jkosina@xxxxxxx> --- builtin-shortlog.c | 25 +++++++++++++++---------- t/t4201-shortlog.sh | 24 ++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 10 deletions(-) diff --git a/builtin-shortlog.c b/builtin-shortlog.c index 8aa63c7..050bda8 100644 --- a/builtin-shortlog.c +++ b/builtin-shortlog.c @@ -139,14 +139,19 @@ static void read_from_stdin(struct shortlog *log) void shortlog_add_commit(struct shortlog *log, struct commit *commit) { const char *author = NULL, *buffer; + struct strbuf buf = STRBUF_INIT; + struct strbuf ufbuf = STRBUF_INIT; + struct pretty_print_context ctx = {0}; - buffer = commit->buffer; + pretty_print_commit(CMIT_FMT_RAW, commit, &buf, &ctx); + + buffer = buf.buf; while (*buffer && *buffer != '\n') { const char *eol = strchr(buffer, '\n'); - if (eol == NULL) + if (eol == NULL) { eol = buffer + strlen(buffer); - else + } else eol++; if (!prefixcmp(buffer, "author ")) @@ -157,20 +162,20 @@ void shortlog_add_commit(struct shortlog *log, struct commit *commit) die("Missing author: %s", sha1_to_hex(commit->object.sha1)); if (log->user_format) { - struct strbuf buf = STRBUF_INIT; struct pretty_print_context ctx = {0}; ctx.abbrev = DEFAULT_ABBREV; ctx.subject = ""; ctx.after_subject = ""; ctx.date_mode = DATE_NORMAL; - pretty_print_commit(CMIT_FMT_USERFORMAT, commit, &buf, &ctx); - insert_one_record(log, author, buf.buf); - strbuf_release(&buf); - return; - } - if (*buffer) + pretty_print_commit(CMIT_FMT_USERFORMAT, commit, &ufbuf, &ctx); + buffer = ufbuf.buf; + + } else if (*buffer) buffer++; + insert_one_record(log, author, !*buffer ? "<none>" : buffer); + strbuf_release(&ufbuf); + strbuf_release(&buf); } static void get_from_rev(struct rev_info *rev, struct shortlog *log) diff --git a/t/t4201-shortlog.sh b/t/t4201-shortlog.sh index 405b971..118204b 100755 --- a/t/t4201-shortlog.sh +++ b/t/t4201-shortlog.sh @@ -51,5 +51,29 @@ git log HEAD > log GIT_DIR=non-existing git shortlog -w < log > out test_expect_success 'shortlog from non-git directory' 'test_cmp expect out' +iconvfromutf8toiso885915() { + printf "%s" "$@" | iconv -f UTF-8 -t ISO-8859-15 +} + +git reset --hard "$commit" +git config --unset i18n.commitencoding +echo 2 > a1 +git commit --quiet -m "set a1 to 2 and some non-ASCII chars: Äßø" --author="Jöhännës \"Dschö\" Schindëlin <Johannes.Schindelin@xxxxxx>" a1 + +git config i18n.commitencoding "ISO-8859-15" +echo 3 > a1 +git commit --quiet -m "$(iconvfromutf8toiso885915 "set a1 to 3 and some non-ASCII chars: áæï")" --author="$(iconvfromutf8toiso885915 "Jöhännës \"Dschö\" Schindëlin <Johannes.Schindelin@xxxxxx>")" a1 +git config --unset i18n.commitencoding + +git shortlog HEAD~2.. > out + +cat > expect << EOF +Jöhännës "Dschö" Schindëlin (2): + set a1 to 2 and some non-ASCII chars: Äßø + set a1 to 3 and some non-ASCII chars: áæï + +EOF + +test_expect_success 'shortlog encoding' 'test_cmp expect out' test_done -- 1.6.5.3 -- 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