Skip to content

Commit

Permalink
Fix symlink handling in git-svn, related to PerlIO
Browse files Browse the repository at this point in the history
After reading the leading contents from a symlink data obtained
from subversion, which we expect to begin with 'link ', the code
forked to hash the remainder (which should match readlink()
result) using git-hash-objects, by redirecting its STDIN from
the filehandle we read that 'link ' from.  This was Ok with Perl
on modern Linux, but on Mac OS, the read in the parent process
slurped more than we asked for in stdio buffer, and the child
did not correctly see the "remainder".

This attempts to fix the issue by using lower level sysseek and
sysread instead of seek and read to bypass the stdio buffer.

Signed-off-by: Junio C Hamano <junkio@cox.net>
Acked-by: Eric Wong <normalperson@yhbt.net>
Acked-by: Seth Falcon <sethfalcon@gmail.com>
  • Loading branch information
Junio C Hamano committed Apr 30, 2007
1 parent e9d54bd commit bcd8ee5
Showing 1 changed file with 2 additions and 2 deletions.
4 changes: 2 additions & 2 deletions git-svn.perl
Original file line number Diff line number Diff line change
Expand Up @@ -2470,9 +2470,9 @@ sub close_file {
my $got = $md5->hexdigest;
die "Checksum mismatch: $path\n",
"expected: $exp\n got: $got\n" if ($got ne $exp);
seek($fh, 0, 0) or croak $!;
sysseek($fh, 0, 0) or croak $!;
if ($fb->{mode_b} == 120000) {
read($fh, my $buf, 5) == 5 or croak $!;
sysread($fh, my $buf, 5) == 5 or croak $!;
$buf eq 'link ' or die "$path has mode 120000",
"but is not a link\n";
}
Expand Down

0 comments on commit bcd8ee5

Please sign in to comment.