selectors2: do not use platform.system()
`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.
Jython's `sys.platform` looks like this:
Jython 2.7.1 (default:
0df7adb1b397, Jun 30 2017, 19:02:43)
[OpenJDK 64-Bit Server VM (Oracle Corporation)] on java1.8.0_144
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.platform
'java1.8.0_144 ( ==linux2 for targets )'
Differential Revision: https://phab.mercurial-scm.org/D1018
--- a/mercurial/pycompat.py Mon Oct 09 12:42:28 2017 -0700
+++ b/mercurial/pycompat.py Wed Oct 11 17:27:21 2017 -0700
@@ -314,3 +314,5 @@
stringio = cStringIO.StringIO
maplist = map
rawinput = raw_input
+
+isjython = sysplatform.startswith('java')
--- a/mercurial/selectors2.py Mon Oct 09 12:42:28 2017 -0700
+++ b/mercurial/selectors2.py Wed Oct 11 17:27:21 2017 -0700
@@ -29,12 +29,13 @@
import collections
import errno
import math
-import platform
import select
import socket
import sys
import time
+from . import pycompat
+
namedtuple = collections.namedtuple
Mapping = collections.Mapping
@@ -288,7 +289,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 +728,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