Mercurial > hg-stable
changeset 14820:7ef125fa9b35 stable
subrepo: correct revision in svn checkout
A Subversion subrepo checkout uses a url and --revision which does not do the
correct thing when specifying a revision of a branch that has since been
deleted and recreated. The checkout needs to specify the revision as URL@REV
instead.
author | Eli Carter <eli.carter@tektronix.com> |
---|---|
date | Thu, 30 Jun 2011 13:22:12 -0500 |
parents | b30c889584ef |
children | 2017495bd552 |
files | mercurial/subrepo.py tests/test-subrepo-svn.t |
diffstat | 2 files changed, 67 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/subrepo.py Thu Jun 30 12:55:19 2011 -0500 +++ b/mercurial/subrepo.py Thu Jun 30 13:22:12 2011 -0500 @@ -663,7 +663,9 @@ args = ['checkout'] if self._svnversion >= (1, 5): args.append('--force') - args.extend([state[0], '--revision', state[1]]) + # The revision must be specified at the end of the URL to properly + # update to a directory which has since been deleted and recreated. + args.append('%s@%s' % (state[0], state[1])) status, err = self._svncommand(args, failok=True) if not re.search('Checked out revision [0-9]+.', status): if ('is already a working copy for a different URL' in err
--- a/tests/test-subrepo-svn.t Thu Jun 30 12:55:19 2011 -0500 +++ b/tests/test-subrepo-svn.t Thu Jun 30 13:22:12 2011 -0500 @@ -519,3 +519,67 @@ $ hg co tip abort: crosses branches (merge branches or use --clean to discard changes) [255] + +Point to a Subversion branch which has since been deleted and recreated +First, create that condition in the repository. + + $ hg ci -m cleanup + committing subrepository obstruct + Sending obstruct/other + Transmitting file data . + Committed revision 7. + At revision 7. + $ svn mkdir -m "baseline" $SVNREPO/trunk + + Committed revision 8. + $ svn copy -m "initial branch" $SVNREPO/trunk $SVNREPO/branch + + Committed revision 9. + $ svn co --quiet "$SVNREPO"/branch tempwc + $ cd tempwc + $ echo "something old" > somethingold + $ svn add somethingold + A somethingold + $ svn ci -m 'Something old' + Adding somethingold + Transmitting file data . + Committed revision 10. + $ svn rm -m "remove branch" $SVNREPO/branch + + Committed revision 11. + $ svn copy -m "recreate branch" $SVNREPO/trunk $SVNREPO/branch + + Committed revision 12. + $ svn up + D somethingold + Updated to revision 12. + $ echo "something new" > somethingnew + $ svn add somethingnew + A somethingnew + $ svn ci -m 'Something new' + Adding somethingnew + Transmitting file data . + Committed revision 13. + $ cd .. + $ rm -rf tempwc + $ svn co "$SVNREPO/branch"@10 recreated + A recreated/somethingold + Checked out revision 10. + $ echo "recreated = [svn] $SVNREPO/branch" >> .hgsub + $ hg ci -m addsub + committing subrepository recreated + $ cd recreated + $ svn up + D somethingold + A somethingnew + Updated to revision 13. + $ cd .. + $ hg ci -m updatesub + committing subrepository recreated + $ hg up -r-2 + D $TESTTMP/rebaserepo/recreated/somethingnew + A $TESTTMP/rebaserepo/recreated/somethingold + Checked out revision 10. + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ test -e recreated/somethingold +