Merge branch 'js/import-tars-hardlinks' into maint

"import-tars" fast-import script (in contrib/) used to ignore a
hardlink target and replaced it with an empty file, which has been
corrected to record the same blob as the other file the hardlink is
shared with.

* js/import-tars-hardlinks:
  import-tars: support hard links
This commit is contained in:
Junio C Hamano
2016-09-08 21:35:54 -07:00

View File

@ -96,18 +96,21 @@ foreach my $tar_file (@ARGV)
$mtime = oct $mtime; $mtime = oct $mtime;
next if $typeflag == 5; # directory next if $typeflag == 5; # directory
print FI "blob\n", "mark :$next_mark\n"; if ($typeflag != 1) { # handle hard links later
if ($typeflag == 2) { # symbolic link print FI "blob\n", "mark :$next_mark\n";
print FI "data ", length($linkname), "\n", $linkname; if ($typeflag == 2) { # symbolic link
$mode = 0120000; print FI "data ", length($linkname), "\n",
} else { $linkname;
print FI "data $size\n"; $mode = 0120000;
while ($size > 0 && read(I, $_, 512) == 512) { } else {
print FI substr($_, 0, $size); print FI "data $size\n";
$size -= 512; while ($size > 0 && read(I, $_, 512) == 512) {
print FI substr($_, 0, $size);
$size -= 512;
}
} }
print FI "\n";
} }
print FI "\n";
my $path; my $path;
if ($prefix) { if ($prefix) {
@ -115,7 +118,13 @@ foreach my $tar_file (@ARGV)
} else { } else {
$path = "$name"; $path = "$name";
} }
$files{$path} = [$next_mark++, $mode];
if ($typeflag == 1) { # hard link
$linkname = "$prefix/$linkname" if $prefix;
$files{$path} = [ $files{$linkname}->[0], $mode ];
} else {
$files{$path} = [$next_mark++, $mode];
}
$author_time = $mtime if $mtime > $author_time; $author_time = $mtime if $mtime > $author_time;
$path =~ m,^([^/]+)/,; $path =~ m,^([^/]+)/,;