Bug#808813: [PATCH] add support for xdelta3
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
Reply to: