All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ilya Basin <basinilya@gmail.com>
To: Git mailing list <git@vger.kernel.org>
Subject: [PATCH 2/2] git-svn: fix svn fetch erroneously recreating empty dir placeholder deleted earlier
Date: Sun, 28 Apr 2013 12:35:41 +0400	[thread overview]
Message-ID: <1611408441.20130428123541@gmail.com> (raw)

The Fetcher accumulates deleted paths in an array and doesn't reset the
array on next commit. This causes different results when interrupting
and resuming the fetch.
When --preserve-empty-dirs flag is used, a path in the array can be
erroneously treated as just deleted, although it was deleted in the
previous commit and cause the creation of an empty dir placeholder.

Test script:

    (
    set -e

    rm -rf testrepo.svn testrepo.gitsvn
    svnadmin create testrepo.svn
    url=file://`pwd`/testrepo.svn

    rm -rf testrepo
    svn co "$url" testrepo
    cd testrepo

    mkdir -p foo/bar
    echo aaa > foo/bar/fil.txt
    svn add foo
    svn commit -mx

    svn rm -mx "$url/foo/bar/fil.txt"
    svn rm -mx "$url/foo/bar"

    echo aaa > fil.txt
    svn add fil.txt
    svn commit -mx

    cd ..

    rm -rf testrepo.gitsvn && git svn clone --preserve-empty-dirs "$url" testrepo.gitsvn

    if [ -e testrepo.gitsvn/foo/bar/.gitignore ]; then
      echo "error: testrepo.gitsvn/foo/bar/.gitignore exists"
      false
    fi
    )
---
 perl/Git/SVN/Fetcher.pm | 1 +
 1 file changed, 1 insertion(+)

diff --git a/perl/Git/SVN/Fetcher.pm b/perl/Git/SVN/Fetcher.pm
index 4f96076..e658889 100644
--- a/perl/Git/SVN/Fetcher.pm
+++ b/perl/Git/SVN/Fetcher.pm
@@ -19,6 +19,7 @@ sub new {
 	my ($class, $git_svn, $switch_path) = @_;
 	my $self = SVN::Delta::Editor->new;
 	bless $self, $class;
+	@deleted_gpath = ();
 	if (exists $git_svn->{last_commit}) {
 		$self->{c} = $git_svn->{last_commit};
 		$self->{empty_symlinks} =
-- 
1.8.1.5

                 reply	other threads:[~2013-04-28  8:37 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

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=1611408441.20130428123541@gmail.com \
    --to=basinilya@gmail.com \
    --cc=git@vger.kernel.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.