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. --- perl/Git/SVN/Fetcher.pm | 1 + t/t9160-git-svn-preserve-empty-dirs.sh | 13 +++++++++++++ 2 files changed, 14 insertions(+) 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} = diff --git a/t/t9160-git-svn-preserve-empty-dirs.sh b/t/t9160-git-svn-preserve-empty-dirs.sh index 43b1852..ff06a86 100755 --- a/t/t9160-git-svn-preserve-empty-dirs.sh +++ b/t/t9160-git-svn-preserve-empty-dirs.sh @@ -19,6 +19,12 @@ test_expect_success 'initialize source svn repo containing empty dirs' ' svn_cmd co "$svnrepo"/trunk "$SVN_TREE" && ( cd "$SVN_TREE" && + mkdir -p module/foo module/bar && + echo x > module/foo/file.txt && + svn_cmd add module && + svn_cmd commit -mx && + svn_cmd mv module/foo/file.txt module/bar/file.txt && + svn_cmd commit -mx && mkdir -p 1 2 3/a 3/b 4 5 6 && echo "First non-empty file" > 2/file1.txt && echo "Second non-empty file" > 2/file2.txt && @@ -44,6 +50,8 @@ test_expect_success 'initialize source svn repo containing empty dirs' ' svn_cmd del 3/b && svn_cmd commit -m "delete non-last entry in directory" && + svn_cmd rm -m"x" "$svnrepo"/trunk/module && + svn_cmd del 2/file1.txt && svn_cmd del 3/a && svn_cmd commit -m "delete last entry in directory" && @@ -66,6 +74,11 @@ test_expect_success 'directory empty from inception' ' test $(find "$GIT_REPO"/1 -type f | wc -l) = "1" ' +# "$GIT_REPO"/module/ should not be recreated +test_expect_success 'no recreating empty dir deleted earlier' ' + test_must_fail test -d "$GIT_REPO"/module/ +' + # "$GIT_REPO"/2 and "$GIT_REPO"/3 should only contain the placeholder file. test_expect_success 'directory empty from subsequent svn commit' ' test -f "$GIT_REPO"/2/.gitignore && -- 1.8.1.5 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html