Mercurial > hgsubversion
view tests/test_startrev.py @ 817:3b613d32ef11
svnexternals: fix subrepo peg revision handling (7ef125fa9b35)
hg >= 1.9 appends the revision to check out as a peg revision to source URL
before calling svn. This breaks the case where the external definition already
contains a peg revision. Instead, we assume that "-rR1 svnurl@R2" is equivalent
to "svnurl@R1" which should be almost always true in practice.
The import test has been reversed to avoid issues with stray .pyc: if you
install an hg 1.8 over an hg 1.9, scmutil.pyc may remain and be imported, while
util.py exists in both cases.
author | Patrick Mezard <pmezard@gmail.com> |
---|---|
date | Wed, 06 Jul 2011 10:22:32 +0200 |
parents | d101b39f6c51 |
children | e9af7eba88db |
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 = [unittest.TestLoader().loadTestsFromTestCase(StartRevTests), ] return unittest.TestSuite(all)