summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xgit-svn.perl14
-rwxr-xr-xt/t9104-git-svn-follow-parent.sh7
2 files changed, 18 insertions, 3 deletions
diff --git a/git-svn.perl b/git-svn.perl
index 21d53054f6..cd35efec7e 100755
--- a/git-svn.perl
+++ b/git-svn.perl
@@ -1266,11 +1266,19 @@ sub do_fetch {
my ($self, $paths, $rev) = @_;
my $ed;
my ($last_rev, @parents);
- if ($self->last_commit) {
+ if (my $lc = $self->last_commit) {
+ # we can have a branch that was deleted, then re-added
+ # under the same name but copied from another path, in
+ # which case we'll have multiple parents (we don't
+ # want to break the original ref, nor lose copypath info):
+ if (my $log_entry = $self->find_parent_branch($paths, $rev)) {
+ push @{$log_entry->{parents}}, $lc;
+ return $log_entry;
+ }
$ed = SVN::Git::Fetcher->new($self);
$last_rev = $self->{last_rev};
- $ed->{c} = $self->{last_commit};
- @parents = ($self->{last_commit});
+ $ed->{c} = $lc;
+ @parents = ($lc);
} else {
$last_rev = $rev;
if (my $log_entry = $self->find_parent_branch($paths, $rev)) {
diff --git a/t/t9104-git-svn-follow-parent.sh b/t/t9104-git-svn-follow-parent.sh
index eebb84974c..f5b7e5efe0 100755
--- a/t/t9104-git-svn-follow-parent.sh
+++ b/t/t9104-git-svn-follow-parent.sh
@@ -146,6 +146,13 @@ test_expect_success "track initial change if it was only made to parent" "
\"\`git rev-parse r9270-d~1\`\"
"
+test_expect_success "track multi-parent paths" "
+ svn cp -m 'resurrect /glob' $svnrepo/r9270 $svnrepo/glob &&
+ git-svn multi-fetch --follow-parent &&
+ test \`git cat-file commit refs/remotes/glob | \
+ grep '^parent ' | wc -l\` -eq 2
+ "
+
test_expect_success "multi-fetch continues to work" "
git-svn multi-fetch --follow-parent
"