зеркало из https://github.com/microsoft/git.git
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: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
e46579643d
Коммит
04e0869876
|
@ -96,18 +96,21 @@ foreach my $tar_file (@ARGV)
|
|||
$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 @@ foreach my $tar_file (@ARGV)
|
|||
} 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,^([^/]+)/,;
|
||||
|
|
Загрузка…
Ссылка в новой задаче