git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Junio C Hamano <junkio@cox.net>
To: Eric Wong <normalperson@yhbt.net>
Cc: Seth Falcon <sethfalcon@gmail.com>,
	Alexander Klink <ak-git@cynops.de>,
	git@vger.kernel.org
Subject: Re: git-svn failure when symlink added in svn
Date: Sun, 29 Apr 2007 22:08:26 -0700	[thread overview]
Message-ID: <7vmz0qcuut.fsf@assigned-by-dhcp.cox.net> (raw)
In-Reply-To: <20070429222136.GA1800@untitled> (Eric Wong's message of "Sun, 29 Apr 2007 15:21:36 -0700")

Eric Wong <normalperson@yhbt.net> writes:

> Junio C Hamano <junkio@cox.net> wrote:
>> diff --git a/git-svn.perl b/git-svn.perl
>> index 4be8576..cef6697 100755
>> --- a/git-svn.perl
>> +++ b/git-svn.perl
>> @@ -2464,15 +2464,15 @@ sub close_file {
>>  	my $hash;
>>  	my $path = $self->git_path($fb->{path});
>>  	if (my $fh = $fb->{fh}) {
>> -		seek($fh, 0, 0) or croak $!;
>> +		sysseek($fh, 0, 0) or croak $!;
>>  		my $md5 = Digest::MD5->new;
>>  		$md5->addfile($fh);
>
> We may want to keep the plain seek() here and do both seek and sysseek,
> I'm not sure if $md5->addfile() uses read or sysread internally.

Ok.  The seek before Digest::MD5 can stay as it has been that
way for a long time without causing problems.  How about this as
an replacement then?

-- >8 --
[PATCH] Fix symlink handling in git-svn, related to PerlIO

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>
---
 git-svn.perl |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/git-svn.perl b/git-svn.perl
index 4be8576..6f509f8 100755
--- a/git-svn.perl
+++ b/git-svn.perl
@@ -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";
 		}
-- 
1.5.2.rc0.781.g5868

  parent reply	other threads:[~2007-04-30  5:08 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-04-14  6:41 git-svn failure when symlink added in svn Seth Falcon
2007-04-14 20:10 ` Eric Wong
2007-04-16  3:13   ` Seth Falcon
2007-04-26 23:07     ` Alexander Klink
2007-04-27 18:03       ` Linus Torvalds
2007-04-28 13:02         ` Alexander Klink
2007-04-28 16:54           ` Seth Falcon
2007-04-28 17:31           ` Junio C Hamano
2007-04-28 18:13             ` Seth Falcon
2007-04-28 18:34               ` Junio C Hamano
2007-04-28 21:15                 ` Seth Falcon
2007-04-28 22:43                   ` Junio C Hamano
     [not found]                     ` <m2irbfqlze.fsf@ziti.local>
2007-04-29 18:26                       ` Eric Wong
2007-04-30 14:43                         ` Seth Falcon
2007-04-30 15:43                           ` Eric Wong
2007-05-01 17:49                             ` Seth Falcon
2007-04-29 18:31                     ` Eric Wong
2007-04-29 21:01                       ` Junio C Hamano
2007-04-29 22:21                         ` Eric Wong
2007-04-30  0:24                           ` Alexander Klink
2007-04-30  5:08                           ` Junio C Hamano [this message]
2007-04-30  6:31                             ` Eric Wong
2007-04-30 14:33                               ` Seth Falcon
2007-05-01 20:53                             ` Alexander Klink

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=7vmz0qcuut.fsf@assigned-by-dhcp.cox.net \
    --to=junkio@cox.net \
    --cc=ak-git@cynops.de \
    --cc=git@vger.kernel.org \
    --cc=normalperson@yhbt.net \
    --cc=sethfalcon@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).