Mercurial > hgsubversion
view tests/test_updatemeta.py @ 962:8648ccfb8325
editor: process missing files with regular files
Missing files were stored directly in RevisionMeta and resolved after
the revision was replayed. It means the missing files set was no pruned
by delete_entry() actions or by the filemap, and some of them were
fetched for no reason.
Say you convert:
A branch/foo/bar (from trunk/foo/bar:123)
with a filemap excluding "foo/bar". Since the directory was excluded in
trunk the files cannot be found and were marked as missing even though
they were discarded afterwards.
author | Patrick Mezard <patrick@mezard.eu> |
---|---|
date | Sat, 20 Oct 2012 22:22:02 +0200 |
parents | 5bacb9c63e3e |
children |
line wrap: on
line source
import test_util import os import pickle import unittest import test_rebuildmeta from mercurial import context from mercurial import extensions from mercurial import hg from mercurial import ui from hgsubversion import svncommands from hgsubversion import svnmeta def _do_case(self, name, stupid, single): subdir = test_util.subdir.get(name, '') layout = 'auto' if single: layout = 'single' repo, repo_path = self.load_and_fetch(name, subdir=subdir, stupid=stupid, layout=layout) assert len(self.repo) > 0 wc2_path = self.wc_path + '_clone' u = ui.ui() src, dest = test_util.hgclone(u, self.wc_path, wc2_path, update=False) src = test_util.getlocalpeer(src) dest = test_util.getlocalpeer(dest) # insert a wrapper that prevents calling changectx.children() def failfn(orig, ctx): self.fail('calling %s is forbidden; it can cause massive slowdowns ' 'when rebuilding large repositories' % orig) origchildren = getattr(context.changectx, 'children') extensions.wrapfunction(context.changectx, 'children', failfn) # test updatemeta on an empty repo try: svncommands.updatemeta(u, dest, args=[test_util.fileurl(repo_path + subdir), ]) finally: # remove the wrapper context.changectx.children = origchildren self._run_assertions(name, stupid, single, src, dest, u) def _run_assertions(self, name, stupid, single, src, dest, u): test_rebuildmeta._run_assertions(self, name, stupid, single, src, dest, u) skip = set([ 'project_root_not_repo_root.svndump', 'corrupt.svndump', ]) attrs = {'_do_case': _do_case, '_run_assertions': _run_assertions, } for case in [f for f in os.listdir(test_util.FIXTURES) if f.endswith('.svndump')]: # this fixture results in an empty repository, don't use it if case in skip: continue bname = 'test_' + case[:-len('.svndump')] attrs[bname] = test_rebuildmeta.buildmethod(case, bname, False, False) name = bname + '_stupid' attrs[name] = test_rebuildmeta.buildmethod(case, name, True, False) name = bname + '_single' attrs[name] = test_rebuildmeta.buildmethod(case, name, False, True) UpdateMetaTests = type('UpdateMetaTests', (test_util.TestBase,), attrs) def suite(): all_tests = [unittest.TestLoader().loadTestsFromTestCase(UpdateMetaTests), ] return unittest.TestSuite(all_tests)