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 | 
