提交 04e08698 编写于 作者: J Johannes Schindelin 提交者: Junio C Hamano

import-tars: support hard links

Previously, we simply treated hard links as if they were plain files
with size 0, ignoring the link type "1" and hence the link target.

What we should do instead, of course, is to use the link target to get
at the import mark for the contents, even if we cannot recreate the hard
link per se, as Git has no concept of hard links.
Signed-off-by: NJohannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: NJunio C Hamano <gitster@pobox.com>
上级 e4657964
......@@ -96,18 +96,21 @@
$mtime = oct $mtime;
next if $typeflag == 5; # directory
print FI "blob\n", "mark :$next_mark\n";
if ($typeflag == 2) { # symbolic link
print FI "data ", length($linkname), "\n", $linkname;
$mode = 0120000;
} else {
print FI "data $size\n";
while ($size > 0 && read(I, $_, 512) == 512) {
print FI substr($_, 0, $size);
$size -= 512;
if ($typeflag != 1) { # handle hard links later
print FI "blob\n", "mark :$next_mark\n";
if ($typeflag == 2) { # symbolic link
print FI "data ", length($linkname), "\n",
$linkname;
$mode = 0120000;
} else {
print FI "data $size\n";
while ($size > 0 && read(I, $_, 512) == 512) {
print FI substr($_, 0, $size);
$size -= 512;
}
}
print FI "\n";
}
print FI "\n";
my $path;
if ($prefix) {
......@@ -115,7 +118,13 @@
} else {
$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;
$path =~ m,^([^/]+)/,;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册