diff options
-rwxr-xr-x | git-svn.perl | 14 | ||||
-rwxr-xr-x | t/t9103-git-svn-tracked-directory-removed.sh | 39 |
2 files changed, 53 insertions, 0 deletions
diff --git a/git-svn.perl b/git-svn.perl index 3aa7f8cb40..d411a34317 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 0000000000..0f0b0fd2c6 --- /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 |