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

    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" 

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

diff --git a/perl/Git/SVN/ b/perl/Git/SVN/
index 4f96076..e658889 100644
--- a/perl/Git/SVN/
+++ b/perl/Git/SVN/
@@ -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} =

To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to
More majordomo info at

Reply via email to