git: Gix --gettime to properly support utf8 filenames.
In passing, fixed a bug where the srcdir was in a subdir of a repository named "0".master
parent
5f33532468
commit
da2be6e85c
|
@ -280,11 +280,35 @@ sub merge_past ($$$) {
|
||||||
return $conflict;
|
return $conflict;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub parse_diff_tree ($@) {
|
{
|
||||||
|
my $prefix;
|
||||||
|
sub decode_git_file ($) {
|
||||||
|
my $file=shift;
|
||||||
|
|
||||||
|
# git does not output utf-8 filenames, but instead
|
||||||
|
# double-quotes them with the utf-8 characters
|
||||||
|
# escaped as \nnn\nnn.
|
||||||
|
if ($file =~ m/^"(.*)"$/) {
|
||||||
|
($file=$1) =~ s/\\([0-7]{1,3})/chr(oct($1))/eg;
|
||||||
|
}
|
||||||
|
|
||||||
|
# strip prefix if in a subdir
|
||||||
|
if (! defined $prefix) {
|
||||||
|
$prefix = run_or_die('git', 'rev-parse', '--show-prefix');
|
||||||
|
if (! defined $prefix) {
|
||||||
|
$prefix="";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$file =~ s/^\Q$prefix\E//;
|
||||||
|
|
||||||
|
return decode("utf8", $file);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sub parse_diff_tree ($) {
|
||||||
# Parse the raw diff tree chunk and return the info hash.
|
# Parse the raw diff tree chunk and return the info hash.
|
||||||
# See git-diff-tree(1) for the syntax.
|
# See git-diff-tree(1) for the syntax.
|
||||||
|
my $dt_ref = shift;
|
||||||
my ($prefix, $dt_ref) = @_;
|
|
||||||
|
|
||||||
# End of stream?
|
# End of stream?
|
||||||
return if !defined @{ $dt_ref } ||
|
return if !defined @{ $dt_ref } ||
|
||||||
|
@ -367,16 +391,9 @@ sub parse_diff_tree ($@) {
|
||||||
my $sha1_to = shift(@tmp);
|
my $sha1_to = shift(@tmp);
|
||||||
my $status = shift(@tmp);
|
my $status = shift(@tmp);
|
||||||
|
|
||||||
# git does not output utf-8 filenames, but instead
|
|
||||||
# double-quotes them with the utf-8 characters
|
|
||||||
# escaped as \nnn\nnn.
|
|
||||||
if ($file =~ m/^"(.*)"$/) {
|
|
||||||
($file=$1) =~ s/\\([0-7]{1,3})/chr(oct($1))/eg;
|
|
||||||
}
|
|
||||||
$file =~ s/^\Q$prefix\E//;
|
|
||||||
if (length $file) {
|
if (length $file) {
|
||||||
push @{ $ci{'details'} }, {
|
push @{ $ci{'details'} }, {
|
||||||
'file' => decode("utf8", $file),
|
'file' => decode_git_file($file),
|
||||||
'sha1_from' => $sha1_from[0],
|
'sha1_from' => $sha1_from[0],
|
||||||
'sha1_to' => $sha1_to,
|
'sha1_to' => $sha1_to,
|
||||||
'mode_from' => $mode_from[0],
|
'mode_from' => $mode_from[0],
|
||||||
|
@ -403,10 +420,9 @@ sub git_commit_info ($;$) {
|
||||||
my @raw_lines = run_or_die('git', 'log', @opts,
|
my @raw_lines = run_or_die('git', 'log', @opts,
|
||||||
'--pretty=raw', '--raw', '--abbrev=40', '--always', '-c',
|
'--pretty=raw', '--raw', '--abbrev=40', '--always', '-c',
|
||||||
'-r', $sha1, '--', '.');
|
'-r', $sha1, '--', '.');
|
||||||
my ($prefix) = run_or_die('git', 'rev-parse', '--show-prefix');
|
|
||||||
|
|
||||||
my @ci;
|
my @ci;
|
||||||
while (my $parsed = parse_diff_tree(($prefix or ""), \@raw_lines)) {
|
while (my $parsed = parse_diff_tree(\@raw_lines)) {
|
||||||
push @ci, $parsed;
|
push @ci, $parsed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -638,10 +654,12 @@ sub findtimes ($$) {
|
||||||
$date=undef;
|
$date=undef;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (! $time_cache{$line}) {
|
my $f=decode_git_file($line);
|
||||||
$time_cache{$line}[0]=$date; # mtime
|
|
||||||
|
if (! $time_cache{$f}) {
|
||||||
|
$time_cache{$f}[0]=$date; # mtime
|
||||||
}
|
}
|
||||||
$time_cache{$line}[1]=$date; # ctime
|
$time_cache{$f}[1]=$date; # ctime
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,6 +19,7 @@ ikiwiki (3.20100611) UNRELEASED; urgency=low
|
||||||
* Fix issues with combining unicode srcdirs and source files.
|
* Fix issues with combining unicode srcdirs and source files.
|
||||||
(Workaround bug #586045)
|
(Workaround bug #586045)
|
||||||
* Make --gettime be honored after initial setup.
|
* Make --gettime be honored after initial setup.
|
||||||
|
* git: Gix --gettime to properly support utf8 filenames.
|
||||||
|
|
||||||
-- Joey Hess <joeyh@debian.org> Fri, 11 Jun 2010 13:39:15 -0400
|
-- Joey Hess <joeyh@debian.org> Fri, 11 Jun 2010 13:39:15 -0400
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue