mirror of
https://github.com/facebook/sapling.git
synced 2024-10-11 17:27:53 +03:00
9dc21f8d0b
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
109 lines
3.9 KiB
Python
109 lines
3.9 KiB
Python
import os
|
|
|
|
import test_hgsubversion_util
|
|
from edenscm.hgext.hgsubversion import svnwrap
|
|
|
|
|
|
class PushAutoPropsTests(test_hgsubversion_util.TestBase):
|
|
obsolete_mode_tests = True
|
|
|
|
def setUp(self):
|
|
test_hgsubversion_util.TestBase.setUp(self)
|
|
repo, self.repo_path = self.load_and_fetch("emptyrepo.svndump")
|
|
|
|
def test_push_honors_svn_autoprops(self):
|
|
self.setup_svn_config(
|
|
"[miscellany]\n"
|
|
"enable-auto-props = yes\n"
|
|
"[auto-props]\n"
|
|
"*.py = test:prop=success\n"
|
|
)
|
|
changes = [("test.py", "test.py", "echo hallo")]
|
|
self.commitchanges(changes)
|
|
self.pushrevisions()
|
|
prop_val = test_hgsubversion_util.svnpropget(
|
|
self.repo_path, "trunk/test.py", "test:prop"
|
|
)
|
|
self.assertEqual("success", prop_val)
|
|
|
|
|
|
class AutoPropsConfigTest(test_hgsubversion_util.TestBase):
|
|
def test_use_autoprops_for_matching_file_when_enabled(self):
|
|
self.setup_svn_config(
|
|
"[miscellany]\n"
|
|
"enable-auto-props = yes\n"
|
|
"[auto-props]\n"
|
|
"*.py = test:prop=success\n"
|
|
)
|
|
props = self.new_autoprops_config().properties("xxx/test.py")
|
|
self.assertEqual({"test:prop": "success"}, props)
|
|
|
|
def new_autoprops_config(self):
|
|
return svnwrap.AutoPropsConfig(self.config_dir)
|
|
|
|
def test_ignore_nonexisting_config(self):
|
|
config_file = os.path.join(self.config_dir, "config")
|
|
os.remove(config_file)
|
|
self.assertTrue(not os.path.exists(config_file))
|
|
props = self.new_autoprops_config().properties("xxx/test.py")
|
|
self.assertEqual({}, props)
|
|
|
|
def test_ignore_autoprops_when_file_doesnt_match(self):
|
|
self.setup_svn_config(
|
|
"[miscellany]\n"
|
|
"enable-auto-props = yes\n"
|
|
"[auto-props]\n"
|
|
"*.py = test:prop=success\n"
|
|
)
|
|
props = self.new_autoprops_config().properties("xxx/test.sh")
|
|
self.assertEqual({}, props)
|
|
|
|
def test_ignore_autoprops_when_disabled(self):
|
|
self.setup_svn_config(
|
|
"[miscellany]\n"
|
|
"#enable-auto-props = yes\n"
|
|
"[auto-props]\n"
|
|
"*.py = test:prop=success\n"
|
|
)
|
|
props = self.new_autoprops_config().properties("xxx/test.py")
|
|
self.assertEqual({}, props)
|
|
|
|
def test_combine_properties_of_multiple_matches(self):
|
|
self.setup_svn_config(
|
|
"[miscellany]\n"
|
|
"enable-auto-props = yes\n"
|
|
"[auto-props]\n"
|
|
"*.py = test:prop=success\n"
|
|
"test.* = test:prop2=success\n"
|
|
)
|
|
props = self.new_autoprops_config().properties("xxx/test.py")
|
|
self.assertEqual({"test:prop": "success", "test:prop2": "success"}, props)
|
|
|
|
|
|
class ParseAutoPropsTests(test_hgsubversion_util.TestBase):
|
|
def test_property_value_is_optional(self):
|
|
props = svnwrap.parse_autoprops("svn:executable")
|
|
self.assertEqual({"svn:executable": ""}, props)
|
|
props = svnwrap.parse_autoprops("svn:executable=")
|
|
self.assertEqual({"svn:executable": ""}, props)
|
|
|
|
def test_property_value_may_be_quoted(self):
|
|
props = svnwrap.parse_autoprops('svn:eol-style=" native "')
|
|
self.assertEqual({"svn:eol-style": " native "}, props)
|
|
props = svnwrap.parse_autoprops("svn:eol-style=' native '")
|
|
self.assertEqual({"svn:eol-style": " native "}, props)
|
|
|
|
def test_surrounding_whitespaces_are_ignored(self):
|
|
props = svnwrap.parse_autoprops(" svn:eol-style = native ")
|
|
self.assertEqual({"svn:eol-style": "native"}, props)
|
|
|
|
def test_multiple_properties_are_separated_by_semicolon(self):
|
|
props = svnwrap.parse_autoprops("svn:eol-style=native;svn:executable=true\n")
|
|
self.assertEqual({"svn:eol-style": "native", "svn:executable": "true"}, props)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
import silenttestrunner
|
|
|
|
silenttestrunner.main(__name__)
|