Mercurial > hgsubversion
comparison tests/comprehensive/test_updatemeta.py @ 1106:5cb6c95e0283 stable
Merge default and stable so I can do stable releases again.
| author | Augie Fackler <raf@durin42.com> |
|---|---|
| date | Tue, 11 Feb 2014 12:48:49 -0500 |
| parents | cd0d14e25757 |
| children | c6b01fd34694 |
comparison
equal
deleted
inserted
replaced
| 1020:b5b1fce26f1f | 1106:5cb6c95e0283 |
|---|---|
| 1 import os | |
| 2 import pickle | |
| 3 import sys | |
| 4 import unittest | |
| 5 | |
| 6 # wrapped in a try/except because of weirdness in how | |
| 7 # run.py works as compared to nose. | |
| 8 try: | |
| 9 import test_util | |
| 10 except ImportError: | |
| 11 sys.path.insert(0, os.path.dirname(os.path.dirname(__file__))) | |
| 12 import test_util | |
| 13 | |
| 14 import test_rebuildmeta | |
| 15 | |
| 16 from mercurial import context | |
| 17 from mercurial import extensions | |
| 18 from mercurial import hg | |
| 19 from mercurial import ui | |
| 20 | |
| 21 from hgsubversion import svncommands | |
| 22 from hgsubversion import svnmeta | |
| 23 | |
| 24 | |
| 25 | |
| 26 def _do_case(self, name, layout): | |
| 27 subdir = test_util.subdir.get(name, '') | |
| 28 single = layout == 'single' | |
| 29 u = ui.ui() | |
| 30 config = {} | |
| 31 if layout == 'custom': | |
| 32 config['hgsubversion.layout'] = 'custom' | |
| 33 u.setconfig('hgsubversion', 'layout', 'custom') | |
| 34 for branch, path in test_util.custom.get(name, {}).iteritems(): | |
| 35 config['hgsubversionbranch.%s' % branch] = path | |
| 36 u.setconfig('hgsubversionbranch', branch, path) | |
| 37 | |
| 38 repo, repo_path = self.load_and_fetch(name, | |
| 39 subdir=subdir, | |
| 40 layout=layout, | |
| 41 config=config) | |
| 42 assert test_util.repolen(self.repo) > 0 | |
| 43 wc2_path = self.wc_path + '_clone' | |
| 44 src, dest = test_util.hgclone(u, self.wc_path, wc2_path, update=False) | |
| 45 src = test_util.getlocalpeer(src) | |
| 46 dest = test_util.getlocalpeer(dest) | |
| 47 | |
| 48 # insert a wrapper that prevents calling changectx.children() | |
| 49 def failfn(orig, ctx): | |
| 50 self.fail('calling %s is forbidden; it can cause massive slowdowns ' | |
| 51 'when rebuilding large repositories' % orig) | |
| 52 | |
| 53 origchildren = getattr(context.changectx, 'children') | |
| 54 extensions.wrapfunction(context.changectx, 'children', failfn) | |
| 55 | |
| 56 # test updatemeta on an empty repo | |
| 57 try: | |
| 58 svncommands.updatemeta(u, dest, | |
| 59 args=[test_util.fileurl(repo_path + | |
| 60 subdir), ]) | |
| 61 finally: | |
| 62 # remove the wrapper | |
| 63 context.changectx.children = origchildren | |
| 64 | |
| 65 self._run_assertions(name, single, src, dest, u) | |
| 66 | |
| 67 | |
| 68 def _run_assertions(self, name, single, src, dest, u): | |
| 69 test_rebuildmeta._run_assertions(self, name, single, src, dest, u) | |
| 70 | |
| 71 | |
| 72 skip = set([ | |
| 73 'project_root_not_repo_root.svndump', | |
| 74 'corrupt.svndump', | |
| 75 ]) | |
| 76 | |
| 77 attrs = {'_do_case': _do_case, | |
| 78 '_run_assertions': _run_assertions, | |
| 79 'stupid_mode_tests': True, | |
| 80 } | |
| 81 for case in [f for f in os.listdir(test_util.FIXTURES) if f.endswith('.svndump')]: | |
| 82 # this fixture results in an empty repository, don't use it | |
| 83 if case in skip: | |
| 84 continue | |
| 85 bname = 'test_' + case[:-len('.svndump')] | |
| 86 attrs[bname] = test_rebuildmeta.buildmethod(case, bname, 'auto') | |
| 87 attrs[bname + '_single'] = test_rebuildmeta.buildmethod(case, | |
| 88 bname + '_single', | |
| 89 'single') | |
| 90 if case in test_util.custom: | |
| 91 attrs[bname + '_custom'] = test_rebuildmeta.buildmethod(case, | |
| 92 bname + '_custom', | |
| 93 'custom') | |
| 94 | |
| 95 | |
| 96 UpdateMetaTests = type('UpdateMetaTests', (test_util.TestBase,), attrs) |
