]> git.pld-linux.org Git - packages/git-core.git/commitdiff
fix git-svn fetching from svn servers that use serf library auto/th/git-core-1.8.3.2-2
authorKacper Kornet <draenog@pld-linux.org>
Fri, 12 Jul 2013 14:54:29 +0000 (15:54 +0100)
committerKacper Kornet <draenog@pld-linux.org>
Fri, 12 Jul 2013 15:05:40 +0000 (16:05 +0100)
git-core-svn-serf.patch [new file with mode: 0644]
git-core.spec

diff --git a/git-core-svn-serf.patch b/git-core-svn-serf.patch
new file mode 100644 (file)
index 0000000..ca4fa41
--- /dev/null
@@ -0,0 +1,135 @@
+From 4e63dcc86cc77ec86a8d35ff752603a4b44d44a7 Mon Sep 17 00:00:00 2001
+From: "Kyle J. McKay" <mackyle@gmail.com>
+Date: Sat, 6 Jul 2013 21:20:48 -0700
+Subject: [PATCH 1/2] Git.pm: add new temp_is_locked function
+
+The temp_is_locked function can be used to determine whether
+or not a given name previously passed to temp_acquire is
+currently locked.
+
+Signed-off-by: Kyle J. McKay <mackyle@gmail.com>
+Signed-off-by: Junio C Hamano <gitster@pobox.com>
+---
+ perl/Git.pm | 33 +++++++++++++++++++++++++++++++--
+ 1 file changed, 31 insertions(+), 2 deletions(-)
+
+diff --git a/perl/Git.pm b/perl/Git.pm
+index 7a252ef..0ba15b9 100644
+--- a/perl/Git.pm
++++ b/perl/Git.pm
+@@ -61,7 +61,7 @@ require Exporter;
+                 remote_refs prompt
+                 get_tz_offset
+                 credential credential_read credential_write
+-                temp_acquire temp_release temp_reset temp_path);
++                temp_acquire temp_is_locked temp_release temp_reset temp_path);
+ =head1 DESCRIPTION
+@@ -1206,6 +1206,35 @@ sub temp_acquire {
+       $temp_fd;
+ }
++=item temp_is_locked ( NAME )
++
++Returns true if the internal lock created by a previous C<temp_acquire()>
++call with C<NAME> is still in effect.
++
++When temp_acquire is called on a C<NAME>, it internally locks the temporary
++file mapped to C<NAME>.  That lock will not be released until C<temp_release()>
++is called with either the original C<NAME> or the L<File::Handle> that was
++returned from the original call to temp_acquire.
++
++Subsequent attempts to call C<temp_acquire()> with the same C<NAME> will fail
++unless there has been an intervening C<temp_release()> call for that C<NAME>
++(or its corresponding L<File::Handle> that was returned by the original
++C<temp_acquire()> call).
++
++If true is returned by C<temp_is_locked()> for a C<NAME>, an attempt to
++C<temp_acquire()> the same C<NAME> will cause an error unless
++C<temp_release> is first called on that C<NAME> (or its corresponding
++L<File::Handle> that was returned by the original C<temp_acquire()> call).
++
++=cut
++
++sub temp_is_locked {
++      my ($self, $name) = _maybe_self(@_);
++      my $temp_fd = \$TEMP_FILEMAP{$name};
++
++      defined $$temp_fd && $$temp_fd->opened && $TEMP_FILES{$$temp_fd}{locked};
++}
++
+ =item temp_release ( NAME )
+ =item temp_release ( FILEHANDLE )
+@@ -1248,7 +1277,7 @@ sub _temp_cache {
+       my $temp_fd = \$TEMP_FILEMAP{$name};
+       if (defined $$temp_fd and $$temp_fd->opened) {
+-              if ($TEMP_FILES{$$temp_fd}{locked}) {
++              if (temp_is_locked($name)) {
+                       throw Error::Simple("Temp file with moniker '" .
+                               $name . "' already in use");
+               }
+-- 
+1.8.3.2
+
+
+From 8ac251b66b952b0eddfa4e5bbf08a3c0ae7dbc0b Mon Sep 17 00:00:00 2001
+From: "Kyle J. McKay" <mackyle@gmail.com>
+Date: Sat, 6 Jul 2013 21:20:49 -0700
+Subject: [PATCH 2/2] git-svn: allow git-svn fetching to work using serf
+
+When attempting to git-svn fetch files from an svn https?: url using
+the serf library (the only choice starting with svn 1.8) the following
+errors can occur:
+
+Temp file with moniker 'svn_delta' already in use at Git.pm line 1250
+Temp file with moniker 'git_blob' already in use at Git.pm line 1250
+
+David Rothenberger <daveroth@acm.org> has determined the cause to
+be that ra_serf does not drive the delta editor in a depth-first
+manner [...]. Instead, the calls come in this order:
+
+1. open_root
+2. open_directory
+3. add_file
+4. apply_textdelta
+5. add_file
+6. apply_textdelta
+
+When using the ra_serf access method, git-svn can end up needing
+to create several temp files before the first one is closed.
+
+This change causes a new temp file moniker to be generated if the
+one that would otherwise have been used is currently locked.
+
+Signed-off-by: Kyle J. McKay <mackyle@gmail.com>
+Signed-off-by: Junio C Hamano <gitster@pobox.com>
+---
+ perl/Git/SVN/Fetcher.pm | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/perl/Git/SVN/Fetcher.pm b/perl/Git/SVN/Fetcher.pm
+index bd17418..10edb27 100644
+--- a/perl/Git/SVN/Fetcher.pm
++++ b/perl/Git/SVN/Fetcher.pm
+@@ -315,11 +315,13 @@ sub change_file_prop {
+ sub apply_textdelta {
+       my ($self, $fb, $exp) = @_;
+       return undef if $self->is_path_ignored($fb->{path});
+-      my $fh = $::_repository->temp_acquire('svn_delta');
++      my $suffix = 0;
++      ++$suffix while $::_repository->temp_is_locked("svn_delta_${$}_$suffix");
++      my $fh = $::_repository->temp_acquire("svn_delta_${$}_$suffix");
+       # $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 = $::_repository->temp_acquire('git_blob');
++      my $base = $::_repository->temp_acquire("git_blob_${$}_$suffix");
+       if ($fb->{blob}) {
+               my ($base_is_link, $size);
+-- 
+1.8.3.2
+
index 5ff1d8fe91701fcf568d7df25bf7dc991369617f..c682008542479da33768b8a5a9f608244a0690c8 100644 (file)
@@ -11,7 +11,7 @@ Summary:      Distributed version control system focused on speed, effectivity and us
 Summary(pl.UTF-8):     Rozproszony system śledzenia treści skupiony na szybkości, wydajności i użyteczności
 Name:          git-core
 Version:       1.8.3.2
-Release:       1
+Release:       2
 License:       GPL v2
 Group:         Development/Tools
 Source0:       http://git-core.googlecode.com/files/git-%{version}.tar.gz
@@ -27,6 +27,7 @@ Patch0:               %{name}-tests.patch
 Patch1:                %{name}-key-bindings.patch
 Patch2:                %{name}-sysconfdir.patch
 Patch3:                cherry-picked-commitlog.patch
+Patch4:                %{name}-svn-serf.patch
 URL:           http://git-scm.com/
 BuildRequires: autoconf >= 2.59
 BuildRequires: automake
@@ -386,6 +387,7 @@ Ta wtyczka dostarcza podświetlanie składni dla treści commitów gita.
 %patch1 -p0
 %patch2 -p1
 %patch3 -p1
+%patch4 -p1
 
 %build
 %{__aclocal}
This page took 0.156779 seconds and 4 git commands to generate.