sapling/tests/test-hgsubversion-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

90 lines
3.5 KiB
Python

import test_hgsubversion_util
from edenscm.hgext.hgsubversion import verify
from edenscm.mercurial import commands, node, util as hgutil
class TestPull(test_hgsubversion_util.TestBase):
def setUp(self):
super(TestPull, self).setUp()
def _loadupdate(self, fixture_name, *args, **kwargs):
kwargs = kwargs.copy()
kwargs.update(noupdate=False)
repo, repo_path = self.load_and_fetch(fixture_name, *args, **kwargs)
return repo, repo_path
def test_nochanges(self):
self._loadupdate("single_rev.svndump")
state = self.repo[None].parents()
commands.pull(self.repo.ui, self.repo)
self.assertEqual(state, self.repo[None].parents())
def test_onerevision_noupdate(self):
repo, repo_path = self._loadupdate("single_rev.svndump")
state = repo[None].parents()
self.add_svn_rev(repo_path, {"trunk/alpha": "Changed"})
commands.pull(self.repo.ui, repo)
self.assertEqual(state, repo[None].parents())
self.assertTrue("tip" not in repo["."].tags())
def test_onerevision_doupdate(self):
repo, repo_path = self._loadupdate("single_rev.svndump")
state = repo[None].parents()
self.add_svn_rev(repo_path, {"trunk/alpha": "Changed"})
commands.pull(self.repo.ui, repo, update=True)
self.failIfEqual(state, repo[None].parents())
self.assertTrue("tip" in repo["."].tags())
def test_onerevision_divergent(self):
repo, repo_path = self._loadupdate("single_rev.svndump")
self.commitchanges((("alpha", "alpha", "Changed another way"),))
state = repo[None].parents()
self.add_svn_rev(repo_path, {"trunk/alpha": "Changed one way"})
try:
commands.pull(self.repo.ui, repo, update=True)
except hgutil.Abort:
# hg < 1.9 raised when crossing branches
pass
self.assertEqual(state, repo[None].parents())
self.assertTrue("tip" not in repo["."].tags())
self.assertEqual(len(repo.heads()), 2)
def test_tag_repull_doesnt_happen(self):
repo = self._loadupdate("branchtagcollision.svndump")[0]
oldheads = map(node.hex, repo.heads())
commands.pull(repo.ui, repo)
self.assertEqual(oldheads, map(node.hex, repo.heads()))
def test_pull_with_secret_default(self):
repo = self._loadupdate(
"branchtagcollision.svndump", config={"phases.new-commit": "secret"}
)[0]
oldheads = map(node.hex, repo.heads())
commands.pull(repo.ui, repo)
self.assertEqual(oldheads, map(node.hex, repo.heads()))
def test_skip_basic(self):
repo, repo_path = self._loadupdate("single_rev.svndump")
self.add_svn_rev(repo_path, {"trunk/alpha": "Changed"})
self.add_svn_rev(repo_path, {"trunk/beta": "More changed"})
self.add_svn_rev(repo_path, {"trunk/gamma": "Even more changeder"})
repo.ui.setconfig("hgsubversion", "unsafeskip", "3 4")
commands.pull(repo.ui, repo)
tip = repo["tip"].rev()
self.assertEqual(tip, 1)
self.assertEquals(verify.verify(repo.ui, repo, rev=tip), 1)
def test_skip_delete_restore(self):
repo, repo_path = self._loadupdate("delete_restore_trunk.svndump", rev=2)
repo.ui.setconfig("hgsubversion", "unsafeskip", "3 4")
commands.pull(repo.ui, repo)
tip = repo["tip"].rev()
self.assertEqual(tip, 1)
self.assertEquals(verify.verify(repo.ui, repo, rev=tip), 0)
if __name__ == "__main__":
import silenttestrunner
silenttestrunner.main(__name__)