# HG changeset patch # User Augie Fackler # Date 1304066058 18000 # Node ID bcc6ed0f6c3bc147946a3bd82317e40a583e007e # Parent 9d2be7e17fc1999d734200ad7a991f3390a34bb7 svn subrepo: attempt work around obstructed checkouts (issue2752) It should be possible to do better than this with 'svn switch', but the logic required woud be significantly more complex. Until someone needs the performance improvements of using switch, we'll just use the same strategy for everything. diff -r 9d2be7e17fc1 -r bcc6ed0f6c3b mercurial/subrepo.py --- a/mercurial/subrepo.py Fri Apr 29 16:34:52 2011 +0200 +++ b/mercurial/subrepo.py Fri Apr 29 03:34:18 2011 -0500 @@ -621,7 +621,15 @@ self._svncommand(['revert', '--recursive']) status = self._svncommand(['checkout', state[0], '--revision', state[1]]) if not re.search('Checked out revision [0-9]+.', status): - raise util.Abort(status.splitlines()[-1]) + # catch the case where the checkout operation is + # obstructed but the working copy is clean + if ('already a working copy for a different' in status and + not self.dirty()): + self.remove() + self.get(state, overwrite) + return + else: + raise util.Abort(status.splitlines()[-1]) self._ui.status(status) def merge(self, state):