Mercurial > hgsubversion
view tests/test_startrev.py @ 872:a279b5838aaf
test_util: remove self.repo_path, generate new paths each time
This solves a problem with startrev tests sporadically failing in ra.get_log()
with some kind of svn corruption error. Loading each svn repository in a
different place solved that, or at least prevented me from reproducing it. What
is interesting is this is the same fixture being loaded each time. Also, before
loading the fixture, we take care of removing an existing repository. Loading
with the same options twice also failed reproducing the issue. Same thing if
the first load only load the svn repository but does not convert it.
So, I have absolutely no idea what was wrong, blame python subprocess,
subversion or some kind of filesystem write ordering bug.
author | Patrick Mezard <patrick@mezard.eu> |
---|---|
date | Thu, 19 Apr 2012 18:29:32 +0200 |
parents | 312b37bc5e20 |
children | d4312a6f7a87 |
line wrap: on
line source
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', '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)