Package: pristine-tar Version: 1.33 Tags: patch sadly, the generated files are not compatible, see [1]
[1] https://github.com/jmacd/xdelta/issues/76 --- pristine-gz | 20 ++++++++++++++++++-- pristine-tar | 20 ++++++++++++++++++-- 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/pristine-gz b/pristine-gz index ce115d5..9c5ff66 100755 --- a/pristine-gz +++ b/pristine-gz @@ -99,6 +99,13 @@ use File::Basename qw/basename/; # parameters as given to Makefile.PL. my $tar_program = "tar"; my $xdelta_program = "xdelta"; +my $xdelta_version = 1; + +my $xdelta_version_output = `xdelta --version 2>&1`; +if ($xdelta_version_output =~ /version 3/) { + $xdelta_version = 3 +} + delete $ENV{GZIP}; @@ -240,7 +247,12 @@ sub reproducegz { else { # generate a binary delta and see if this is the # best variant so far - my $ret=system("$xdelta_program delta -0 --pristine $tempout $orig $tempdir/tmpdelta 2>/dev/null") >> 8; + my $ret; + if ($xdelta_version == 1) { + $ret=system("$xdelta_program delta -0 --pristine $tempout $orig $tempdir/tmpdelta 2>/dev/null") >> 8; + } else { + $ret=system("$xdelta_program encode -0 -s $tempout $orig $tempdir/tmpdelta 2>/dev/null") >> 8; + } # xdelta exits 1 on success if ($ret == 1) { my $size=(stat("$tempdir/tmpdelta"))[7]; @@ -303,7 +315,11 @@ sub gengz { my $tempdir=tempdir(); my $tfile="$tempdir/".basename($file).".gz"; doit_redir($file, $tfile, @zgz); - doit($xdelta_program, "patch", "--pristine", $delta->{delta}, $tfile, "$file.gz"); + if ($xdelta_version == 1) { + doit($xdelta_program, "patch", "--pristine", $delta->{delta}, $tfile, "$file.gz"); + } else { + doit($xdelta_program, "decode", "-s", $tfile, $delta->{delta}, "$file.gz"); + } } else { doit_redir("$file", "$file.gz", @zgz); diff --git a/pristine-tar b/pristine-tar index 0bf44e8..842e22d 100755 --- a/pristine-tar +++ b/pristine-tar @@ -198,6 +198,12 @@ $ENV{PRISTINE_TAR_COMPAT}=1; # parameters as given to Makefile.PL. my $tar_program = "tar"; my $xdelta_program = "xdelta"; +my $xdelta_version = 1; + +my $xdelta_version_output = `xdelta --version 2>&1`; +if ($xdelta_version_output =~ /version 3/) { + $xdelta_version = 3 +} my $message; @@ -427,7 +433,12 @@ sub gentar { my $ok; foreach my $variant (@try) { my $recreatetarball=$variant->(); - my $ret=try_doit($xdelta_program, "patch", $delta->{delta}, $recreatetarball, $out); + my $ret; + if ($xdelta_version == 1) { + $ret=try_doit($xdelta_program, "patch", $delta->{delta}, $recreatetarball, $out); + } else { + $ret=try_doit($xdelta_program, "decode", "-s", $recreatetarball, $delta->{delta}, $out); + } if ($ret == 0) { $ok=1; last; @@ -539,7 +550,12 @@ sub gendelta { } $delta{delta}="$tempdir/delta"; - my $ret=system("$xdelta_program delta -0 --pristine $recreatetarball $tarball $delta{delta}") >> 8; + my $ret; + if ($xdelta_version == 1) { + $ret=system("$xdelta_program delta -0 --pristine $recreatetarball $tarball $delta{delta}") >> 8; + } else { + $ret=system("$xdelta_program encode -0 -s $recreatetarball $tarball $delta{delta}") >> 8; + } # xdelta exits 1 on success if there were differences if ($ret != 1 && $ret != 0) { error "xdelta failed with return code $ret"; -- 2.5.0