},
diffurl => {
type => "string",
- example => "http://git.example.com/gitweb.cgi?p=wiki.git;a=blobdiff;h=[[sha1_to]];hp=[[sha1_from]];hb=[[sha1_parent]];f=[[file]]",
- description => "gitweb url to show a diff ([[sha1_to]], [[sha1_from]], [[sha1_parent]], [[sha1_commit]] and [[file]] substituted)",
+ example => "http://git.example.com/gitweb.cgi?p=wiki.git;a=blobdiff;f=[[file]];h=[[sha1_to]];hp=[[sha1_from]];hb=[[sha1_commit]];hpb=[[sha1_parent]]",
+ description => "gitweb url to show a diff ([[file]], [[sha1_to]], [[sha1_from]], [[sha1_commit]], and [[sha1_parent]] substituted)",
safe => 1,
rebuild => 1,
},
}
# In parent.
+ # git output is probably utf-8 encoded, but may contain
+ # other encodings or invalidly encoded stuff. So do not rely
+ # on the normal utf-8 IO layer, decode it by hand.
+ binmode($OUT);
+
my @lines;
while (<$OUT>) {
+ $_=decode_utf8($_, 0);
+
chomp;
+
push @lines, $_;
}
# Set the commit author and email to the web committer.
my %env=%ENV;
if (defined $user || defined $ipaddr) {
- my $u=defined $user ? $user : $ipaddr;
+ my $u=encode_utf8(defined $user ? $user : $ipaddr);
$ENV{GIT_AUTHOR_NAME}=$u;
$ENV{GIT_AUTHOR_EMAIL}="$u\@web";
}
# Remove srcdir prefix
$file =~ s/^\Q$config{srcdir}\E\/?//;
- my $sha1 = git_sha1($file);
- my $ci = git_commit_info($sha1, 1);
+ my @sha1s = run_or_non('git', 'rev-list', 'HEAD', '--', $file);
+ my $ci = git_commit_info($sha1s[$#sha1s], 1);
my $ctime = $ci->{'author_epoch'};
debug("ctime for '$file': ". localtime($ctime));