summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLibravatar Shawn O. Pearce <spearce@spearce.org>2007-05-02 13:24:10 -0400
committerLibravatar Shawn O. Pearce <spearce@spearce.org>2007-05-02 13:24:10 -0400
commitdb81e67a7d559544f8464cdfd011208e60b76344 (patch)
tree9f511741fec07e4fb4411fa707b9b1b76929678a
parentGIT v1.5.2-rc1 (diff)
parentTeach import-tars about GNU tar's @LongLink extension. (diff)
downloadtgif-db81e67a7d559544f8464cdfd011208e60b76344.tar.xz
Merge branch 'gfi-maint' into gfi-master
* gfi-maint: Teach import-tars about GNU tar's @LongLink extension.
-rwxr-xr-xcontrib/fast-import/import-tars.perl19
1 files changed, 19 insertions, 0 deletions
diff --git a/contrib/fast-import/import-tars.perl b/contrib/fast-import/import-tars.perl
index d2363a415d..a43b2c52f0 100755
--- a/contrib/fast-import/import-tars.perl
+++ b/contrib/fast-import/import-tars.perl
@@ -52,6 +52,25 @@ foreach my $tar_file (@ARGV)
Z8 Z1 Z100 Z6
Z2 Z32 Z32 Z8 Z8 Z*', $_;
last unless $name;
+ if ($name eq '././@LongLink') {
+ # GNU tar extension
+ if (read(I, $_, 512) != 512) {
+ die ('Short archive');
+ }
+ $name = unpack 'Z257', $_;
+ next unless $name;
+
+ my $dummy;
+ if (read(I, $_, 512) != 512) {
+ die ('Short archive');
+ }
+ ($dummy, $mode, $uid, $gid, $size, $mtime,
+ $chksum, $typeflag, $linkname, $magic,
+ $version, $uname, $gname, $devmajor, $devminor,
+ $prefix) = unpack 'Z100 Z8 Z8 Z8 Z12 Z12
+ Z8 Z1 Z100 Z6
+ Z2 Z32 Z32 Z8 Z8 Z*', $_;
+ }
next if $name =~ m{/\z};
$mode = oct $mode;
$size = oct $size;