# HG changeset patch # User Patrick Mezard # Date 1299244275 -3600 # Node ID d4c2f2ac3ff7005e0bd9384a24715fd1fff1e0f1 # Parent 5f69af0d2fb3790f6d84a237d22e86498bc1d0fb# Parent 67fbe566eff1c991921d66f836b73bd0549620a3 Merge with stable diff -r 5f69af0d2fb3 -r d4c2f2ac3ff7 mercurial/subrepo.py --- a/mercurial/subrepo.py Thu Mar 03 22:41:38 2011 +0100 +++ b/mercurial/subrepo.py Fri Mar 04 14:11:15 2011 +0100 @@ -625,7 +625,8 @@ def get(self, state, overwrite=False): if overwrite: self._svncommand(['revert', '--recursive']) - status = self._svncommand(['checkout', state[0], '--revision', state[1]]) + status = self._svncommand(['checkout', '--force', state[0], + '--revision', state[1]]) if not re.search('Checked out revision [0-9]+.', status): raise util.Abort(status.splitlines()[-1]) self._ui.status(status) diff -r 5f69af0d2fb3 -r d4c2f2ac3ff7 tests/test-subrepo-svn.t --- a/tests/test-subrepo-svn.t Thu Mar 03 22:41:38 2011 +0100 +++ b/tests/test-subrepo-svn.t Fri Mar 04 14:11:15 2011 +0100 @@ -438,3 +438,60 @@ $ svnversion 2 $ cd .. + +Test case where subversion would fail to update the subrepo because there +are unknown directories being replaced by tracked ones (happens with rebase). + + $ cd $WCROOT/src + $ mkdir dir + $ echo epsilon.py > dir/epsilon.py + $ svn add dir + A dir + A dir/epsilon.py + $ svn ci -m 'Add dir/epsilon.py' + Adding src/dir + Adding src/dir/epsilon.py + Transmitting file data . + Committed revision 6. + $ cd ../.. + $ hg init rebaserepo + $ cd rebaserepo + $ svn co -r5 --quiet "$SVNREPO"/src s + $ echo "s = [svn] $SVNREPO/src" >> .hgsub + $ hg add .hgsub + $ hg ci -m addsub + committing subrepository s + $ echo a > a + $ hg ci -Am adda + adding a + $ hg up 0 + 0 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ svn up -r6 s + A s/dir + A s/dir/epsilon.py + + Fetching external item into 's/externals' + Updated external to revision 1. + + Updated to revision 6. + $ hg ci -m updatesub + committing subrepository s + created new head + $ echo pyc > s/dir/epsilon.pyc + $ hg up 1 + D $TESTTMP/rebaserepo/s/dir + + Fetching external item into '$TESTTMP/rebaserepo/s/externals' + Checked out external at revision 1. + + Checked out revision 5. + 2 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ hg up 2 + E $TESTTMP/rebaserepo/s/dir + A $TESTTMP/rebaserepo/s/dir/epsilon.py + + Fetching external item into '$TESTTMP/rebaserepo/s/externals' + Checked out external at revision 1. + + Checked out revision 6. + 1 files updated, 0 files merged, 1 files removed, 0 files unresolved