sapling/tests/comprehensive/test-hgsubversion-stupid-pull.py
Jun Wu 9dc21f8d0b codemod: import from the edenscm package
Summary:
D13853115 adds `edenscm/` to `sys.path` and code still uses `import mercurial`.
That has nasty problems if both `import mercurial` and
`import edenscm.mercurial` are used, because Python would think `mercurial.foo`
and `edenscm.mercurial.foo` are different modules so code like
`try: ... except mercurial.error.Foo: ...`, or `isinstance(x, mercurial.foo.Bar)`
would fail to handle the `edenscm.mercurial` version. There are also some
module-level states (ex. `extensions._extensions`) that would cause trouble if
they have multiple versions in a single process.

Change imports to use the `edenscm` so ideally the `mercurial` is no longer
imported at all. Add checks in extensions.py to catch unexpected extensions
importing modules from the old (wrong) locations when running tests.

Reviewed By: phillco

Differential Revision: D13868981

fbshipit-source-id: f4e2513766957fd81d85407994f7521a08e4de48
2019-01-29 17:25:32 -08:00

67 lines
2.4 KiB
Python

# no-check-code -- see T24862348
import os
import sys
import test_hgsubversion_util
from edenscm.hgext.hgsubversion import svnwrap
from edenscm.mercurial import hg
def _do_case(self, name, layout):
subdir = test_hgsubversion_util.subdir.get(name, "")
config = {}
u = test_hgsubversion_util.testui()
for branch, path in test_hgsubversion_util.custom.get(name, {}).iteritems():
config["hgsubversionbranch.%s" % branch] = path
u.setconfig("hgsubversionbranch", branch, path)
repo, repo_path = self.load_and_fetch(
name, subdir=subdir, layout=layout, config=config
)
assert (
test_hgsubversion_util.repolen(self.repo) > 0
), "Repo had no changes, maybe you need to add a subdir entry in test_hgsubversion_util?"
wc2_path = self.wc_path + "_stupid"
checkout_path = repo_path
if subdir:
checkout_path += "/" + subdir
u.setconfig("hgsubversion", "stupid", "1")
u.setconfig("hgsubversion", "layout", layout)
cp = test_hgsubversion_util.fileurl(checkout_path)
test_hgsubversion_util.hgclone(u, cp, wc2_path, update=False)
if layout == "single":
self.assertEqual(len(self.repo.heads()), 1)
self.repo2 = hg.repository(test_hgsubversion_util.testui(), wc2_path)
self.assertEqual(self.repo.heads(), self.repo2.heads())
def buildmethod(case, name, layout):
m = lambda self: self._do_case(case, layout)
m.__name__ = name
m.__doc__ = "Test stupid produces same as real on %s. (%s)" % (case, layout)
return m
if svnwrap.subversion_version < (1, 9, 0):
attrs = {"_do_case": _do_case}
for case in (
f for f in os.listdir(test_hgsubversion_util.FIXTURES) if f.endswith(".svndump")
):
if case == "corrupt.svndump":
continue
name = "test_" + case[: -len(".svndump")].replace("-", "_")
# Automatic layout branchtag collision exposes a minor defect
# here, but since it isn't a regression we suppress the test case.
if case != "branchtagcollision.svndump":
attrs[name] = buildmethod(case, name, "auto")
attrs[name + "_single"] = buildmethod(case, name + "_single", "single")
if case in test_hgsubversion_util.custom:
attrs[name + "_custom"] = buildmethod(case, name + "_custom", "custom")
StupidPullTests = type("StupidPullTests", (test_hgsubversion_util.TestBase,), attrs)
if __name__ == "__main__":
import silenttestrunner
silenttestrunner.main(__name__)