On Sunday 18 January 2009, Philip Hands wrote:
> phil@cold:~/src/debian-svn/d-i$ git svn fetch -r57093:57094
> Checksum mismatch: trunk/packages/po/sublevel4/da.po c9893a6364a37460e7a8ee1676d7ac0c9e85f59e
> expected: 2df48ca6c7a79d95b479c4f16eec44ba
> got: ec0b72182b31be69dcae734015d9e316
By making a small change in git-svn in apply_textdelta() I get:
Checksum check: trunk/packages/po/sublevel4/da.po d22ac0ca8c73fd76313d1a61e47ef213c83b9c45
expected: 2df48ca6c7a79d95b479c4f16eec44ba
got: 2df48ca6c7a79d95b479c4f16eec44ba
M packages/po/sublevel4/da.po
r57094 = 0eb6d42840581acf9d0fc1475a933afd01a0d0ca (trunk)
And afterwards:
$ git show d22ac0ca8c73fd76313d1a61e47ef213c83b9c45 | md5sum
2df48ca6c7a79d95b479c4f16eec44ba -
The ID of the blob is different, but I guess that's OK. Important thing
is that the "expected" checksum matches what you got.
So, AFAICT the "got" checksum is calculated here:
sub apply_textdelta {
my ($self, $fb, $exp) = @_;
my $fh = IO::File->new_tmpfile;
$fh->autoflush(1);
# $fh gets auto-closed() by SVN::TxDelta::apply(),
# (but $base does not,) so dup() it for reading in close_file
open my $dup, '<&', $fh or croak $!;
my $base = IO::File->new_tmpfile;
$base->autoflush(1);
if ($fb->{blob}) {
print $base 'link ' if ($fb->{mode_a} == 120000);
my $size = $::_repository->cat_blob($fb->{blob}, $base);
die "Failed to read object $fb->{blob}" if ($size < 0);
if (defined $exp) {
seek $base, 0, 0 or croak $!;
my $got = ::md5sum($base);
die "Checksum mismatch: $fb->{path} $fb->{blob}\n",
"expected: $exp\n",
" got: $got\n" if ($got ne $exp);
}
}
So maybe someone who understands Perl can tell why '::md5sum($base)' is
returning the wrong result here on 32-bit systems.
BTW, my git-svn has: $VERSION = '1.5.6.5' (Lenny).
Cheers,
FJP
Attachment:
signature.asc
Description: This is a digitally signed message part.