[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: