Merge branch 'gfi-maint' into gfi-master
authorShawn O. Pearce <spearce@spearce.org>
Wed, 2 May 2007 17:24:10 +0000 (13:24 -0400)
committerShawn O. Pearce <spearce@spearce.org>
Wed, 2 May 2007 17:24:10 +0000 (13:24 -0400)
* gfi-maint:
Teach import-tars about GNU tar's @LongLink extension.

1  2 
contrib/fast-import/import-tars.perl
index d2363a415d5a1a7a77fede7f5573342f9a20e755,e46492048c75f4a3cda11c3bf7ca03889640e7b7..a43b2c52f05dc32183dbde422d091279b8e03042
@@@ -52,6 -52,25 +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;
                }
                print FI "\n";
  
 -              my $path = "$prefix$name";
 +              my $path;
 +              if ($prefix) {
 +                      $path = "$prefix/$name";
 +              } else {
 +                      $path = "$name";
 +              }
                $files{$path} = [$next_mark++, $mode];
  
                $commit_time = $mtime if $mtime > $commit_time;