git-svn: stop using path names as refnames with --follow-parent
Using path names as refnames breaks horribly if a user is tracking one large, toplevel directory, and a lower-level directory is followed from another project is a parent of another ref, as it will cause refnames such as: 'refs/remotes/trunk/path/to/stuff', which will conflict with a refname of 'refs/remotes/trunk'. Now we just append @$revno to the end of it the current refname. And if we have followed back to a grandparent, then we'll strip any existing '@$parent_revno' strings before appending our own '@$revno' string to it. Signed-off-by: Eric Wong <normalperson@yhbt.net>
This commit is contained in:
parent
2b27f6c884
commit
ce2a0f2f9d
@ -1135,10 +1135,12 @@ sub find_parent_branch {
|
|||||||
last if $gs;
|
last if $gs;
|
||||||
}
|
}
|
||||||
unless ($gs) {
|
unless ($gs) {
|
||||||
my $ref_id = $branch_from;
|
my $ref_id = $self->{ref_id};
|
||||||
$ref_id .= "\@$r" if find_ref($ref_id);
|
$ref_id =~ s/\@\d+$//;
|
||||||
|
$ref_id .= "\@$r";
|
||||||
# just grow a tail if we're not unique enough :x
|
# just grow a tail if we're not unique enough :x
|
||||||
$ref_id .= '-' while find_ref($ref_id);
|
$ref_id .= '-' while find_ref($ref_id);
|
||||||
|
print STDERR "Initializing parent: $ref_id\n";
|
||||||
$gs = Git::SVN->init($new_url, '', $ref_id, $ref_id);
|
$gs = Git::SVN->init($new_url, '', $ref_id, $ref_id);
|
||||||
}
|
}
|
||||||
my ($r0, $parent) = $gs->find_rev_before($r, 1);
|
my ($r0, $parent) = $gs->find_rev_before($r, 1);
|
||||||
|
@ -30,10 +30,12 @@ test_expect_success 'initialize repo' "
|
|||||||
test_expect_success 'init and fetch --follow-parent a moved directory' "
|
test_expect_success 'init and fetch --follow-parent a moved directory' "
|
||||||
git-svn init -i thunk $svnrepo/thunk &&
|
git-svn init -i thunk $svnrepo/thunk &&
|
||||||
git-svn fetch --follow-parent -i thunk &&
|
git-svn fetch --follow-parent -i thunk &&
|
||||||
test \"\`git-rev-parse --verify refs/remotes/trunk\`\" \
|
test \"\`git-rev-parse --verify refs/remotes/thunk@2\`\" \
|
||||||
= \"\`git-rev-parse --verify refs/remotes/thunk~1\`\" &&
|
= \"\`git-rev-parse --verify refs/remotes/thunk~1\`\" &&
|
||||||
test \"\`git-cat-file blob refs/remotes/thunk:readme |\
|
test \"\`git-cat-file blob refs/remotes/thunk:readme |\
|
||||||
sed -n -e '3p'\`\" = goodbye
|
sed -n -e '3p'\`\" = goodbye &&
|
||||||
|
test -n \"\`git-config --get svn-remote.git-svn.fetch \
|
||||||
|
'^trunk:refs/remotes/thunk@2$'\`\"
|
||||||
"
|
"
|
||||||
|
|
||||||
test_expect_success 'init and fetch from one svn-remote' "
|
test_expect_success 'init and fetch from one svn-remote' "
|
||||||
|
Loading…
Reference in New Issue
Block a user