forked from lix-project/lix
* Don't create patches for archives >= 150 MB because bsdiff can't
handle it. It crashed on the 234 MB tetex archive. Probably we will never be able to handle archives of that size on 32-bit machines (because bsdiff does everything in memory requiring max(17*n,9*n+m)+O(1) bytes, so the address space simply isn't there).
This commit is contained in:
parent
040140dd1c
commit
928a7c06dc
|
@ -277,13 +277,25 @@ foreach my $p (keys %dstOutPaths) {
|
||||||
|
|
||||||
my $srcNarBz2 = getNarBz2 \%srcNarFiles, $closest;
|
my $srcNarBz2 = getNarBz2 \%srcNarFiles, $closest;
|
||||||
my $dstNarBz2 = getNarBz2 \%dstNarFiles, $p;
|
my $dstNarBz2 = getNarBz2 \%dstNarFiles, $p;
|
||||||
|
|
||||||
|
my $maxNarSize = 150 * 1024 * 1024;
|
||||||
|
|
||||||
system("@bunzip2@ < $srcNarBz2 > $tmpdir/A") == 0
|
system("@bunzip2@ < $srcNarBz2 > $tmpdir/A") == 0
|
||||||
or die "cannot unpack $srcNarBz2";
|
or die "cannot unpack $srcNarBz2";
|
||||||
|
|
||||||
|
if ((stat "$tmpdir/A")[7] >= $maxNarSize) {
|
||||||
|
print " skipping, source is too large\n";
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
system("@bunzip2@ < $dstNarBz2 > $tmpdir/B") == 0
|
system("@bunzip2@ < $dstNarBz2 > $tmpdir/B") == 0
|
||||||
or die "cannot unpack $dstNarBz2";
|
or die "cannot unpack $dstNarBz2";
|
||||||
|
|
||||||
|
if ((stat "$tmpdir/B")[7] >= $maxNarSize) {
|
||||||
|
print " skipping, destination is too large\n";
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
system("@libexecdir@/bsdiff $tmpdir/A $tmpdir/B $tmpdir/DIFF") == 0
|
system("@libexecdir@/bsdiff $tmpdir/A $tmpdir/B $tmpdir/DIFF") == 0
|
||||||
or die "cannot compute binary diff";
|
or die "cannot compute binary diff";
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue