зеркало из https://github.com/microsoft/git.git
git-svn: workaround a for broken symlinks in SVN
It's possible for bad clients to commit symlinks without the 5-character "link " prefix in symlinks. So guard around this bug in SVN and make a best effort to create symlinks if the "link " prefix is missing. More information on this SVN bug is described here: http://subversion.tigris.org/issues/show_bug.cgi?id=2692 To be pedantic, there is still a corner case that neither we nor SVN can handle: If somebody made a link using a broken SVN client where "link " is the first part of its path, e.g. "link sausage", then we'd end up having a symlink which points to "sausage" because we incorrectly stripped the "link ". Hopefully this hasn't happened in practice, but if it has, it's not our fault SVN is broken :) Thanks to Benoit Sigoure and Sverre Johansen for reporting and feedback. Signed-off-by: Eric Wong <normalperson@yhbt.net>
This commit is contained in:
Родитель
ad94802a7b
Коммит
7fc35e0e94
|
@ -3177,9 +3177,15 @@ sub close_file {
|
||||||
}
|
}
|
||||||
sysseek($fh, 0, 0) or croak $!;
|
sysseek($fh, 0, 0) or croak $!;
|
||||||
if ($fb->{mode_b} == 120000) {
|
if ($fb->{mode_b} == 120000) {
|
||||||
|
eval {
|
||||||
sysread($fh, my $buf, 5) == 5 or croak $!;
|
sysread($fh, my $buf, 5) == 5 or croak $!;
|
||||||
$buf eq 'link ' or die "$path has mode 120000",
|
$buf eq 'link ' or die "$path has mode 120000",
|
||||||
"but is not a link\n";
|
" but is not a link";
|
||||||
|
};
|
||||||
|
if ($@) {
|
||||||
|
warn "$@\n";
|
||||||
|
sysseek($fh, 0, 0) or croak $!;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
defined(my $pid = open my $out,'-|') or die "Can't fork: $!\n";
|
defined(my $pid = open my $out,'-|') or die "Can't fork: $!\n";
|
||||||
if (!$pid) {
|
if (!$pid) {
|
||||||
|
|
Загрузка…
Ссылка в новой задаче