Skip to contentSkip to conversation

git-svn: fix svn fetch erroneously recreating empty dir placeholder deleted earlier

PATCH In review Ilya Basin 1 participant 1 message Jun 15, 2016

lore
Share & tools
lore

Ilya Basin

author
#0 lore raw

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
index 4f96076..e658889 100644
@@ -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