D1018: selectors2: do not use platform.system()
quark (Jun Wu)
phabricator at mercurial-scm.org
Thu Oct 12 00:57:40 UTC 2017
quark created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.
REVISION SUMMARY
`platform.system()` may have a side effect spawning a shell executing
`uname -p`, which may print a warning when the current directory is removed:
shell-init: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory
This patch changes selectors2 to test the `sys.platform` string, which is a
much safer way to detect Jython.
REPOSITORY
rHG Mercurial
REVISION DETAIL
https://phab.mercurial-scm.org/D1018
AFFECTED FILES
mercurial/pycompat.py
mercurial/selectors2.py
CHANGE DETAILS
diff --git a/mercurial/selectors2.py b/mercurial/selectors2.py
--- a/mercurial/selectors2.py
+++ b/mercurial/selectors2.py
@@ -29,12 +29,13 @@
import collections
import errno
import math
-import platform
import select
import socket
import sys
import time
+from mercurial import pycompat
+
namedtuple = collections.namedtuple
Mapping = collections.Mapping
@@ -64,7 +65,6 @@
SelectorKey = namedtuple('SelectorKey', ['fileobj', 'fd', 'events', 'data'])
-
class _SelectorMapping(Mapping):
""" Mapping of file objects to selector keys """
@@ -288,7 +288,7 @@
__all__.append('SelectSelector')
# Jython has a different implementation of .fileno() for socket objects.
- if platform.system() == 'Java':
+ if pycompat.isjython:
class _JythonSelectorMapping(object):
""" This is an implementation of _SelectorMapping that is built
for use specifically with Jython, which does not provide a hashable
@@ -727,7 +727,7 @@
by eventlet, greenlet, and preserve proper behavior. """
global _DEFAULT_SELECTOR
if _DEFAULT_SELECTOR is None:
- if platform.system() == 'Java': # Platform-specific: Jython
+ if pycompat.isjython:
_DEFAULT_SELECTOR = JythonSelectSelector
elif _can_allocate('kqueue'):
_DEFAULT_SELECTOR = KqueueSelector
diff --git a/mercurial/pycompat.py b/mercurial/pycompat.py
--- a/mercurial/pycompat.py
+++ b/mercurial/pycompat.py
@@ -17,6 +17,7 @@
ispy3 = (sys.version_info[0] >= 3)
ispypy = (r'__pypy__' in sys.builtin_module_names)
+isjython = sys.platform.startswith(r'java')
if not ispy3:
import cookielib
To: quark, #hg-reviewers
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list