git-svn: fix svn fetch erroneously recreating empty dir placeholder deleted earlier
PATCH 2/2 git-svn: fix svn fetch erroneously recreating empty dir placeholder deleted earlier
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(+)
perl/Git/SVN/Fetcher.pm +1 -0
@@ -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} =
Signature · 1 line
1.8.1.5