From c0e427ad7ccaefbb81e99fe58fadb0110eab27c4 Mon Sep 17 00:00:00 2001 From: Markus Lehtonen Date: Mon, 3 Jun 2013 13:16:00 +0300 Subject: [PATCH] implement tar format guessing Try "posix" and "gnu" formats if tarball re-creation with the default tar format fails. Makes pristine-tar more compatible accross different Linux distributions as the default format used by tar varies. Signed-off-by: Markus Lehtonen --- pristine-tar | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/pristine-tar b/pristine-tar index 14bac15..1c321d4 100755 --- a/pristine-tar +++ b/pristine-tar @@ -343,18 +343,23 @@ sub recreatetarball { delete $ENV{TAR_LONGLINK_100}; $recreatetarball_tempdir=$tempdir; - return recreatetarball_helper(); + return recreatetarball_helper(%options); } sub recreatetarball_helper { + my %options=@_; my $tempdir=$recreatetarball_tempdir; my $ret="$tempdir/recreatetarball"; + my @cmd=($tar_program, "cf", $ret, "--owner", 0, "--group", 0, + "--numeric-owner", "-C", "$tempdir/workdir", + "--no-recursion", "--mode", "0644", + "--files-from", "$tempdir/manifest"); + if (exists $options{tar_format}) { + push @cmd, ("-H", $options{tar_format}); + } - doit($tar_program, "cf", $ret, "--owner", 0, "--group", 0, - "--numeric-owner", "-C", "$tempdir/workdir", - "--no-recursion", "--mode", "0644", - "--files-from", "$tempdir/manifest"); + doit(@cmd); return $ret; } @@ -393,6 +398,10 @@ sub gentar { push @try, sub { recreatetarball($delta->{manifest}, getcwd, clobber_source => 0, %opts) }; push @try, \&recreatetarball_longlink_100; + push @try, sub { recreatetarball($delta->{manifest}, getcwd, + clobber_source => 0, tar_format => "gnu", %opts) }; + push @try, sub { recreatetarball($delta->{manifest}, getcwd, + clobber_source => 0, tar_format => "posix", %opts) }; my $ok; foreach my $variant (@try) { -- 2.34.1