diff --git a/contrib/check-py3-compat.py b/contrib/check-py3-compat.py
--- a/contrib/check-py3-compat.py
+++ b/contrib/check-py3-compat.py
@@ -17,7 +17,6 @@ import traceback
# Modules that have both Python and C implementations.
_dualmodules = (
- 'parsers.py',
)
def check_compat_py2(f):
diff --git a/contrib/import-checker.py b/contrib/import-checker.py
--- a/contrib/import-checker.py
+++ b/contrib/import-checker.py
@@ -26,7 +26,6 @@ allowsymbolimports = (
# Modules that have both Python and C implementations.
_dualmodules = (
- 'parsers.py',
)
# Modules that must be aliased because they are commonly confused with
diff --git a/contrib/wix/dist.wxs b/contrib/wix/dist.wxs
--- a/contrib/wix/dist.wxs
+++ b/contrib/wix/dist.wxs
@@ -17,7 +17,7 @@
-
+
diff --git a/mercurial/__init__.py b/mercurial/__init__.py
--- a/mercurial/__init__.py
+++ b/mercurial/__init__.py
@@ -23,7 +23,6 @@ modulepolicy = policy.policy
# Modules that have both Python and C implementations. See also the
# set of .py files under mercurial/pure/.
_dualmodules = {
- 'mercurial.parsers',
}
class hgimporter(object):
diff --git a/mercurial/dirs.c b/mercurial/cext/dirs.c
rename from mercurial/dirs.c
rename to mercurial/cext/dirs.c
diff --git a/mercurial/manifest.c b/mercurial/cext/manifest.c
rename from mercurial/manifest.c
rename to mercurial/cext/manifest.c
diff --git a/mercurial/parsers.c b/mercurial/cext/parsers.c
rename from mercurial/parsers.c
rename to mercurial/cext/parsers.c
diff --git a/mercurial/pathencode.c b/mercurial/cext/pathencode.c
rename from mercurial/pathencode.c
rename to mercurial/cext/pathencode.c
diff --git a/mercurial/dirstate.py b/mercurial/dirstate.py
--- a/mercurial/dirstate.py
+++ b/mercurial/dirstate.py
@@ -19,14 +19,16 @@ from . import (
encoding,
error,
match as matchmod,
- parsers,
pathutil,
+ policy,
pycompat,
scmutil,
txnutil,
util,
)
+parsers = policy.importmod(r'parsers')
+
propertycache = util.propertycache
filecache = scmutil.filecache
_rangemask = 0x7fffffff
diff --git a/mercurial/encoding.py b/mercurial/encoding.py
--- a/mercurial/encoding.py
+++ b/mercurial/encoding.py
@@ -14,6 +14,7 @@ import unicodedata
from . import (
error,
+ policy,
pycompat,
)
@@ -318,7 +319,7 @@ def _asciilower(s):
def asciilower(s):
# delay importing avoids cyclic dependency around "parsers" in
# pure Python build (util => i18n => encoding => parsers => util)
- from . import parsers
+ parsers = policy.importmod(r'parsers')
impl = getattr(parsers, 'asciilower', _asciilower)
global asciilower
asciilower = impl
@@ -334,7 +335,7 @@ def _asciiupper(s):
def asciiupper(s):
# delay importing avoids cyclic dependency around "parsers" in
# pure Python build (util => i18n => encoding => parsers => util)
- from . import parsers
+ parsers = policy.importmod(r'parsers')
impl = getattr(parsers, 'asciiupper', _asciiupper)
global asciiupper
asciiupper = impl
diff --git a/mercurial/manifest.py b/mercurial/manifest.py
--- a/mercurial/manifest.py
+++ b/mercurial/manifest.py
@@ -19,11 +19,12 @@ from .node import (
from . import (
error,
mdiff,
- parsers,
+ policy,
revlog,
util,
)
+parsers = policy.importmod(r'parsers')
propertycache = util.propertycache
def _parsev1(data):
diff --git a/mercurial/obsolete.py b/mercurial/obsolete.py
--- a/mercurial/obsolete.py
+++ b/mercurial/obsolete.py
@@ -76,11 +76,13 @@ from .i18n import _
from . import (
error,
node,
- parsers,
phases,
+ policy,
util,
)
+parsers = policy.importmod(r'parsers')
+
_pack = struct.pack
_unpack = struct.unpack
_calcsize = struct.calcsize
diff --git a/mercurial/pure/parsers.py b/mercurial/pure/parsers.py
--- a/mercurial/pure/parsers.py
+++ b/mercurial/pure/parsers.py
@@ -10,8 +10,8 @@ from __future__ import absolute_import
import struct
import zlib
-from .node import nullid
-from . import pycompat
+from ..node import nullid
+from .. import pycompat
stringio = pycompat.stringio
diff --git a/mercurial/revlog.py b/mercurial/revlog.py
--- a/mercurial/revlog.py
+++ b/mercurial/revlog.py
@@ -32,12 +32,14 @@ from . import (
ancestor,
error,
mdiff,
- parsers,
+ policy,
pycompat,
templatefilters,
util,
)
+parsers = policy.importmod(r'parsers')
+
_pack = struct.pack
_unpack = struct.unpack
# Aliased for performance.
diff --git a/mercurial/store.py b/mercurial/store.py
--- a/mercurial/store.py
+++ b/mercurial/store.py
@@ -15,12 +15,14 @@ import stat
from .i18n import _
from . import (
error,
- parsers,
+ policy,
pycompat,
util,
vfs as vfsmod,
)
+parsers = policy.importmod(r'parsers')
+
# This avoids a collision between a file named foo and a dir named
# foo.i or foo.d
def _encodedir(path):
diff --git a/mercurial/util.py b/mercurial/util.py
--- a/mercurial/util.py
+++ b/mercurial/util.py
@@ -45,13 +45,13 @@ from . import (
encoding,
error,
i18n,
- parsers,
policy,
pycompat,
)
base85 = policy.importmod(r'base85')
osutil = policy.importmod(r'osutil')
+parsers = policy.importmod(r'parsers')
b85decode = base85.b85decode
b85encode = base85.b85encode
diff --git a/setup.py b/setup.py
--- a/setup.py
+++ b/setup.py
@@ -635,10 +635,10 @@ extmodules = [
'mercurial/cext/mpatch.c'],
include_dirs=common_include_dirs,
depends=common_depends),
- Extension('mercurial.parsers', ['mercurial/dirs.c',
- 'mercurial/manifest.c',
- 'mercurial/parsers.c',
- 'mercurial/pathencode.c'],
+ Extension('mercurial.cext.parsers', ['mercurial/cext/dirs.c',
+ 'mercurial/cext/manifest.c',
+ 'mercurial/cext/parsers.c',
+ 'mercurial/cext/pathencode.c'],
include_dirs=common_include_dirs,
depends=common_depends),
Extension('mercurial.cext.osutil', ['mercurial/cext/osutil.c'],
diff --git a/tests/fakedirstatewritetime.py b/tests/fakedirstatewritetime.py
--- a/tests/fakedirstatewritetime.py
+++ b/tests/fakedirstatewritetime.py
@@ -11,10 +11,12 @@ from mercurial import (
context,
dirstate,
extensions,
- parsers,
+ policy,
util,
)
+parsers = policy.importmod(r'parsers')
+
def pack_dirstate(fakenow, orig, dmap, copymap, pl, now):
# execute what original parsers.pack_dirstate should do actually
# for consistency
diff --git a/tests/test-parseindex2.py b/tests/test-parseindex2.py
--- a/tests/test-parseindex2.py
+++ b/tests/test-parseindex2.py
@@ -14,9 +14,11 @@ from mercurial.node import (
nullrev,
)
from mercurial import (
- parsers,
+ policy,
)
+parsers = policy.importmod(r'parsers')
+
# original python implementation
def gettype(q):
return int(q & 0xFFFF)
@@ -114,7 +116,7 @@ def importparsers(hexversion):
# of the currently-running Python interpreter, so we monkey-patch
# sys.hexversion to simulate using different versions.
code = ("import sys; sys.hexversion=%s; "
- "import mercurial.parsers" % hexversion)
+ "import mercurial.cext.parsers" % hexversion)
cmd = "python -c \"%s\"" % code
# We need to do these tests inside a subprocess because parser.c's
# version-checking code happens inside the module init function, and