From jython-checkins at python.org Tue May 3 14:04:14 2016 From: jython-checkins at python.org (stefan.richthofer) Date: Tue, 03 May 2016 18:04:14 +0000 Subject: [Jython-checkins] =?utf-8?q?jython=3A_Added_crossplatform_uname-i?= =?utf-8?q?mplementation_to_posix_module=2E?= Message-ID: <20160503180359.12704.73655.B565C188@psf.io> https://hg.python.org/jython/rev/d0a1ff68cf34 changeset: 7919:d0a1ff68cf34 user: stefan.richthofer date: Tue May 03 20:00:39 2016 +0200 summary: Added crossplatform uname-implementation to posix module. files: NEWS | 7 + src/org/python/modules/posix/PosixModule.java | 169 ++++++++++ 2 files changed, 176 insertions(+), 0 deletions(-) diff --git a/NEWS b/NEWS --- a/NEWS +++ b/NEWS @@ -4,6 +4,13 @@ Jython 2.7.1rc Bugs fixed + New Features + - added uname function to posix module. The mostly Java-based implementation even + works to some extend on non-posix systems. Additional tweaks extend this to full + featured uname-functionality on Windows systems (usable via os.uname()). + +Jython 2.7.1b3 + Bugs fixed - [ 2417 ] os.utime fails on UNC network paths - [ 2416 ] os.system does not use changes to os.environ in subprocesses New Features diff --git a/src/org/python/modules/posix/PosixModule.java b/src/org/python/modules/posix/PosixModule.java --- a/src/org/python/modules/posix/PosixModule.java +++ b/src/org/python/modules/posix/PosixModule.java @@ -972,6 +972,175 @@ return posix.umask(mask); } + public static PyString __doc__uname = new PyString( + "uname() -> (sysname, nodename, release, version, machine)\n\n" + + "Return a tuple identifying the current operating system."); + + /* Obtaining uname values via exec is expensive, so we cache here. + * Cache is placed here near uname, because it is needed exclusively by uname. + */ + private static PyTuple uname_cache = null; + + /** + * Resembles CPython's uname with the addition that we also attempt a + * Windows-equivalent variant on win-systems. Implementation overview:
+ *
+ * Original/CPython (POSIX only):
+ * (uname -s, uname -n, uname -r, uname -v, uname -m)
+ *
+ * This version (non-Windows):
+ * (property os.name, InetAddress.getLocalHost().getHostName(), property os.version, uname -v, uname -m)
+ *
+ * Fallbacks:
+ * nodename/uname -n: exec uname -n
+ * version/uname -v: ""
+ * machine/uname -m: property os.arch
+ *
+ * This version (Windows):
+ * (property os.name, InetAddress.getLocalHost().getHostName(), property os.version, cmd.exe /C ver, env PROCESSOR_ARCHITECTURE)
+ *
+ * Fallback for nodename/uname -n on Windows:
+ * - env USERDOMAIN
+ * - exec hostname
+ *
+ * For machine-entry on Windows this is a simplified description. + * It is actually mapped to typical uname -m values as follows (pseudo-code):
+ *
+ * PROCESSOR_ARCHITECTURE = x86 and PROCESSOR_ARCHITEW6432 undefined: "i686"
+ * PROCESSOR_ARCHITECTURE = AMD64 or PROCESSOR_ARCHITECTURE = EM64T: "x86_64"
+ * PROCESSOR_ARCHITECTURE = IA64: "ia64"
+ * else: PROCESSOR_ARCHITECTURE.toLowerCase()
+ *
+ * Potential flaws:
+ * - could be a 32-bit machine, but actually not i686
+ * - user might need to discriminate AMD64 from EM64T
+ *
+ * In the rare case that your application is sensitive to one of these flaws you shouldn't be + * using our uname-hack for Windows, but directly look at PROCESSOR_ARCHITECTURE and friends. + * + * @return PyTuple containing sysname, nodename, release, version, machine + */ + public static PyTuple uname() { + if (uname_cache != null) { + return uname_cache; + } + + String sysname = System.getProperty("os.name"); + String sysrelease = System.getProperty("os.version"); + boolean win = sysname.startsWith("Windows"); + + String uname_nodename; + try { + uname_nodename = java.net.InetAddress.getLocalHost().getHostName(); + } catch (Exception e) { + // Do nothing to leverage fallback + uname_nodename = null; + } + if (uname_nodename == null && win) { + uname_nodename = System.getenv("USERDOMAIN"); + } + if (uname_nodename == null) { + try { + Process p = Runtime.getRuntime().exec( + win ? "hostname" : "uname -n"); + java.io.BufferedReader br = new java.io.BufferedReader( + new java.io.InputStreamReader(p.getInputStream())); + uname_nodename = br.readLine(); + // to end the process sanely in case we deal with some + // implementation that emits additional new-lines: + while (br.readLine() != null); + br.close(); + if (p.waitFor() != 0) { + uname_nodename = ""; + } + } catch (Exception e) { + uname_nodename = ""; + } + } + + String uname_sysver; + try { + Process p = Runtime.getRuntime().exec( + win ? "cmd.exe /C ver" : "uname -v"); + java.io.BufferedReader br = new java.io.BufferedReader( + new java.io.InputStreamReader(p.getInputStream())); + uname_sysver = br.readLine(); + while (uname_sysver != null && uname_sysver.length() == 0) { + uname_sysver = br.readLine(); + } + // to end the process sanely in case we deal with some + // implementation that emits additional new-lines: + while (br.readLine() != null); + br.close(); + if (p.waitFor() != 0) { + // No fallback for sysver available + uname_sysver = ""; + } + } catch (Exception e) { + uname_sysver = ""; + } + + String uname_machine; + try { + if (win) { + String machine = System.getenv("PROCESSOR_ARCHITECTURE"); + if (machine.equals("x86")) { + // maybe 32-bit process running on 64 bit machine + machine = System.getenv("PROCESSOR_ARCHITEW6432"); + } + if (machine == null) { + // if machine == null it's actually a 32-bit machine + uname_machine = "i686"; + } else if (machine.equals("AMD64") || machine.equals("EM64T")) { + uname_machine = "x86_64"; + } else if (machine.equals("IA64")) { + uname_machine = "ia64"; + } else { + uname_machine = machine.toLowerCase(); + } + } else { + Process p = Runtime.getRuntime().exec("uname -m"); + java.io.BufferedReader br = new java.io.BufferedReader( + new java.io.InputStreamReader(p.getInputStream())); + uname_machine = br.readLine(); + // to end the process sanely in case we deal with some + // implementation that emits additional new-lines: + while (br.readLine() != null); + br.close(); + if (p.waitFor() != 0) { + // To leverage os.arch-fallback: + uname_machine = null; + } + } + } catch (Exception e) { + // To leverage os.arch-fallback: + uname_machine = null; + } + if (uname_machine == null) { + String machine = System.getProperty("os.arch"); + if (machine == null) { + uname_machine = ""; + } else if (machine.equals("amd64")) { + // Normalize the common amd64-case to x86_64: + uname_machine = "x86_64"; + } else if (machine.equals("x86")) { + uname_machine = "i686"; + } else { + uname_machine = machine; + } + } + + PyObject[] vals = { + Py.newString(sysname), + Py.newString(uname_nodename), + Py.newString(sysrelease), + Py.newString(uname_sysver), + Py.newString(uname_machine) + }; + uname_cache = new PyTuple(vals, false); + return uname_cache; + } + public static PyString __doc__unlink = new PyString("unlink(path)\n\n" + "Remove a file (same as remove(path))."); -- Repository URL: https://hg.python.org/jython From jython-checkins at python.org Tue May 3 14:29:24 2016 From: jython-checkins at python.org (stefan.richthofer) Date: Tue, 03 May 2016 18:29:24 +0000 Subject: [Jython-checkins] =?utf-8?q?jython=3A_Added_stuff_to_NEWS=2E?= Message-ID: <20160503182918.16269.35468.C90E9356@psf.io> https://hg.python.org/jython/rev/a6aaa2042408 changeset: 7920:a6aaa2042408 user: stefan.richthofer date: Tue May 03 20:29:12 2016 +0200 summary: Added stuff to NEWS. files: NEWS | 7 ++++++- 1 files changed, 6 insertions(+), 1 deletions(-) diff --git a/NEWS b/NEWS --- a/NEWS +++ b/NEWS @@ -4,10 +4,11 @@ Jython 2.7.1rc Bugs fixed + - [ 2457 ] Synchronization bug in PySystemStateCloser causes complete deadlock New Features - added uname function to posix module. The mostly Java-based implementation even works to some extend on non-posix systems. Additional tweaks extend this to full - featured uname-functionality on Windows systems (usable via os.uname()). + featured uname-functionality on Windows systems. Jython 2.7.1b3 Bugs fixed @@ -16,6 +17,10 @@ New Features - Use latest upstream bundled wheels for ensurepip: pip (7.1.2), setuptools (18.4), replacing wheels patched specifically for Jython + - Unified PyDictionary and PyStringMap under a common abstract base class. + - Added Py.newJ method family for easier access to Python code from Java. Now you + can coerce Python types under Java interfaces without needing to inherit from + the Java-interface in Python code. Also see PyModule.newJ. Jython 2.7.1b2 Bugs fixed -- Repository URL: https://hg.python.org/jython From jython-checkins at python.org Tue May 3 15:09:23 2016 From: jython-checkins at python.org (stefan.richthofer) Date: Tue, 03 May 2016 19:09:23 +0000 Subject: [Jython-checkins] =?utf-8?q?jython=3A_Secured_sysconfig=2Epy_agai?= =?utf-8?q?nst_a_hack_JyNI_uses_regarding_platform_detection=2E?= Message-ID: <20160503190918.21855.67887.8539C364@psf.io> https://hg.python.org/jython/rev/5fd99c8d8d4d changeset: 7921:5fd99c8d8d4d user: stefan.richthofer date: Tue May 03 21:09:05 2016 +0200 summary: Secured sysconfig.py against a hack JyNI uses regarding platform detection. files: Lib/sysconfig.py | 63 +++++++++++++++++++++-------------- NEWS | 4 +- 2 files changed, 40 insertions(+), 27 deletions(-) diff --git a/Lib/sysconfig.py b/Lib/sysconfig.py --- a/Lib/sysconfig.py +++ b/Lib/sysconfig.py @@ -127,14 +127,15 @@ # unable to retrieve the real program name _PROJECT_BASE = _safe_realpath(os.getcwd()) -if os.name == "nt" and "pcbuild" in _PROJECT_BASE[-8:].lower(): - _PROJECT_BASE = _safe_realpath(os.path.join(_PROJECT_BASE, pardir)) -# PC/VS7.1 -if os.name == "nt" and "\\pc\\v" in _PROJECT_BASE[-10:].lower(): - _PROJECT_BASE = _safe_realpath(os.path.join(_PROJECT_BASE, pardir, pardir)) -# PC/AMD64 -if os.name == "nt" and "\\pcbuild\\amd64" in _PROJECT_BASE[-14:].lower(): - _PROJECT_BASE = _safe_realpath(os.path.join(_PROJECT_BASE, pardir, pardir)) +if os.name != 'java': # secures against JyNI-monkeypatching + if os.name == "nt" and "pcbuild" in _PROJECT_BASE[-8:].lower(): + _PROJECT_BASE = _safe_realpath(os.path.join(_PROJECT_BASE, pardir)) + # PC/VS7.1 + if os.name == "nt" and "\\pc\\v" in _PROJECT_BASE[-10:].lower(): + _PROJECT_BASE = _safe_realpath(os.path.join(_PROJECT_BASE, pardir, pardir)) + # PC/AMD64 + if os.name == "nt" and "\\pcbuild\\amd64" in _PROJECT_BASE[-14:].lower(): + _PROJECT_BASE = _safe_realpath(os.path.join(_PROJECT_BASE, pardir, pardir)) def is_python_build(): for fn in ("Setup.dist", "Setup.local"): @@ -172,6 +173,8 @@ _extend_dict(vars, get_config_vars()) for key, value in _INSTALL_SCHEMES[scheme].items(): + # not affected by JyNI-monkeypatching, because 'java' + # is in the list anyway: if os.name in ('posix', 'nt', 'java'): try: value = os.path.expanduser(value) @@ -181,7 +184,8 @@ return res def _get_default_scheme(): - if os.name == 'posix': + # Check for != 'java' to secure against JyNI-monkeypatching. + if os.name != 'java' and os.name == 'posix': # the default scheme for posix is posix_prefix return 'posix_prefix' return os.name @@ -191,15 +195,17 @@ def joinuser(*args): return os.path.expanduser(os.path.join(*args)) - # what about 'os2emx', 'riscos' ? - if os.name == "nt" or os._name == "nt": - base = os.environ.get("APPDATA") or "~" - return env_base if env_base else joinuser(base, "Python") + # The additional check for != 'java' secures against JyNI-monkeypatching. + if os.name != 'java': + # what about 'os2emx', 'riscos' ? + if os.name == "nt" or os._name == "nt": + base = os.environ.get("APPDATA") or "~" + return env_base if env_base else joinuser(base, "Python") - if sys.platform == "darwin": - framework = get_config_var("PYTHONFRAMEWORK") - if framework: - return env_base if env_base else \ + if sys.platform == "darwin": + framework = get_config_var("PYTHONFRAMEWORK") + if framework: + return env_base if env_base else \ joinuser("~", "Library", framework, "%d.%d" % (sys.version_info[:2])) if env_base: @@ -379,7 +385,8 @@ def get_config_h_filename(): """Returns the path of pyconfig.h.""" if _PYTHON_BUILD: - if os.name == "nt": + # The additional check for != "java" secures against JyNI-monkeypatching. + if os.name == "nt" and os.name != "java": inc_dir = os.path.join(_PROJECT_BASE, "PC") else: inc_dir = _PROJECT_BASE @@ -441,10 +448,11 @@ _CONFIG_VARS['platbase'] = _EXEC_PREFIX _CONFIG_VARS['projectbase'] = _PROJECT_BASE - if os.name in ('nt', 'os2'): - _init_non_posix(_CONFIG_VARS) - if os.name == 'posix': - _init_posix(_CONFIG_VARS) + if os.name != 'java': # this check secures against JyNI-monkeypatching + if os.name in ('nt', 'os2'): + _init_non_posix(_CONFIG_VARS) + if os.name == 'posix': + _init_posix(_CONFIG_VARS) # Setting 'userbase' is done below the call to the # init function to enable using 'get_config_var' in @@ -458,7 +466,8 @@ # Normally it is relative to the build directory. However, during # testing, for example, we might be running a non-installed python # from a different directory. - if _PYTHON_BUILD and os.name == "posix": + # The additional check for != "java" secures against JyNI-monkeypatching. + if _PYTHON_BUILD and os.name == "posix" and os.name != "java": base = _PROJECT_BASE try: cwd = os.getcwd() @@ -472,7 +481,9 @@ srcdir = os.path.join(base, _CONFIG_VARS['srcdir']) _CONFIG_VARS['srcdir'] = os.path.normpath(srcdir) - if sys.platform == 'darwin': + # The additional check for not startswith('java') secures against + # JyNI-monkeypatching. + if sys.platform == 'darwin' and not sys.platform.startswith('java'): kernel_version = os.uname()[2] # Kernel version (8.4.3) major_version = int(kernel_version.split('.')[0]) @@ -573,7 +584,8 @@ For other non-POSIX platforms, currently just returns 'sys.platform'. """ import re - if os.name == 'nt': + # The additional check for != "java" secures against JyNI-monkeypatching. + if os.name == 'nt' and os.name != "java": # sniff sys.version for architecture. prefix = " bit (" i = sys.version.find(prefix) @@ -587,6 +599,7 @@ return 'win-ia64' return sys.platform + # Check for != "posix" is not affected by JyNI-monkeypatching. if os.name != "posix" or not hasattr(os, 'uname'): # XXX what about the architecture? NT is Intel or Alpha, # Mac OS is M68k or PPC, etc. diff --git a/NEWS b/NEWS --- a/NEWS +++ b/NEWS @@ -6,9 +6,9 @@ Bugs fixed - [ 2457 ] Synchronization bug in PySystemStateCloser causes complete deadlock New Features - - added uname function to posix module. The mostly Java-based implementation even + - Added uname function to posix module. The mostly Java-based implementation even works to some extend on non-posix systems. Additional tweaks extend this to full - featured uname-functionality on Windows systems. + featured uname-functionality on Windows systems (usable via os.uname()). Jython 2.7.1b3 Bugs fixed -- Repository URL: https://hg.python.org/jython From jython-checkins at python.org Tue May 3 19:23:25 2016 From: jython-checkins at python.org (stefan.richthofer) Date: Tue, 03 May 2016 23:23:25 +0000 Subject: [Jython-checkins] =?utf-8?q?jython=3A_Updated_NEWS-file_=27Bugs_f?= =?utf-8?q?ixed=27_sections_of_2=2E7=2E1b3_and_2=2E7=2E1rc_according_to?= Message-ID: <20160503232322.53123.67616.ADC39251@psf.io> https://hg.python.org/jython/rev/7a9b32e4def0 changeset: 7922:7a9b32e4def0 user: stefan.richthofer date: Wed May 04 01:23:07 2016 +0200 summary: Updated NEWS-file 'Bugs fixed' sections of 2.7.1b3 and 2.7.1rc according to bugs.jython.org. Cleaned up some formating of 2.7.-sections in NEWS-file. files: NEWS | 70 +++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 66 insertions(+), 4 deletions(-) diff --git a/NEWS b/NEWS --- a/NEWS +++ b/NEWS @@ -4,7 +4,19 @@ Jython 2.7.1rc Bugs fixed - - [ 2457 ] Synchronization bug in PySystemStateCloser causes complete deadlock + - [ 2480 ] Repeating from import results in reload + - [ 2472 ] Importing simplejson fails with: 'NoneType' object has no + attribute 'encode_basestring_ascii' + - [ 2471 ] Jython is using netty channel future incorrectly + - [ 2470 ] Jython leaks sockets in select reactor + - [ 2469 ] Embedded BouncyCastle provider does not validate properly + - [ 2460 ] Wrong result when multiplying complex numbers involving infinity + - [ 2454 ] Security Vulnerability in Jython + - [ 2442 ] Overriding __len__, __iter__, and __getitem__ in a tuple subclass + causes an infinite recursion + - [ 2112 ] time.strptime() has different default year in Jython and CPython + - [ 1767 ] Rich comparisons + New Features - Added uname function to posix module. The mostly Java-based implementation even works to some extend on non-posix systems. Additional tweaks extend this to full @@ -12,8 +24,55 @@ Jython 2.7.1b3 Bugs fixed + - [ 550200 ] Jython does not work on ebcdic platforms + - [ 2457 ] Synchronization bug in PySystemStateCloser causes complete deadlock + - [ 2456 ] java.util.List.remove(index) does not dispatch to overloaded method for index remove + - [ 2453 ] org.python.modules.sre.PatternObject should be named SRE_Pattern to look like CPython + - [ 2452 ] Jython locking threads on Java proxy objects (multithreaded performance degradation) + - [ 2451 ] array.array objects should not hash + - [ 2441 ] sys.executable is None on standalone install, thus causing a setup() + install/build to fail + - [ 2439 ] 'SSLSocket' object has no attribute 'accept' + - [ 2437 ] no common ciphers SSL handshake error + - [ 2436 ] Missing socket.SOL_TCP (= socket.IPPROTO_TCP) + - [ 2435 ] Remove unsupported socket options like socket.SO_EXCLUSIVEADDRUSE + - [ 2434 ] zlib module has different flush behaviour than CPython and PyPy + - [ 2431 ] tox not working because of zero width bug in Jython sre + - [ 2428 ] socket.connect_ex does not properly report connection state sequence + - [ 2426 ] Support socket shutdown with "how" of _socket.SHUT_RDWR (2) + - [ 2423 ] jarray.array() method broken in 2.7 + - [ 2421 ] UnboundLocalError: local variable 'key_store' referenced before + assignment in _sslverify.py - [ 2417 ] os.utime fails on UNC network paths - [ 2416 ] os.system does not use changes to os.environ in subprocesses + - [ 2401 ] SSL race produces NPE + - [ 2400 ] Installing pip as part of Jython installation fails + - [ 2393 ] Clean running regression tests on windows accepted + - [ 2392 ] Intermittent errors from sre_compile.py - + ValueError('unsupported operand type', 'subpattern') + - [ 2391 ] read-only attr wrongly reported + - [ 2390 ] Support SSLContext + - [ 2374 ] setsockopt call from pika fails with "Protocol not available"error + - [ 2368 ] Problem with _io and BlockingIOError + - [ 2360 ] Not installing pip on Jython + - [ 2358 ] Using "read all" ops on /proc files on Linux produces empty strings + - [ 2357 ] Infinite recursion with set subclass + - [ 2338 ] readline.py startup hook + - [ 2329 ] Cannot create virtualenv with jython2.7rc2 - breaks tox + - [ 2321 ] Py.setSystemState() is a NOOP + - [ 2279 ] PyIterator#__tojava__ should support coercion to java array + - [ 2350 ] Installer errors on ensurepip + - [ 2276 ] Ctrl-Z doesn't exit Jython console on Windows + - [ 2223 ] __file__ not defined when running from ScriptEngine + - [ 2154 ] When running multiple engines in different threads, the last registered + writer is in use for all script executions. + - [ 2124 ] xml.dom.minidom.writexml() changes value of TEXT_NODE + - [ 1984 ] os.pipe() missing accepted + - [ 1953 ] lib2to3 missing + - [ 1780 ] jarray not properly converted to list with java.util.Arrays.asList(T... a) + - [ 1739 ] JSR223: ScriptEngine.FILENAME not honoured + - [ 1738 ] JSR223: ScriptEngine.ARGV is not honoured + New Features - Use latest upstream bundled wheels for ensurepip: pip (7.1.2), setuptools (18.4), replacing wheels patched specifically for Jython @@ -70,10 +129,12 @@ - [ 2297 ] Updates Jython installer to use jython.exe - [ 2298 ] Fix setuptools wheel bundled by ensurepip so it checks for Windows on Jython - [ 2300 ] Fix bin/jython.py to not consume subcommand args + New features - Installer installs pip, setuptools by default, but custom builds can de-select. Does not change standalone usage. (Runs jython -m ensurepip as last install step.) - Makes jython.py be the default launcher (as bin/jython) if CPython 2.7 is available. + Removed support - Installer no longer supports using an alternative JRE when generating Jython launchers. Instead just use JAVA_HOME environment variable to select the desired JRE. @@ -242,14 +303,12 @@ - Fix the struct module so that struct.Struct class can be derived from. Work on resource cleanup - - RefReaperThread is now a Runnable to avoid ClassLoader resource leaks - ShutdownCloser is now a Runnable to avoid subclass audit issues under a SecurityManager - Remove shadowing of mutable statics in PySystemState, instead make them instance variables - Fix PySystemState such that it supports AutoCloseable, Closeable Potentially backwards breaking changes - - Fix ThreadState so that Jython runtime can be unloaded, using Object[1] indirection - Use weakkey/weakvalue when caching ThreadState for a given thread, instead of using ThreadLocal - recursion_count is now more approximate, because not all entry/exit pairs are tracked @@ -257,7 +316,6 @@ Use -Dpython.import.site=false (as of RC1) to not import site at all New Features - - Added socket reboot work, using Netty 4 to fully support socket, select, and ssl API Jython 2.7b2 @@ -280,9 +338,11 @@ - [ 2082 ] Unexpected (Pdb) prompt during regression tests - [ 2083 ] os.unlink() can delete directories - [ 2089 ] sys.stdout not flushed after sys.exit + New Features - Command line option -E (ignore environment variables) - Environment variable PYTHONIOENCODING, and corresponding registry items + Removed support - No longer supports Java 6; the minimum version is now Java 7 @@ -308,6 +368,7 @@ - [ 1913 ] Support short -W options - [ 1897 ] 2.7.0ax only has partial ssl support - array_class in jarray module returns the "Array of a type" class + New Features - bytearray complete - a buffer API @@ -315,6 +376,7 @@ - bz2 module Jython 2.7a2 + Bugs Fixed - [ 1892 ] site-packages is not in sys.path Jython 2.7a1 -- Repository URL: https://hg.python.org/jython From jython-checkins at python.org Tue May 3 19:28:38 2016 From: jython-checkins at python.org (stefan.richthofer) Date: Tue, 03 May 2016 23:28:38 +0000 Subject: [Jython-checkins] =?utf-8?q?jython=3A_Cleaned_=27accepted=27_stat?= =?utf-8?q?us_keyword_in_NEWS-file=2E?= Message-ID: <20160503232832.10030.49402.631B85B1@psf.io> https://hg.python.org/jython/rev/d687976b4d3a changeset: 7923:d687976b4d3a user: stefan.richthofer date: Wed May 04 01:28:23 2016 +0200 summary: Cleaned 'accepted' status keyword in NEWS-file. files: NEWS | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/NEWS b/NEWS --- a/NEWS +++ b/NEWS @@ -47,7 +47,7 @@ - [ 2416 ] os.system does not use changes to os.environ in subprocesses - [ 2401 ] SSL race produces NPE - [ 2400 ] Installing pip as part of Jython installation fails - - [ 2393 ] Clean running regression tests on windows accepted + - [ 2393 ] Clean running regression tests on windows - [ 2392 ] Intermittent errors from sre_compile.py - ValueError('unsupported operand type', 'subpattern') - [ 2391 ] read-only attr wrongly reported @@ -67,7 +67,7 @@ - [ 2154 ] When running multiple engines in different threads, the last registered writer is in use for all script executions. - [ 2124 ] xml.dom.minidom.writexml() changes value of TEXT_NODE - - [ 1984 ] os.pipe() missing accepted + - [ 1984 ] os.pipe() missing - [ 1953 ] lib2to3 missing - [ 1780 ] jarray not properly converted to list with java.util.Arrays.asList(T... a) - [ 1739 ] JSR223: ScriptEngine.FILENAME not honoured -- Repository URL: https://hg.python.org/jython