summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLibravatar Junio C Hamano <junkio@cox.net>2007-05-02 11:00:16 -0700
committerLibravatar Junio C Hamano <junkio@cox.net>2007-05-02 11:00:16 -0700
commit7a33b0bfced9cfcea785dac5ddf189d937a42446 (patch)
tree69f3bee1d6a0a13cf4bc0d46e8076fa46c0654df
parentcvsserver: Handle re-added files correctly (diff)
parentTeach import-tars about GNU tar's @LongLink extension. (diff)
downloadtgif-7a33b0bfced9cfcea785dac5ddf189d937a42446.tar.xz
Merge branch 'maint' of git://repo.or.cz/git/fastimport into maint
* 'maint' of git://repo.or.cz/git/fastimport: 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 82a90429c8..e46492048c 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;