Merge with stable
authorPatrick Mezard <pmezard@gmail.com>
Fri, 04 Mar 2011 14:11:15 +0100
changeset 13532 d4c2f2ac3ff7
parent 13530 5f69af0d2fb3 (current diff)
parent 13531 67fbe566eff1 (diff)
child 13533 b4f5f76386f2
Merge with stable
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)
--- 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