aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeoffrey Thomas <geofft@mit.edu>2009-01-30 04:41:29 -0500
committerJunio C Hamano <gitster@pobox.com>2009-02-04 16:30:45 -0800
commitffaf9cc0ff0692a0b60cdf1b62e8375706b7865d (patch)
tree75d149e32e00203614f2395bd76559928861bde1
parent8a9391e9440028c03345afa9f21459237a529592 (diff)
downloadgit-ffaf9cc0ff0692a0b60cdf1b62e8375706b7865d.tar.gz
git-ffaf9cc0ff0692a0b60cdf1b62e8375706b7865d.tar.xz
builtin-blame.c: Use utf8_strwidth for author's names
git blame misaligns output if a author's name has a differing display width and strlen; for instance, an accented Latin letter that takes two bytes to encode will cause the rest of the line to be shifted to the left by one. To fix this, use utf8_strwidth instead of strlen (and compute the padding ourselves, since printf doesn't know about UTF-8). Signed-off-by: Geoffrey Thomas <geofft@mit.edu> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--builtin-blame.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/builtin-blame.c b/builtin-blame.c
index aae14ef8b..9b9f5442a 100644
--- a/builtin-blame.c
+++ b/builtin-blame.c
@@ -19,6 +19,7 @@
#include "string-list.h"
#include "mailmap.h"
#include "parse-options.h"
+#include "utf8.h"
static char blame_usage[] = "git blame [options] [rev-opts] [rev] [--] file";
@@ -1618,13 +1619,14 @@ static void emit_other(struct scoreboard *sb, struct blame_entry *ent, int opt)
printf(" %*d", max_orig_digits,
ent->s_lno + 1 + cnt);
- if (!(opt & OUTPUT_NO_AUTHOR))
- printf(" (%-*.*s %10s",
- longest_author, longest_author,
- ci.author,
+ if (!(opt & OUTPUT_NO_AUTHOR)) {
+ int pad = longest_author - utf8_strwidth(ci.author);
+ printf(" (%s%*s %10s",
+ ci.author, pad, "",
format_time(ci.author_time,
ci.author_tz,
show_raw_time));
+ }
printf(" %*d) ",
max_digits, ent->lno + 1 + cnt);
}
@@ -1755,7 +1757,7 @@ static void find_alignment(struct scoreboard *sb, int *option)
if (!(suspect->commit->object.flags & METAINFO_SHOWN)) {
suspect->commit->object.flags |= METAINFO_SHOWN;
get_commit_info(suspect->commit, &ci, 1);
- num = strlen(ci.author);
+ num = utf8_strwidth(ci.author);
if (longest_author < num)
longest_author = num;
}