From: Eric Wong Date: Mon, 22 Aug 2022 06:44:12 +0000 (+0000) Subject: viewvcs: use :utf8 for opening patch, too X-Git-Url: http://www.git.stargrave.org/?p=public-inbox.git;a=commitdiff_plain;h=6b4e4f0d2d52a4b39c68d8f63915ddb7e1e8270e viewvcs: use :utf8 for opening patch, too We'll also force --encoding=UTF-8 for "git show" even if that's the default in git, since the rest of our code already assumes UTF-8. --- diff --git a/lib/PublicInbox/ViewVCS.pm b/lib/PublicInbox/ViewVCS.pm index 96883f6c..19d34092 100644 --- a/lib/PublicInbox/ViewVCS.pm +++ b/lib/PublicInbox/ViewVCS.pm @@ -144,7 +144,7 @@ committer $co$patchid $s\n EOM $ctx->zmore($bdy); - open $fh, '<', "$tmp/p" or die "open $tmp/p: $!"; + open $fh, '<:utf8', "$tmp/p" or die "open $tmp/p: $!"; if (-s $fh > $MAX_SIZE) { $ctx->zmore("---\n patch is too large to show\n"); } else { # prepare flush_diff: @@ -171,8 +171,10 @@ sub show_commit ($$$$) { # a patch embedded inside the commit message body doesn't get fed # to patch-id: my $cmd = [ '/bin/sh', '-c', - "git show '$SHOW_FMT' -z --no-notes --no-patch $oid >h && ". - "git show --pretty=format:%n -M --stat -p $oid >p && ". + "git show --encoding=UTF-8 '$SHOW_FMT'". + " -z --no-notes --no-patch $oid >h && ". + 'git show --encoding=UTF-8 --pretty=format:%n -M'. + " --stat -p $oid >p && ". "git patch-id --stable $git->{git_dir} }; my $tmp = File::Temp->newdir("show-$oid-XXXX", TMPDIR => 1); diff --git a/t/solver_git.t b/t/solver_git.t index 1baa012b..5c7bfa28 100644 --- a/t/solver_git.t +++ b/t/solver_git.t @@ -1,5 +1,5 @@ #!perl -w -# Copyright (C) 2019-2021 all contributors +# Copyright (C) all contributors # License: AGPL-3.0+ use strict; use v5.10.1; @@ -294,6 +294,11 @@ EOF is($res->content, "\0" x $size, "$label content matches"); } + my $utf8 = 'e022d3377fd2c50fd9931bf96394728958a90bf3'; + $res = $cb->(GET("/$name/$utf8/s/")); + is($res->code, 200, 'shows commit w/ utf8.eml'); + like($res->content, qr/Eléanor/, + 'UTF-8 commit shown properly'); }; test_psgi(sub { $www->call(@_) }, $client); SKIP: {