aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xgit-svn.perl14
-rwxr-xr-xt/t9103-git-svn-tracked-directory-removed.sh39
2 files changed, 53 insertions, 0 deletions
diff --git a/git-svn.perl b/git-svn.perl
index 3aa7f8cb4..d411a3431 100755
--- a/git-svn.perl
+++ b/git-svn.perl
@@ -3045,6 +3045,20 @@ sub add_file {
sub add_directory {
my ($self, $path, $cp_path, $cp_rev) = @_;
+ my $gpath = $self->git_path($path);
+ if ($gpath eq '') {
+ my ($ls, $ctx) = command_output_pipe(qw/ls-tree
+ -r --name-only -z/,
+ $self->{c});
+ local $/ = "\0";
+ while (<$ls>) {
+ chomp;
+ $self->{gii}->remove($_);
+ print "\tD\t$_\n" unless $::_q;
+ }
+ command_close_pipe($ls, $ctx);
+ $self->{empty}->{$path} = 0;
+ }
my ($dir, $file) = ($path =~ m#^(.*?)/?([^/]+)$#);
delete $self->{empty}->{$dir};
$self->{empty}->{$path} = 1;
diff --git a/t/t9103-git-svn-tracked-directory-removed.sh b/t/t9103-git-svn-tracked-directory-removed.sh
new file mode 100755
index 000000000..0f0b0fd2c
--- /dev/null
+++ b/t/t9103-git-svn-tracked-directory-removed.sh
@@ -0,0 +1,39 @@
+#!/bin/sh
+#
+# Copyright (c) 2007 Eric Wong
+#
+
+test_description='git-svn tracking removed top-level path'
+. ./lib-git-svn.sh
+
+test_expect_success 'make history for tracking' '
+ mkdir import &&
+ mkdir import/trunk &&
+ echo hello >> import/trunk/README &&
+ svn import -m initial import $svnrepo &&
+ rm -rf import &&
+ svn co $svnrepo/trunk trunk &&
+ echo bye bye >> trunk/README &&
+ svn rm -m "gone" $svnrepo/trunk &&
+ rm -rf trunk &&
+ mkdir trunk &&
+ echo "new" > trunk/FOLLOWME &&
+ svn import -m "new trunk" trunk $svnrepo/trunk
+'
+
+test_expect_success 'clone repo with git' '
+ git svn clone -s $svnrepo x &&
+ test -f x/FOLLOWME &&
+ test ! -f x/README
+'
+
+test_expect_success 'make sure r2 still has old file' '
+ cd x &&
+ test -n "$(git svn find-rev r1)" &&
+ git reset --hard $(git svn find-rev r1) &&
+ test -f README &&
+ test ! -f FOLLOWME &&
+ test x$(git svn find-rev r2) = x
+'
+
+test_done