git-svn: --follow-parent tracks multi-parent paths
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). Add a test for this, too, of course. Signed-off-by: Eric Wong <normalperson@yhbt.net>
This commit is contained in:
parent
e518192f3b
commit
b9dffd8cad
14
git-svn.perl
14
git-svn.perl
@ -1266,11 +1266,19 @@ sub do_fetch {
|
|||||||
my ($self, $paths, $rev) = @_;
|
my ($self, $paths, $rev) = @_;
|
||||||
my $ed;
|
my $ed;
|
||||||
my ($last_rev, @parents);
|
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);
|
$ed = SVN::Git::Fetcher->new($self);
|
||||||
$last_rev = $self->{last_rev};
|
$last_rev = $self->{last_rev};
|
||||||
$ed->{c} = $self->{last_commit};
|
$ed->{c} = $lc;
|
||||||
@parents = ($self->{last_commit});
|
@parents = ($lc);
|
||||||
} else {
|
} else {
|
||||||
$last_rev = $rev;
|
$last_rev = $rev;
|
||||||
if (my $log_entry = $self->find_parent_branch($paths, $rev)) {
|
if (my $log_entry = $self->find_parent_branch($paths, $rev)) {
|
||||||
|
@ -146,6 +146,13 @@ test_expect_success "track initial change if it was only made to parent" "
|
|||||||
\"\`git rev-parse r9270-d~1\`\"
|
\"\`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" "
|
test_expect_success "multi-fetch continues to work" "
|
||||||
git-svn multi-fetch --follow-parent
|
git-svn multi-fetch --follow-parent
|
||||||
"
|
"
|
||||||
|
Loading…
Reference in New Issue
Block a user