# HG changeset patch # User Dan Villiom Podlaski Christiansen # Date 1336813977 -7200 # Node ID d3ff5807f1bd12c0d233a9873aa5243e871a39b2 # Parent 99a15c6a283c951e7a99008b74a9098736a94379 fold test_startrev and test_verify into a new test; test_verify_and_startrev diff --git a/tests/comprehensive/test_verify.py b/tests/comprehensive/test_verify_and_startrev.py rename from tests/comprehensive/test_verify.py rename to tests/comprehensive/test_verify_and_startrev.py --- a/tests/comprehensive/test_verify.py +++ b/tests/comprehensive/test_verify_and_startrev.py @@ -16,14 +16,45 @@ from mercurial import ui from hgsubversion import svncommands +# these fixtures contain no files at HEAD and would result in empty clones +_skipshallow = set([ + 'binaryfiles.svndump', + 'binaryfiles-broken.svndump', + 'emptyrepo.svndump', +]) + def _do_case(self, name, stupid, layout): subdir = test_util.subdir.get(name, '') - repo = self._load_fixture_and_fetch(name, subdir=subdir, stupid=stupid, layout=layout) + repo, svnpath = self.load_and_fetch(name, subdir=subdir, stupid=stupid, + layout=layout) assert len(self.repo) > 0 for i in repo: ctx = repo[i] self.assertEqual(svncommands.verify(repo.ui, repo, rev=ctx.node()), 0) + # check a startrev clone + if layout == 'single' and name not in _skipshallow: + self.wc_path += '_shallow' + shallowrepo = self.fetch(svnpath, subdir=subdir, stupid=stupid, + layout='single', startrev='HEAD') + + self.assertEqual(len(shallowrepo), 1, + "shallow clone should have just one revision, not %d" + % len(shallowrepo)) + + fulltip = repo['tip'] + shallowtip = shallowrepo['tip'] + + self.assertEqual(0, svncommands.verify(repo.ui, shallowrepo, + rev=shallowtip.node())) + + # viewing diff's of lists of files is easier on the eyes + self.assertMultiLineEqual('\n'.join(fulltip), '\n'.join(shallowtip)) + + for f in fulltip: + self.assertMultiLineEqual(fulltip[f].data(), shallowtip[f].data()) + + def buildmethod(case, name, stupid, layout): m = lambda self: self._do_case(case, stupid, layout) m.__name__ = name diff --git a/tests/run.py b/tests/run.py --- a/tests/run.py +++ b/tests/run.py @@ -25,7 +25,6 @@ def tests(): import test_push_eol import test_rebuildmeta import test_single_dir_clone - import test_startrev import test_svnwrap import test_tags import test_template_keywords @@ -37,7 +36,7 @@ def tests(): sys.path.append(os.path.join(os.path.dirname(__file__), 'comprehensive')) import test_stupid_pull - import test_verify + import test_verify_and_startrev return locals() diff --git a/tests/test_startrev.py b/tests/test_startrev.py deleted file mode 100644 --- a/tests/test_startrev.py +++ /dev/null @@ -1,71 +0,0 @@ -import test_util - -import os -import unittest - -def _do_case(self, name, subdir, stupid): - wc_base = self.wc_path - self.wc_path = wc_base + '_full' - headclone = self._load_fixture_and_fetch(name, subdir=subdir, stupid=stupid, - layout='single', startrev='HEAD') - self.wc_path = wc_base + '_head' - fullclone = self._load_fixture_and_fetch(name, subdir=subdir, stupid=stupid, - layout='single') - - fulltip = fullclone['tip'] - headtip = headclone['tip'] - # viewing diff's of lists of files is easier on the eyes - self.assertMultiLineEqual('\n'.join(fulltip), '\n'.join(headtip)) - - for f in fulltip: - self.assertMultiLineEqual(fulltip[f].data(), headtip[f].data()) - - self.assertNotEqual(len(fullclone), 0, "full clone shouldn't be empty") - self.assertEqual(len(headclone), 1, - "shallow clone should have just one revision, not %d" - % len(headclone)) - -def buildmethod(case, name, subdir, stupid): - m = lambda self: self._do_case(case, subdir.strip('/'), stupid) - m.__name__ = name - m.__doc__ = ('Test clone with startrev on %s%s with %s replay.' % - (case, subdir, (stupid and 'stupid') or 'real')) - return m - - -# these fixtures contain no files at HEAD and would result in empty clones -nofiles = set([ - 'binaryfiles.svndump', - 'binaryfiles-broken.svndump', - 'emptyrepo.svndump', -]) - -# these fixtures contain no files in trunk at HEAD and would result in an empty -# shallow clone if cloning trunk, so we use another subdirectory -subdirmap = { - 'commit-to-tag.svndump': '/branches/magic', - 'pushexternals.svndump': '', - 'tag_name_same_as_branch.svndump': '/branches/magic', -} - -attrs = {'_do_case': _do_case, - } - -for case in [f for f in os.listdir(test_util.FIXTURES) if f.endswith('.svndump')]: - if case in nofiles: - continue - - subdir = test_util.subdir.get(case, '') + subdirmap.get(case, '/trunk') - - bname = 'test_' + case[:-len('.svndump')] - attrs[bname] = buildmethod(case, bname, subdir, False) - name = bname + '_stupid' - attrs[name] = buildmethod(case, name, subdir, True) - -StartRevTests = type('StartRevTests', (test_util.TestBase,), attrs) - - -def suite(): - all_tests = [unittest.TestLoader().loadTestsFromTestCase(StartRevTests), - ] - return unittest.TestSuite(all_tests) diff --git a/tests/test_util.py b/tests/test_util.py --- a/tests/test_util.py +++ b/tests/test_util.py @@ -297,15 +297,13 @@ class TestBase(unittest.TestCase): proc.communicate() return path - def load_and_fetch(self, fixture_name, subdir=None, stupid=False, - layout='auto', startrev=0, externals=None, - noupdate=True): + def fetch(self, repo_path, subdir=None, stupid=False, layout='auto', startrev=0, + externals=None, noupdate=True, dest=None): if layout == 'single': if subdir is None: subdir = 'trunk' elif subdir is None: subdir = '' - repo_path = self.load_svndump(fixture_name) projectpath = repo_path if subdir: projectpath += '/' + subdir @@ -326,7 +324,12 @@ class TestBase(unittest.TestCase): dispatch(cmd) - return hg.repository(testui(), self.wc_path), repo_path + return hg.repository(testui(), self.wc_path) + + def load_and_fetch(self, fixture_name, *args, **opts): + repo_path = self.load_svndump(fixture_name) + + return self.fetch(repo_path, *args, **opts), repo_path def _load_fixture_and_fetch(self, *args, **kwargs): repo, repo_path = self.load_and_fetch(*args, **kwargs)