aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2007-01-22 15:22:50 -0800
committerEric Wong <normalperson@yhbt.net>2007-02-23 00:57:09 -0800
commita2003abc23a5961534e8a0cc70b881eb78d54328 (patch)
tree06f0a7a779d7b5e98a9ff9c5051c181171b0d859
parentb805b44a923e32251af1abd4e8d7bf5f7d4d8ef6 (diff)
downloadgit-a2003abc23a5961534e8a0cc70b881eb78d54328.tar.gz
git-a2003abc23a5961534e8a0cc70b881eb78d54328.tar.xz
git-svn: allow --follow-parent on deleted directories
Any operations on the index in Git::SVN that is not wrapped by tmp_index_do() is wrong. Signed-off-by: Eric Wong <normalperson@yhbt.net>
-rwxr-xr-xgit-svn.perl2
-rwxr-xr-xt/t9104-git-svn-follow-parent.sh12
2 files changed, 13 insertions, 1 deletions
diff --git a/git-svn.perl b/git-svn.perl
index f01fb9a35..88c022701 100755
--- a/git-svn.perl
+++ b/git-svn.perl
@@ -1091,7 +1091,7 @@ sub find_parent_branch {
}
if (defined $r0 && defined $parent && $gs->revisions_eq($r0, $r)) {
print STDERR "Found branch parent: ($self->{ref_id}) $parent\n";
- command_noisy('read-tree', $parent);
+ $self->assert_index_clean($parent);
my $ed;
if ($self->ra->can_do_switch) {
print STDERR "Following parent with do_switch\n";
diff --git a/t/t9104-git-svn-follow-parent.sh b/t/t9104-git-svn-follow-parent.sh
index 3afec978d..402b614c7 100755
--- a/t/t9104-git-svn-follow-parent.sh
+++ b/t/t9104-git-svn-follow-parent.sh
@@ -49,6 +49,18 @@ test_expect_success 'init and fetch from one svn-remote' "
sed -n -e '3p'\`\" = goodbye
"
+test_expect_success 'follow deleted parent' "
+ svn cp -m 'resurrecting trunk as junk' \
+ -r2 $svnrepo/trunk $svnrepo/junk &&
+ git-repo-config --add svn-remote.git-svn.fetch \
+ junk:refs/remotes/svn/junk &&
+ git-svn fetch --follow-parent -i svn/thunk &&
+ git-svn fetch -i svn/junk --follow-parent &&
+ test -z \"\`git diff svn/junk svn/trunk\`\" &&
+ test \"\`git merge-base svn/junk svn/trunk\`\" \
+ = \"\`git rev-parse svn/trunk\`\"
+ "
+
test_debug 'gitk --all &'
test_done