git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH] gitweb: Fix the author initials in blame for non-ASCII names

From
Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Date
Aug 30, 2013, 08:37 UTC
Message-ID
<1377851821-5412-1-git-send-email-avarab@gmail.com>
In-Reply-To
<20130829163935.GA9689@ruderich.org>

Change the @author_initials feature Jakub added in v1.6.4-rc2-14-ga36817b to match non-ASCII author initials as intended.

The regexp Jakub added was intended to match non-ASCII (/\b([[:upper:]])\B/g). But in Perl this doesn't actually match non-ASCII upper-case characters unless the string being matched against has the UTF8 flag.

So when we open a pipe to "git blame" we need to mark the file descriptor we're opening as utf8 explicitly.

So as a result it abbreviates me to "AB" not "ÆAB", entirely because "Æ" isn't /[[:upper:]]/ unless the string being matched against has the UTF8 flag.

Here's something that demonstrates the issue:
    #!/usr/bin/env perl
    use strict;
    use warnings;
    binmode STDOUT, ':utf8' if $ENV{UTF8};
    open my $fd, "-|", "git", "blame", "--incremental", "--", "Makefile" or die "Can't open: $!";
    binmode $fd, ":utf8" if $ENV{UTF8};
    while (my $line = <$fd>) {
    	next unless my ($author) = $line =~ /^author (.*)/;
    	my @author_initials = ($author =~ /\b([[:upper:]])\B/g);
    	printf "%s (%s)\n",  join("", @author_initials), $author;
    }

When that's run with and without UTF8 being true in the environment it gives, on git.git:

    $ UTF8=0 perl author-initials.pl | sort | uniq -c |
    sort -nr | head -n 5
         99 JH (Junio C Hamano)
         35 JN (Jonathan Nieder)
         35 JK (Jeff King)
         20 JS (Johannes Schindelin)
         16 AB (Ævar Arnfjörð Bjarmason)
    $ UTF8=1 perl author-initials.pl | sort | uniq -c |
    sort -nr | head -n 5
         99 JH (Junio C Hamano)
         35 JN (Jonathan Nieder)
         35 JK (Jeff King)
         20 JS (Johannes Schindelin)
         16 ÆAB (Ævar Arnfjörð Bjarmason)
Acked-by: Jakub Narębski <jnareb@gmail.com>
Tested-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Tested-by: Simon Ruderich <simon@ruderich.org>
---
 gitweb/gitweb.perl | 1 +
 1 file changed, 1 insertion(+)
diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
index f429f75..ad48a5a 100755
--- a/gitweb/gitweb.perl
+++ b/gitweb/gitweb.perl
@@ -6631,6 +6631,7 @@ sub git_blame_common {
 			$hash_base, '--', $file_name
 			or die_error(500, "Open git-blame --porcelain failed");
 	}
+	binmode $fh, ':utf8';
 
 	# incremental blame data returns early
 	if ($format eq 'data') {
-- 
1.8.4.rc2
Previous: Simon RuderichNext: Junio C Hamano
Message 4 of 11 in “The gitweb author initials feature from a36817b doesn't work with i18n names”
  1. Ævar Arnfjörð BjarmasonAug 29, 2013
  2. Jakub NarębskiAug 29, 2013
  3. Simon RuderichAug 29, 2013
  4. gitweb: Fix the author initials in blame for non-ASCII namesÆvar Arnfjörð Bjarmason, Aug 30, 2013
  5. Junio C HamanoAug 30, 2013
  6. Jakub NarębskiAug 30, 2013
  7. Junio C HamanoAug 30, 2013
  8. Simon RuderichAug 30, 2013
  9. Kyle J. McKayAug 30, 2013
  10. Jakub NarębskiAug 31, 2013
  11. Ævar Arnfjörð BjarmasonAug 31, 2013

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.