Mercurial > hgsubversion
view tests/test_pull_fallback.py @ 1081:c8d0f5983571
tests: cd to tempdir during setUp
Since we were running hg clone from the hgsubversion repo, we would
often pick up config settings from hgsubversion/.hg/hgrc, including
loading extensions. This caused tests to fail for me when they
asserted that obsolete is disabled because I have evolve enabled in my
hgsubversion checkout. This was probably decreasing the overall
stability of the test suite as well, since it meant that clones were
running with pretty much arbitrary configs settings.
Interestingly, the setUp was already keeping a record of the cwd
before creating the tempdir, and tearDown was already cd-ing back to
that directory.
author | David Schleimer <dschleimer@fb.com> |
---|---|
date | Wed, 14 Aug 2013 17:33:40 -0700 |
parents | f6c9394032cb |
children | 4f1461428334 |
line wrap: on
line source
import test_util import re import mercurial from mercurial import commands from hgsubversion import stupid from hgsubversion import svnwrap from hgsubversion import wrappers class TestPullFallback(test_util.TestBase): def setUp(self): super(TestPullFallback, self).setUp() def _loadupdate(self, fixture_name, *args, **kwargs): kwargs = kwargs.copy() kwargs.update(noupdate=False) repo, repo_path = self.load_and_fetch(fixture_name, *args, **kwargs) return repo, repo_path def test_stupid_fallback_to_stupid_fullrevs(self): return to_patch = { 'mercurial.patch.patchbackend': _patchbackend_raise, 'stupid.diff_branchrev': stupid.diff_branchrev, 'stupid.fetch_branchrev': stupid.fetch_branchrev, } expected_calls = { 'mercurial.patch.patchbackend': 1, 'stupid.diff_branchrev': 1, 'stupid.fetch_branchrev': 1, } self.stupid = True repo, repo_path = self._loadupdate('single_rev.svndump') self.stupid = False # Passing stupid=True doesn't seem to be working - force it repo.ui.setconfig('hgsubversion', 'stupid', "true") state = repo.parents() calls, replaced = _monkey_patch(to_patch) try: self.add_svn_rev(repo_path, {'trunk/alpha': 'Changed'}) commands.pull(self.repo.ui, repo, update=True) self.failIfEqual(state, repo.parents()) self.assertTrue('tip' in repo[None].tags()) self.assertEqual(expected_calls, calls) finally: _monkey_unpatch(replaced) def _monkey_patch(to_patch, start=None): if start is None: import sys start = sys.modules[__name__] calls = {} replaced = {} for path, replacement in to_patch.iteritems(): obj = start owner, attr = path.rsplit('.', 1) for a in owner.split('.', -1): obj = getattr(obj, a) replaced[path] = getattr(obj, attr) calls[path] = 0 def outer(path=path, calls=calls, replacement=replacement): def wrapper(*p, **kw): calls[path] += 1 return replacement(*p, **kw) return wrapper setattr(obj, attr, outer()) return calls, replaced def _monkey_unpatch(to_patch, start=None): if start is None: import sys start = sys.modules[__name__] replaced = {} for path, replacement in to_patch.iteritems(): obj = start owner, attr = path.rsplit('.', 1) for a in owner.split('.', -1): obj = getattr(obj, a) replaced[path] = getattr(obj, attr) setattr(obj, attr, replacement) return replaced def _patchbackend_raise(*p, **kw): raise mercurial.patch.PatchError("patch failed")