git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Alexander Litvinov <litvinov2004@gmail.com>
To: git@vger.kernel.org
Cc: Eric Wong <normalperson@yhbt.net>
Subject: [PATCH] git-svn now work with crlf convertion enabled.
Date: Thu, 31 Jul 2008 12:43:34 +0700	[thread overview]
Message-ID: <200807311243.35219.litvinov2004@gmail.com> (raw)
In-Reply-To: <alpine.DEB.1.00.0807231117290.2830@eeepc-johanness>

Make git-svn works with crlf (or any other) file content convertion enabled.

When we modify file content SVN cant apply its delta to it. To fix this
situation I take full file content from SVN as next revision. This is
dump and slow but it works.
---
 git-svn.perl |   34 +++++++++++++++++++---------------
 1 files changed, 19 insertions(+), 15 deletions(-)

diff --git a/git-svn.perl b/git-svn.perl
index cf6dbbc..606a177 100755
--- a/git-svn.perl
+++ b/git-svn.perl
@@ -28,6 +28,7 @@ sub fatal (@) { print STDERR "@_\n"; exit 1 }
 require SVN::Core; # use()-ing this causes segfaults for me... *shrug*
 require SVN::Ra;
 require SVN::Delta;
+require SVN::Client;
 if ($SVN::Core::VERSION lt '1.1.0') {
 	fatal "Need SVN::Core 1.1.0 or better (got $SVN::Core::VERSION)";
 }
@@ -3075,6 +3076,7 @@ sub new {
 	my $self = SVN::Delta::Editor->new;
 	bless $self, $class;
 	$self->{c} = $git_svn->{last_commit} if exists $git_svn->{last_commit};
+	$self->{url} = $git_svn->{url};
 	$self->{empty} = {};
 	$self->{dir_prop} = {};
 	$self->{file_prop} = {};
@@ -3214,30 +3216,32 @@ sub change_file_prop {
 
 sub apply_textdelta {
 	my ($self, $fb, $exp) = @_;
-	my $fh = IO::File->new_tmpfile;
-	$fh->autoflush(1);
-	# $fh gets auto-closed() by SVN::TxDelta::apply(),
-	# (but $base does not,) so dup() it for reading in close_file
-	open my $dup, '<&', $fh or croak $!;
+
 	my $base = IO::File->new_tmpfile;
 	$base->autoflush(1);
 	if ($fb->{blob}) {
 		print $base 'link ' if ($fb->{mode_a} == 120000);
 		my $size = $::_repository->cat_blob($fb->{blob}, $base);
 		die "Failed to read object $fb->{blob}" if ($size < 0);
-
-		if (defined $exp) {
-			seek $base, 0, 0 or croak $!;
-			my $got = ::md5sum($base);
-			die "Checksum mismatch: $fb->{path} $fb->{blob}\n",
-			    "expected: $exp\n",
-			    "     got: $got\n" if ($got ne $exp);
-		}
 	}
 	seek $base, 0, 0 or croak $!;
-	$fb->{fh} = $dup;
+
+	my $fh = IO::File->new_tmpfile;
+	$fh->autoflush(1);
+
+	$fb->{fh} = $fh;
 	$fb->{base} = $base;
-	[ SVN::TxDelta::apply($base, $fh, undef, $fb->{path}, $fb->{pool}) ];
+
+	my $url = $self->{url};
+	$url =~ s/\/$//;
+	$url .= '/';
+	$url .= $fb->{path};
+
+	my $rev = $self->{file_prop}->{$fb->{path}}->{'svn:entry:committed-rev'};
+	die ("Can't find $fb->{path} revision") unless defined $rev;
+
+	my $ctx = SVN::Client->new();
+	$ctx->cat($fh, $url, $rev);
 }
 
 sub close_file {
-- 
1.5.6.2

  parent reply	other threads:[~2008-07-31  5:44 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-07-23  8:44 git-svn does not seems to work with crlf convertion enabled Alexander Litvinov
2008-07-23  9:18 ` Johannes Schindelin
2008-07-23 11:52   ` Alexander Litvinov
2008-07-23 12:57     ` Johannes Schindelin
2008-07-23 15:49       ` Avery Pennarun
2008-07-23 16:07         ` Johannes Schindelin
2008-07-24  3:13       ` Alexander Litvinov
2008-08-06 11:15       ` Petr Baudis
2008-08-06 12:35         ` Peter Harris
2008-08-06 12:43         ` Johannes Schindelin
2008-08-06 13:51           ` git-svn on MSysGit and why is it (going to be?) unsupported Petr Baudis
2008-08-06 15:23             ` Avery Pennarun
2008-08-06 16:11         ` git-svn does not seems to work with crlf convertion enabled Dmitry Potapov
2008-07-24 14:24     ` Dmitry Potapov
2008-07-24 14:40       ` Johannes Schindelin
2008-07-24 16:28         ` Avery Pennarun
2008-07-30  4:37   ` Alexander Litvinov
2008-07-31  5:43   ` Alexander Litvinov [this message]
2008-07-31  5:57     ` [PATCH] git-svn now " Alexander Litvinov
2008-07-31 10:45       ` Dmitry Potapov
2008-07-31 19:09         ` [RFC] hash-object --no-filters Dmitry Potapov
2008-08-01  3:23         ` [PATCH] git-svn now work with crlf convertion enabled Alexander Litvinov
2008-08-01  5:09           ` Junio C Hamano
2008-08-01  7:44             ` Dmitry Potapov
2008-08-01 11:27               ` Alexander Litvinov
2008-08-01  7:47           ` Dmitry Potapov
2008-08-01  8:08             ` Junio C Hamano
2008-08-01  9:24               ` Dmitry Potapov
2008-08-01 19:42                 ` Junio C Hamano
2008-08-01 22:09                   ` Dmitry Potapov
2008-08-01 22:14                     ` Junio C Hamano
2008-08-01 23:10                       ` Dmitry Potapov
2008-08-02 17:28                     ` [PATCH] hash-object --no-filters Junio C Hamano
2008-08-03  5:42                       ` Dmitry Potapov
2008-08-03  5:56                         ` Dmitry Potapov
2008-08-03 14:36                           ` [PATCH 1/5] correct argument checking test for git hash-object Dmitry Potapov
2008-08-03 14:36                             ` [PATCH 2/5] correct usage help string for git-hash-object Dmitry Potapov
2008-08-03 14:36                               ` [PATCH 3/5] use parse_options() in git hash-object Dmitry Potapov
2008-08-03 14:36                                 ` [PATCH 4/5] add --path option to " Dmitry Potapov
2008-08-03 14:36                                   ` [PATCH 5/5] add --no-filters " Dmitry Potapov
2008-08-03 20:44                           ` [PATCH] hash-object --no-filters Junio C Hamano
2008-08-01 11:11               ` [PATCH] git-svn now work with crlf convertion enabled Alexander Litvinov
2008-08-01 12:36                 ` Dmitry Potapov
2008-08-04  3:10                   ` Alexander Litvinov
2008-08-04  0:48     ` Eric Wong

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=200807311243.35219.litvinov2004@gmail.com \
    --to=litvinov2004@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=normalperson@yhbt.net \
    /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).