diff options
author | Junio C Hamano <gitster@pobox.com> | 2009-12-03 13:56:50 -0800 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2009-12-03 13:56:50 -0800 |
commit | dda8f4bf2b159d6f8e6d816e35418708cc6f21a1 (patch) | |
tree | 103c94df0d3f8b7793120d9fc43b22b9c61bea4e | |
parent | c8b1d761f61c4be0b036620ba418ff0e97979fde (diff) | |
parent | 3994e8a98dc7bbf67e61d23c8125f44383499a1f (diff) | |
download | git-dda8f4bf2b159d6f8e6d816e35418708cc6f21a1.tar.gz git-dda8f4bf2b159d6f8e6d816e35418708cc6f21a1.tar.xz |
Merge branch 'uk/maint-shortlog-encoding' into maint
* uk/maint-shortlog-encoding:
t4201: use ISO8859-1 rather than ISO-8859-1
shortlog: respect commit encoding
-rw-r--r-- | builtin-shortlog.c | 20 | ||||
-rwxr-xr-x | t/t4201-shortlog.sh | 28 |
2 files changed, 39 insertions, 9 deletions
diff --git a/builtin-shortlog.c b/builtin-shortlog.c index 4d4a3c82d..b98edc3ba 100644 --- a/builtin-shortlog.c +++ b/builtin-shortlog.c @@ -139,8 +139,12 @@ 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; - buffer = commit->buffer; + pretty_print_commit(CMIT_FMT_RAW, commit, &buf, + 0, NULL, NULL, DATE_NORMAL, 0); + buffer = buf.buf; while (*buffer && *buffer != '\n') { const char *eol = strchr(buffer, '\n'); @@ -157,17 +161,15 @@ 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; - - pretty_print_commit(CMIT_FMT_USERFORMAT, commit, &buf, + pretty_print_commit(CMIT_FMT_USERFORMAT, commit, &ufbuf, DEFAULT_ABBREV, "", "", DATE_NORMAL, 0); - insert_one_record(log, author, buf.buf); - strbuf_release(&buf); - return; - } - if (*buffer) + 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 405b97119..a01e55bf6 100755 --- a/t/t4201-shortlog.sh +++ b/t/t4201-shortlog.sh @@ -52,4 +52,32 @@ GIT_DIR=non-existing git shortlog -w < log > out test_expect_success 'shortlog from non-git directory' 'test_cmp expect out' +iconvfromutf8toiso88591() { + printf "%s" "$*" | iconv -f UTF-8 -t ISO8859-1 +} + +DSCHO="Jöhännës \"Dschö\" Schindëlin" +DSCHOE="$DSCHO <Johannes.Schindelin@gmx.de>" +MSG1="set a1 to 2 and some non-ASCII chars: Äßø" +MSG2="set a1 to 3 and some non-ASCII chars: áæï" +cat > expect << EOF +$DSCHO (2): + $MSG1 + $MSG2 + +EOF + +test_expect_success 'shortlog encoding' ' + git reset --hard "$commit" && + git config --unset i18n.commitencoding && + echo 2 > a1 && + git commit --quiet -m "$MSG1" --author="$DSCHOE" a1 && + git config i18n.commitencoding "ISO8859-1" && + echo 3 > a1 && + git commit --quiet -m "$(iconvfromutf8toiso88591 "$MSG2")" \ + --author="$(iconvfromutf8toiso88591 "$DSCHOE")" a1 && + git config --unset i18n.commitencoding && + git shortlog HEAD~2.. > out && +test_cmp expect out' + test_done |