- rel 2; rediff patches auto/th/python-gevent-1.4.0-2
authorArkadiusz Miśkiewicz <arekm@maven.pl>
Fri, 5 Mar 2021 08:45:12 +0000 (09:45 +0100)
committerArkadiusz Miśkiewicz <arekm@maven.pl>
Fri, 5 Mar 2021 08:45:12 +0000 (09:45 +0100)
known_failures-pld.patch
python-gevent-py3.8.patch
python-gevent.spec

index dae45a5714f84a8bbc1992fb9365aef738bd1106..5eea0245a80c5a4cd988313eddd6aebcc64546e0 100644 (file)
@@ -1,6 +1,7 @@
---- gevent-1.4.0.orig/src/gevent/tests/known_failures.py       2017-06-05 13:31:50.000000000 +0200
-+++ gevent-1.4.0/src/gevent/tests/known_failures.py    2018-03-05 12:50:16.000000000 +0100
-@@ -33,8 +33,277 @@
+diff -urNp -x '*.orig' gevent-1.4.0.org/src/gevent/tests/known_failures.py gevent-1.4.0/src/gevent/tests/known_failures.py
+--- gevent-1.4.0.org/src/gevent/tests/known_failures.py        2019-01-04 12:51:44.000000000 +0100
++++ gevent-1.4.0/src/gevent/tests/known_failures.py    2021-03-05 09:43:56.691802201 +0100
+@@ -30,8 +30,277 @@ FAILING_TESTS = [
      # we don't have that option without a new commit---and sometimes we really need a build
      # to succeed in order to get a release wheel
      'FLAKY test__issue6.py',
 +]
  
  if sys.platform == 'win32':
-     # other Windows-related issues (need investigating)
+     IGNORED_TESTS = [
index c8a858878f4e4695aafe514b75f91a61b2a480bf..a21f049bb5948cb362e7998f2e3e55ccc9a39e2a 100644 (file)
@@ -78,11 +78,10 @@ Still needs the specific networking test classes added, but all the basics pass
 # 1.5a1 (2019-05-02)
 # ==================
 # 
-diff --git a/examples/webproxy.py b/examples/webproxy.py
-index e381d6bd4..de1eaf8d5 100755
---- a/examples/webproxy.py
-+++ b/examples/webproxy.py
-@@ -15,7 +15,12 @@
+diff -urNp -x '*.orig' gevent-1.4.0.org/examples/webproxy.py gevent-1.4.0/examples/webproxy.py
+--- gevent-1.4.0.org/examples/webproxy.py      2019-01-04 12:51:44.000000000 +0100
++++ gevent-1.4.0/examples/webproxy.py  2021-03-05 09:44:15.299051013 +0100
+@@ -15,7 +15,12 @@ from gevent import monkey; monkey.patch_
  import sys
  import re
  import traceback
@@ -96,40 +95,9 @@ index e381d6bd4..de1eaf8d5 100755
  
  try:
      import urllib2
-#diff --git a/pyproject.toml b/pyproject.toml
-#index 2b611b9a4..f611ef972 100644
-#--- a/pyproject.toml
-#+++ b/pyproject.toml
-#@@ -12,8 +12,9 @@ requires = [
-#      # 0.28 is faster, and (important!) lets us specify the target module
-#      # name to be created so that we can have both foo.py and _foo.so
-#      # at the same time. 0.29 fixes some issues with Python 3.7,
-#-     # and adds the 3str mode for transition to Python 3.
-#-     "Cython >= 0.29.7",
-#+     # and adds the 3str mode for transition to Python 3. 0.29.12+ is
-#+     # required for Python 3.8
-#+     "Cython >= 0.29.13",
-#      # See version requirements in setup.py
-#      "cffi >= 1.12.3 ; platform_python_implementation == 'CPython'",
-#      # Python 3.7 requires at least 0.4.14, which is ABI incompatible with earlier
-#diff --git a/scripts/install.sh b/scripts/install.sh
-#index 94bd53058..ef8a6dfbd 100755
-#--- a/scripts/install.sh
-#+++ b/scripts/install.sh
-#@@ -99,6 +99,9 @@ for var in "$@"; do
-#         3.7)
-#             install 3.7.2 python3.7 3.7.d
-#             ;;
-#+        3.8)
-#+            install 3.8.0b4 python3.8 3.8.d
-#+            ;;
-#         pypy2.7)
-#             install pypy2.7-7.1.0 pypy2.7 pypy2.7.d
-#             ;;
-diff --git a/src/gevent/__semaphore.pxd b/src/gevent/__semaphore.pxd
-index dc9f11c68..e46778ed7 100644
---- a/src/gevent/__semaphore.pxd
-+++ b/src/gevent/__semaphore.pxd
+diff -urNp -x '*.orig' gevent-1.4.0.org/src/gevent/__semaphore.pxd gevent-1.4.0/src/gevent/__semaphore.pxd
+--- gevent-1.4.0.org/src/gevent/__semaphore.pxd        2019-01-04 12:51:44.000000000 +0100
++++ gevent-1.4.0/src/gevent/__semaphore.pxd    2021-03-05 09:44:15.299051013 +0100
 @@ -13,7 +13,7 @@ cdef class Semaphore(AbstractLinkable):
      # threadpool uses it
      cpdef _start_notify(self)
@@ -139,11 +107,10 @@ index dc9f11c68..e46778ed7 100644
      cpdef __enter__(self)
      cpdef __exit__(self, object t, object v, object tb)
  
-diff --git a/src/gevent/_compat.py b/src/gevent/_compat.py
-index 56391459e..e8f5ed4ba 100644
---- a/src/gevent/_compat.py
-+++ b/src/gevent/_compat.py
-@@ -21,7 +21,7 @@
+diff -urNp -x '*.orig' gevent-1.4.0.org/src/gevent/_compat.py gevent-1.4.0/src/gevent/_compat.py
+--- gevent-1.4.0.org/src/gevent/_compat.py     2019-01-04 12:51:44.000000000 +0100
++++ gevent-1.4.0/src/gevent/_compat.py 2021-03-05 09:44:15.299051013 +0100
+@@ -14,7 +14,7 @@ PY3 = sys.version_info[0] >= 3
  PYPY = hasattr(sys, 'pypy_version_info')
  WIN = sys.platform.startswith("win")
  LINUX = sys.platform.startswith('linux')
@@ -152,11 +119,10 @@ index 56391459e..e8f5ed4ba 100644
  
  
  PURE_PYTHON = PYPY or os.getenv('PURE_PYTHON')
-diff --git a/src/gevent/_socket2.py b/src/gevent/_socket2.py
-index 15f470893..7c2f35f3e 100644
---- a/src/gevent/_socket2.py
-+++ b/src/gevent/_socket2.py
-@@ -6,6 +6,7 @@
+diff -urNp -x '*.orig' gevent-1.4.0.org/src/gevent/_socket2.py gevent-1.4.0/src/gevent/_socket2.py
+--- gevent-1.4.0.org/src/gevent/_socket2.py    2019-01-04 12:51:44.000000000 +0100
++++ gevent-1.4.0/src/gevent/_socket2.py        2021-03-05 09:44:15.299051013 +0100
+@@ -6,6 +6,7 @@ from __future__ import absolute_import
  
  # Our import magic sadly makes this warning useless
  # pylint: disable=undefined-variable
@@ -164,38 +130,101 @@ index 15f470893..7c2f35f3e 100644
  
  from gevent import _socketcommon
  from gevent._util import copy_globals
-#diff --git a/src/gevent/_socketcommon.py b/src/gevent/_socketcommon.py
-#index cd12ac1a9..87b9a4f8a 100644
-#--- a/src/gevent/_socketcommon.py
-#+++ b/src/gevent/_socketcommon.py
-#@@ -69,13 +69,19 @@
-# __imports__.extend(__py3_imports__)
-# 
-# import time
-#-import sys
-#+
-# from gevent._hub_local import get_hub_noargs as get_hub
-# from gevent._compat import string_types, integer_types, PY3
-#+from gevent._compat import PY38
-#+from gevent._compat import WIN as is_windows
-#+from gevent._compat import OSX as is_macos
-# from gevent._util import copy_globals
-# 
-#-is_windows = sys.platform == 'win32'
-#-is_macos = sys.platform == 'darwin'
-#+if PY38:
-#+    __imports__.extend([
-#+        'create_server',
-#+        'has_dualstack_ipv6',
-#+    ])
-# 
-# # pylint:disable=no-name-in-module,unused-import
-# if is_windows:
-diff --git a/src/gevent/monkey.py b/src/gevent/monkey.py
-index 5dbfe3f78..f862f879c 100644
---- a/src/gevent/monkey.py
-+++ b/src/gevent/monkey.py
-@@ -668,6 +668,22 @@ def join(timeout=None):
+diff -urNp -x '*.orig' gevent-1.4.0.org/src/gevent/_socketcommon.py gevent-1.4.0/src/gevent/_socketcommon.py
+--- gevent-1.4.0.org/src/gevent/_socketcommon.py       2019-01-04 12:51:44.000000000 +0100
++++ gevent-1.4.0/src/gevent/_socketcommon.py   2021-03-05 09:44:15.302384451 +0100
+@@ -74,6 +74,12 @@ from gevent._hub_local import get_hub_no
+ from gevent._compat import string_types, integer_types, PY3
+ from gevent._util import copy_globals
++if sys.version_info[:2] >= (3, 8):
++    __imports__.extend([
++        'create_server',
++        'has_dualstack_ipv6'
++    ])
++
+ is_windows = sys.platform == 'win32'
+ is_macos = sys.platform == 'darwin'
+diff -urNp -x '*.orig' gevent-1.4.0.org/src/gevent/_ssl3.py gevent-1.4.0/src/gevent/_ssl3.py
+--- gevent-1.4.0.org/src/gevent/_ssl3.py       2019-01-04 12:51:44.000000000 +0100
++++ gevent-1.4.0/src/gevent/_ssl3.py   2021-03-05 09:44:15.299051013 +0100
+@@ -667,6 +667,11 @@ class SSLSocket(socket):
+             return None
+         return self._sslobj.tls_unique_cb()
++    def verify_client_post_handshake(self):
++        # Only present in 3.7.1+; an attributeerror is alright
++        if self._sslobj:
++            return self._sslobj.verify_client_post_handshake()
++        raise ValueError("No SSL wrapper around " + str(self))
+ # Python does not support forward declaration of types
+ SSLContext.sslsocket_class = SSLSocket
+diff -urNp -x '*.orig' gevent-1.4.0.org/src/gevent/_tblib.py gevent-1.4.0/src/gevent/_tblib.py
+--- gevent-1.4.0.org/src/gevent/_tblib.py      2019-01-04 12:51:44.000000000 +0100
++++ gevent-1.4.0/src/gevent/_tblib.py  2021-03-05 09:44:15.302384451 +0100
+@@ -198,7 +198,10 @@ class Traceback(object):
+         while current:
+             f_code = current.tb_frame.f_code
+             code = compile('\n' * (current.tb_lineno - 1) + 'raise __traceback_maker', current.tb_frame.f_code.co_filename, 'exec')
+-            if PY3:
++            if hasattr(code, "replace"):
++                # Python 3.8 and newer
++                code = code.replace(co_argcount=0, co_freevars=(), co_cellvars=())
++            elif PY3:
+                 code = CodeType(
+                     0, code.co_kwonlyargcount,
+                     code.co_nlocals, code.co_stacksize, code.co_flags,
+diff -urNp -x '*.orig' gevent-1.4.0.org/src/gevent/libuv/_corecffi_source.c gevent-1.4.0/src/gevent/libuv/_corecffi_source.c
+--- gevent-1.4.0.org/src/gevent/libuv/_corecffi_source.c       2019-01-04 12:51:44.000000000 +0100
++++ gevent-1.4.0/src/gevent/libuv/_corecffi_source.c   2021-03-05 09:44:15.299051013 +0100
+@@ -150,32 +150,34 @@ static void _gevent_fs_poll_callback3(vo
+ static void gevent_uv_walk_callback_close(uv_handle_t* handle, void* arg)
+ {
+-      if( handle && !uv_is_closing(handle) ) {
+-              uv_close(handle, NULL);
+-      }
++    if( handle && !uv_is_closing(handle) ) {
++      uv_close(handle, NULL);
++    }
+ }
+ static void gevent_close_all_handles(uv_loop_t* loop)
+ {
++    if (loop) {
+       uv_walk(loop, gevent_uv_walk_callback_close, NULL);
++    }
+ }
+ static void gevent_zero_timer(uv_timer_t* handle)
+ {
+-      memset(handle, 0, sizeof(uv_timer_t));
++    memset(handle, 0, sizeof(uv_timer_t));
+ }
+ static void gevent_zero_check(uv_check_t* handle)
+ {
+-      memset(handle, 0, sizeof(uv_check_t));
++    memset(handle, 0, sizeof(uv_check_t));
+ }
+ static void gevent_zero_prepare(uv_prepare_t* handle)
+ {
+-      memset(handle, 0, sizeof(uv_prepare_t));
++    memset(handle, 0, sizeof(uv_prepare_t));
+ }
+ static void gevent_zero_loop(uv_loop_t* handle)
+ {
+-      memset(handle, 0, sizeof(uv_loop_t));
++    memset(handle, 0, sizeof(uv_loop_t));
+ }
+diff -urNp -x '*.orig' gevent-1.4.0.org/src/gevent/monkey.py gevent-1.4.0/src/gevent/monkey.py
+--- gevent-1.4.0.org/src/gevent/monkey.py      2019-01-04 12:51:44.000000000 +0100
++++ gevent-1.4.0/src/gevent/monkey.py  2021-03-05 09:44:15.299051013 +0100
+@@ -614,6 +614,22 @@ def patch_thread(threading=True, _thread
                  raise RuntimeError("Cannot join current thread")
              if thread_greenlet is not None and thread_greenlet.dead:
                  return
@@ -218,12 +247,10 @@ index 5dbfe3f78..f862f879c 100644
              if not thread.is_alive():
                  return
  
-@@ -700,8 +716,34 @@ def join(timeout=None):
+@@ -646,8 +662,34 @@ def patch_thread(threading=True, _thread
          if orig_current_thread == threading_mod.main_thread():
              main_thread = threading_mod.main_thread()
              _greenlet = main_thread._greenlet = greenlet.getcurrent()
--
--            main_thread.join = make_join_func(main_thread, _greenlet)
 +            main_thread.__real_tstate_lock = main_thread._tstate_lock
 +
 +            # The interpreter will call threading._shutdown
@@ -250,16 +277,16 @@ index 5dbfe3f78..f862f879c 100644
 +                main_thread._tstate_lock = main_thread.__real_tstate_lock
 +                main_thread.__real_tstate_lock = None
 +                orig_shutdown()
-+
+-            main_thread.join = make_join_func(main_thread, _greenlet)
 +            threading_mod._shutdown = _shutdown
  
              # Patch up the ident of the main thread to match. This
              # matters if threading was imported before monkey-patching
-diff --git a/src/gevent/os.py b/src/gevent/os.py
-index 3980f320c..4dd66abd8 100644
---- a/src/gevent/os.py
-+++ b/src/gevent/os.py
-@@ -385,6 +385,12 @@ def waitpid(pid, options):
+diff -urNp -x '*.orig' gevent-1.4.0.org/src/gevent/os.py gevent-1.4.0/src/gevent/os.py
+--- gevent-1.4.0.org/src/gevent/os.py  2019-01-04 12:51:44.000000000 +0100
++++ gevent-1.4.0/src/gevent/os.py      2021-03-05 09:44:15.299051013 +0100
+@@ -385,6 +385,12 @@ if hasattr(os, 'fork'):
              # we're not watching it
              return _waitpid(pid, options)
  
@@ -272,7 +299,7 @@ index 3980f320c..4dd66abd8 100644
          def fork_and_watch(callback=None, loop=None, ref=False, fork=fork_gevent):
              """
              Fork a child process and start a child watcher for it in the parent process.
-@@ -413,10 +419,7 @@ def fork_and_watch(callback=None, loop=None, ref=False, fork=fork_gevent):
+@@ -413,10 +419,7 @@ if hasattr(os, 'fork'):
              pid = fork()
              if pid:
                  # parent
@@ -284,7 +311,7 @@ index 3980f320c..4dd66abd8 100644
              return pid
  
          __extensions__.append('fork_and_watch')
-@@ -474,6 +477,23 @@ def forkpty(*args, **kwargs):
+@@ -474,6 +477,23 @@ if hasattr(os, 'fork'):
                      # take any args to match fork_and_watch
                      return forkpty_and_watch(*args, **kwargs)
              __implements__.append("waitpid")
@@ -308,7 +335,7 @@ index 3980f320c..4dd66abd8 100644
          else:
              def fork():
                  """
-@@ -503,6 +523,7 @@ def forkpty():
+@@ -503,6 +523,7 @@ if hasattr(os, 'fork'):
  else:
      __implements__.remove('fork')
  
@@ -316,65 +343,10 @@ index 3980f320c..4dd66abd8 100644
  __imports__ = copy_globals(os, globals(),
                             names_to_ignore=__implements__ + __extensions__,
                             dunder_names_to_keep=())
-#diff --git a/src/gevent/subprocess.py b/src/gevent/subprocess.py
-#index a9894f1ab..9b4d13cd2 100644
-#--- a/src/gevent/subprocess.py
-#+++ b/src/gevent/subprocess.py
-#@@ -47,6 +47,7 @@
-# from gevent._compat import PY35
-# from gevent._compat import PY36
-# from gevent._compat import PY37
-#+from gevent._compat import PY38
-# from gevent._compat import reraise
-# from gevent._compat import fspath
-# from gevent._compat import fsencode
-#@@ -69,6 +70,25 @@
-#     __implements__.append("_posixsubprocess")
-#     _posixsubprocess = None
-# 
-#+if PY38:
-#+    # Using os.posix_spawn() to start subprocesses
-#+    # bypasses our child watchers on certain operating systems,
-#+    # and with certain library versions. Possibly the right
-#+    # fix is to monkey-patch os.posix_spawn like we do os.fork?
-#+    # These have no effect, they're just here to match the stdlib.
-#+    # TODO: When available, given a monkey patch on them, I think
-#+    # we ought to be able to use them if the stdlib has identified them
-#+    # as suitable.
-#+    __implements__.extend([
-#+        '_use_posix_spawn',
-#+        '_USE_POSIX_SPAWN'
-#+    ])
-#+
-#+    def _use_posix_spawn():
-#+        return False
-#+
-#+    _USE_POSIX_SPAWN = False
-#+
-# # Some symbols we define that we expect to export;
-# # useful for static analysis
-# PIPE = "PIPE should be imported"
-#@@ -1720,3 +1740,15 @@ def run(*popenargs, **kwargs):
-#             raise _with_stdout_stderr(CalledProcessError(retcode, process.args, stdout), stderr)
-# 
-#     return CompletedProcess(process.args, retcode, stdout, stderr)
-#+
-#+def _gevent_did_monkey_patch(*_args):
-#+    # Beginning on 3.8 on Mac, the 'spawn' method became the default
-#+    # start method. That doesn't fire fork watchers and we can't
-#+    # easily patch to make it do so: multiprocessing uses the private
-#+    # c accelerated _subprocess module to implement this. Instead we revert
-#+    # back to using fork.
-#+    from gevent._compat import MAC
-#+    if MAC:
-#+        import multiprocessing
-#+        if hasattr(multiprocessing, 'set_start_method'):
-#+            multiprocessing.set_start_method('fork', force=True)
-diff --git a/src/gevent/testing/testrunner.py b/src/gevent/testing/testrunner.py
-index 3c1c711f8..7a3f8c6bb 100644
---- a/src/gevent/testing/testrunner.py
-+++ b/src/gevent/testing/testrunner.py
-@@ -480,17 +480,26 @@ def _setup_environ(debug=False):
+diff -urNp -x '*.orig' gevent-1.4.0.org/src/gevent/testing/testrunner.py gevent-1.4.0/src/gevent/testing/testrunner.py
+--- gevent-1.4.0.org/src/gevent/testing/testrunner.py  2019-01-04 12:51:44.000000000 +0100
++++ gevent-1.4.0/src/gevent/testing/testrunner.py      2021-03-05 09:44:15.299051013 +0100
+@@ -381,17 +381,26 @@ def _setup_environ(debug=False):
      if 'GEVENT_DEBUG' not in os.environ and debug:
          os.environ['GEVENT_DEBUG'] = 'debug'
  
@@ -405,11 +377,53 @@ index 3c1c711f8..7a3f8c6bb 100644
  
  
  def main():
-diff --git a/src/gevent/tests/test__core_fork.py b/src/gevent/tests/test__core_fork.py
-index fee42f547..5717cf7d9 100644
---- a/src/gevent/tests/test__core_fork.py
-+++ b/src/gevent/tests/test__core_fork.py
-@@ -1,11 +1,13 @@
+diff -urNp -x '*.orig' gevent-1.4.0.org/src/gevent/tests/known_failures.py gevent-1.4.0/src/gevent/tests/known_failures.py
+--- gevent-1.4.0.org/src/gevent/tests/known_failures.py        2021-03-05 09:44:15.072377256 +0100
++++ gevent-1.4.0/src/gevent/tests/known_failures.py    2021-03-05 09:44:15.302384451 +0100
+@@ -610,6 +610,15 @@ RUN_ALONE = [
+     'test__examples.py',
+ ]
++if APPVEYOR:
++    # Strange failures sometimes, but only on Python 3.7, reporting
++    # "ConnectionAbortedError: [WinError 10053] An established
++    # connection was aborted by the software in your host machine"
++    # when we've done no such thing. Try running not in parallel
++    RUN_ALONE += [
++        'test__ssl.py',
++        'test__server.py',
++    ]
+ if APPVEYOR or TRAVIS:
+diff -urNp -x '*.orig' gevent-1.4.0.org/src/gevent/tests/test__core.py gevent-1.4.0/src/gevent/tests/test__core.py
+--- gevent-1.4.0.org/src/gevent/tests/test__core.py    2019-01-04 12:51:44.000000000 +0100
++++ gevent-1.4.0/src/gevent/tests/test__core.py        2021-03-05 09:44:15.299051013 +0100
+@@ -2,6 +2,7 @@
+ from __future__ import absolute_import, print_function, division
+ import sys
+ import unittest
++import sys
+ import gevent.testing as greentest
+ from gevent import core
+@@ -130,6 +131,12 @@ class TestWatchersDefault(TestWatchers):
+     "See https://ci.appveyor.com/project/denik/gevent/build/1.0.1380/job/lrlvid6mkjtyrhn5#L1103 "
+     "It has also timed out, but only on Appveyor CPython 3.6; local CPython 3.6 does not. "
+     "See https://ci.appveyor.com/project/denik/gevent/build/1.0.1414/job/yn7yi8b53vtqs8lw#L1523")
++@greentest.skipIf(
++    greentest.LIBUV and greentest.RUNNING_ON_TRAVIS and sys.version_info == (3, 8, 0, 'beta', 4),
++    "Crashes on 3.8.0b4 on TravisCI. "
++    "(https://travis-ci.org/gevent/gevent/jobs/582031266#L215) "
++    "Unable to reproduce locally so far on macOS."
++)
+ class TestWatchersDefaultDestroyed(TestWatchers):
+     def _makeOne(self):
+diff -urNp -x '*.orig' gevent-1.4.0.org/src/gevent/tests/test__core_fork.py gevent-1.4.0/src/gevent/tests/test__core_fork.py
+--- gevent-1.4.0.org/src/gevent/tests/test__core_fork.py       2019-01-04 12:51:44.000000000 +0100
++++ gevent-1.4.0/src/gevent/tests/test__core_fork.py   2021-03-05 09:44:15.299051013 +0100
+@@ -1,11 +1,12 @@
  from __future__ import print_function
  import gevent.monkey
  gevent.monkey.patch_all()
@@ -420,12 +434,11 @@ index fee42f547..5717cf7d9 100644
  import multiprocessing
  
 +import gevent
-+from gevent._compat import MAC
 +
  hub = gevent.get_hub()
  pid = os.getpid()
  newpid = None
-@@ -46,6 +48,7 @@ def test():
+@@ -46,6 +47,7 @@ def test():
  if __name__ == '__main__':
      # Must call for Windows to fork properly; the fork can't be in the top-level
      multiprocessing.freeze_support()
@@ -433,11 +446,59 @@ index fee42f547..5717cf7d9 100644
      # fork watchers weren't firing in multi-threading processes.
      # This test is designed to prove that they are.
      # However, it fails on Windows: The fork watcher never runs!
-diff --git a/src/gevent/tests/test__threading_2.py b/src/gevent/tests/test__threading_2.py
-index b425c88a3..cb7f8b91e 100644
---- a/src/gevent/tests/test__threading_2.py
-+++ b/src/gevent/tests/test__threading_2.py
-@@ -33,6 +33,7 @@
+diff -urNp -x '*.orig' gevent-1.4.0.org/src/gevent/tests/test__greenness.py gevent-1.4.0/src/gevent/tests/test__greenness.py
+--- gevent-1.4.0.org/src/gevent/tests/test__greenness.py       2019-01-04 12:51:44.000000000 +0100
++++ gevent-1.4.0/src/gevent/tests/test__greenness.py   2021-03-05 09:44:15.299051013 +0100
+@@ -29,13 +29,15 @@ monkey.patch_all()
+ import gevent.testing as greentest
+ try:
+-    import urllib2
+-except ImportError:
+     from urllib import request as urllib2
+-try:
+-    import BaseHTTPServer
+-except ImportError:
+     from http import server as BaseHTTPServer
++    from http.server import SimpleHTTPRequestHandler
++except ImportError:
++    # Python 2
++    import urllib2
++    import BaseHTTPServer
++    from SimpleHTTPServer import SimpleHTTPRequestHandler
++
+ import gevent
+ from gevent.testing import params
+@@ -47,7 +49,8 @@ class TestGreenness(greentest.TestCase):
+     def setUp(self):
+         server_address = params.DEFAULT_BIND_ADDR_TUPLE
+         BaseHTTPServer.BaseHTTPRequestHandler.protocol_version = "HTTP/1.0"
+-        self.httpd = BaseHTTPServer.HTTPServer(server_address, BaseHTTPServer.BaseHTTPRequestHandler)
++        self.httpd = BaseHTTPServer.HTTPServer(server_address,
++                                               SimpleHTTPRequestHandler)
+         self.httpd.request_count = 0
+     def tearDown(self):
+@@ -62,10 +65,10 @@ class TestGreenness(greentest.TestCase):
+         server = gevent.spawn(self.serve)
+         port = self.httpd.socket.getsockname()[1]
+-        with self.assertRaises(urllib2.HTTPError) as exc:
+-            urllib2.urlopen('http://127.0.0.1:%s' % port)
+-        self.assertEqual(exc.exception.code, 501)
+-        server.get(0.01)
++        rsp = urllib2.urlopen('http://127.0.0.1:%s' % port)
++        rsp.read()
++        rsp.close()
++        server.join()
+         self.assertEqual(self.httpd.request_count, 1)
+diff -urNp -x '*.orig' gevent-1.4.0.org/src/gevent/tests/test__threading_2.py gevent-1.4.0/src/gevent/tests/test__threading_2.py
+--- gevent-1.4.0.org/src/gevent/tests/test__threading_2.py     2019-01-04 12:51:44.000000000 +0100
++++ gevent-1.4.0/src/gevent/tests/test__threading_2.py 2021-03-05 09:44:15.299051013 +0100
+@@ -33,6 +33,7 @@ try:
      from test.support import verbose
  except ImportError:
      from test.test_support import verbose
@@ -445,7 +506,7 @@ index b425c88a3..cb7f8b91e 100644
  import random
  import re
  import sys
-@@ -46,7 +47,7 @@
+@@ -46,7 +47,7 @@ import unittest
  import weakref
  
  from gevent.tests import lock_tests
@@ -454,7 +515,7 @@ index b425c88a3..cb7f8b91e 100644
  # A trivial mutable counter.
  
  def skipDueToHang(cls):
-@@ -132,7 +133,7 @@ def test_various_ops(self):
+@@ -132,7 +133,7 @@ class ThreadTests(unittest.TestCase):
              print('waiting for all tasks to complete')
          for t in threads:
              t.join(NUMTASKS)
@@ -463,7 +524,7 @@ index b425c88a3..cb7f8b91e 100644
              if hasattr(t, 'ident'):
                  self.assertNotEqual(t.ident, 0)
                  self.assertFalse(t.ident is None)
-@@ -351,28 +352,33 @@ def test_join_nondaemon_on_shutdown(self):
+@@ -351,28 +352,33 @@ class ThreadTests(unittest.TestCase):
          # Issue 1722344
          # Raising SystemExit skipped threading._shutdown
          import subprocess
@@ -503,7 +564,7 @@ index b425c88a3..cb7f8b91e 100644
          # On Python 2, importing pkg_resources tends to result in some 'ImportWarning'
          # being printed to stderr about packages missing __init__.py; the -W ignore is...
          # ignored.
-@@ -410,7 +416,7 @@ def __init__(self, should_raise):
+@@ -410,7 +416,7 @@ class ThreadTests(unittest.TestCase):
                      self.should_raise = should_raise
                      self.thread = threading.Thread(target=self._run,
                                                     args=(self,),
@@ -512,7 +573,7 @@ index b425c88a3..cb7f8b91e 100644
                      self.thread.start()
  
                  def _run(self, _other_ref, _yet_another):
-@@ -463,7 +469,7 @@ def test_1_join_on_shutdown(self):
+@@ -463,7 +469,7 @@ class ThreadJoinOnShutdown(unittest.Test
              t = threading.Thread(target=joiningfunc,
                                   args=(threading.current_thread(),))
              t.start()
@@ -521,30 +582,24 @@ index b425c88a3..cb7f8b91e 100644
              print('end of main')
              """
          self._run_and_join(script)
-#diff --git a/src/gevent/thread.py b/src/gevent/thread.py
-#index a1fe41813..14428df3f 100644
-#--- a/src/gevent/thread.py
-#+++ b/src/gevent/thread.py
-#@@ -41,6 +41,12 @@
-#         'interrupt_main',
-#         'start_new'
-#     ]
-#+    if sys.version_info[:2] >= (3, 8):
-#+        # We can't actually produce a value that "may be used
-#+        # to identify this particular thread system-wide", right?
-#+        # Even if we could, I imagine people will want to pass this to
-#+        # non-Python (native) APIs, so we shouldn't mess with it.
-#+        __imports__.append('get_native_id')
-# 
-# 
-# error = __thread__.error
-diff --git a/src/gevent/threading.py b/src/gevent/threading.py
-index c845fd221..64d989584 100644
---- a/src/gevent/threading.py
-+++ b/src/gevent/threading.py
-@@ -160,41 +160,25 @@ def main_native_thread():
- if PY3:
-     # XXX: Issue 18808 breaks us on Python 3.4+.
+diff -urNp -x '*.orig' gevent-1.4.0.org/src/gevent/thread.py gevent-1.4.0/src/gevent/thread.py
+--- gevent-1.4.0.org/src/gevent/thread.py      2019-01-04 12:51:44.000000000 +0100
++++ gevent-1.4.0/src/gevent/thread.py  2021-03-05 09:44:15.302384451 +0100
+@@ -31,6 +31,8 @@ else:
+                     'exit_thread',
+                     'interrupt_main',
+                     'start_new']
++    if sys.version_info[:2] >= (3, 8):
++        __imports__.append('get_native_id')
+ error = __thread__.error
+ from gevent._compat import PY3
+ from gevent._compat import PYPY
+diff -urNp -x '*.orig' gevent-1.4.0.org/src/gevent/threading.py gevent-1.4.0/src/gevent/threading.py
+--- gevent-1.4.0.org/src/gevent/threading.py   2019-01-04 12:51:44.000000000 +0100
++++ gevent-1.4.0/src/gevent/threading.py       2021-03-05 09:44:15.299051013 +0100
+@@ -156,41 +156,25 @@ import sys
+ if sys.version_info[:2] >= (3, 4):
+     # XXX: Issue 18808 breaks us on Python 3.4.
      # Thread objects now expect a callback from the interpreter itself
 -    # (threadmodule.c:release_sentinel). Because this never happens
 +    # (threadmodule.c:release_sentinel) when the C-level PyThreadState
@@ -598,7 +653,7 @@ index c845fd221..64d989584 100644
  
      __implements__.append('Thread')
  
-@@ -203,6 +187,8 @@ class Timer(Thread, __threading__.Timer): # pylint:disable=abstract-method,inher
+@@ -199,6 +183,8 @@ if sys.version_info[:2] >= (3, 4):
  
      __implements__.append('Timer')
  
@@ -607,657 +662,3 @@ index c845fd221..64d989584 100644
      # The main thread is patched up with more care
      # in _gevent_will_monkey_patch
  
-
-From 632d3c9990f7db27f76245895bb4c2717818c5d5 Mon Sep 17 00:00:00 2001
-From: Jason Madden <jamadden@gmail.com>
-Date: Fri, 6 Sep 2019 18:26:42 -0500
-Subject: [PATCH 2/9] Add the 3.8 test cases.
-
----
- src/gevent/_ssl3.py                           |   14 +
- src/gevent/monkey.py                          |   37 +-
- src/gevent/testing/patched_tests_setup.py     |   36 +-
- src/gevent/testing/sysinfo.py                 |    3 +
- src/greentest/3.8/allsans.pem                 |   81 +
- src/greentest/3.8/badcert.pem                 |   36 +
- src/greentest/3.8/badkey.pem                  |   40 +
- src/greentest/3.8/capath/4e1295a3.0           |   14 +
- src/greentest/3.8/capath/5ed36f99.0           |   41 +
- src/greentest/3.8/capath/6e88d7b8.0           |   14 +
- src/greentest/3.8/capath/99d0fa06.0           |   41 +
- src/greentest/3.8/capath/b1930218.0           |   26 +
- src/greentest/3.8/capath/ceff1710.0           |   26 +
- src/greentest/3.8/ffdh3072.pem                |   41 +
- src/greentest/3.8/idnsans.pem                 |  169 +
- src/greentest/3.8/keycert.passwd.pem          |   68 +
- src/greentest/3.8/keycert.pem                 |   66 +
- src/greentest/3.8/keycert2.pem                |   66 +
- src/greentest/3.8/keycert3.pem                |  164 +
- src/greentest/3.8/keycert4.pem                |  164 +
- src/greentest/3.8/keycertecc.pem              |  106 +
- src/greentest/3.8/nokia.pem                   |   31 +
- src/greentest/3.8/nullbytecert.pem            |   90 +
- src/greentest/3.8/nullcert.pem                |    0
- src/greentest/3.8/pycacert.pem                |   99 +
- src/greentest/3.8/pycakey.pem                 |   40 +
- src/greentest/3.8/revocation.crl              |   14 +
- src/greentest/3.8/secp384r1.pem               |    7 +
- .../3.8/selfsigned_pythontestdotnet.pem       |   34 +
- src/greentest/3.8/ssl_cert.pem                |   26 +
- src/greentest/3.8/ssl_key.passwd.pem          |   42 +
- src/greentest/3.8/ssl_key.pem                 |   40 +
- src/greentest/3.8/talos-2019-0758.pem         |   22 +
- src/greentest/3.8/test_asyncore.py            |  834 +++
- src/greentest/3.8/test_ftplib.py              | 1093 +++
- src/greentest/3.8/test_httplib.py             | 1977 ++++++
- src/greentest/3.8/test_select.py              |   81 +
- src/greentest/3.8/test_selectors.py           |  564 ++
- src/greentest/3.8/test_smtpd.py               | 1013 +++
- src/greentest/3.8/test_socket.py              | 6278 +++++++++++++++++
- src/greentest/3.8/test_ssl.py                 | 4652 ++++++++++++
- src/greentest/3.8/test_subprocess.py          | 3330 +++++++++
- src/greentest/3.8/test_threading.py           | 1382 ++++
- src/greentest/3.8/test_wsgiref.py             |  867 +++
- src/greentest/3.8/version                     |    1 +
- 45 files changed, 23756 insertions(+), 14 deletions(-)
- create mode 100644 src/greentest/3.8/allsans.pem
- create mode 100644 src/greentest/3.8/badcert.pem
- create mode 100644 src/greentest/3.8/badkey.pem
- create mode 100644 src/greentest/3.8/capath/4e1295a3.0
- create mode 100644 src/greentest/3.8/capath/5ed36f99.0
- create mode 100644 src/greentest/3.8/capath/6e88d7b8.0
- create mode 100644 src/greentest/3.8/capath/99d0fa06.0
- create mode 100644 src/greentest/3.8/capath/b1930218.0
- create mode 100644 src/greentest/3.8/capath/ceff1710.0
- create mode 100644 src/greentest/3.8/ffdh3072.pem
- create mode 100644 src/greentest/3.8/idnsans.pem
- create mode 100644 src/greentest/3.8/keycert.passwd.pem
- create mode 100644 src/greentest/3.8/keycert.pem
- create mode 100644 src/greentest/3.8/keycert2.pem
- create mode 100644 src/greentest/3.8/keycert3.pem
- create mode 100644 src/greentest/3.8/keycert4.pem
- create mode 100644 src/greentest/3.8/keycertecc.pem
- create mode 100644 src/greentest/3.8/nokia.pem
- create mode 100644 src/greentest/3.8/nullbytecert.pem
- create mode 100644 src/greentest/3.8/nullcert.pem
- create mode 100644 src/greentest/3.8/pycacert.pem
- create mode 100644 src/greentest/3.8/pycakey.pem
- create mode 100644 src/greentest/3.8/revocation.crl
- create mode 100644 src/greentest/3.8/secp384r1.pem
- create mode 100644 src/greentest/3.8/selfsigned_pythontestdotnet.pem
- create mode 100644 src/greentest/3.8/ssl_cert.pem
- create mode 100644 src/greentest/3.8/ssl_key.passwd.pem
- create mode 100644 src/greentest/3.8/ssl_key.pem
- create mode 100644 src/greentest/3.8/talos-2019-0758.pem
- create mode 100644 src/greentest/3.8/test_asyncore.py
- create mode 100644 src/greentest/3.8/test_ftplib.py
- create mode 100644 src/greentest/3.8/test_httplib.py
- create mode 100644 src/greentest/3.8/test_select.py
- create mode 100644 src/greentest/3.8/test_selectors.py
- create mode 100644 src/greentest/3.8/test_smtpd.py
- create mode 100644 src/greentest/3.8/test_socket.py
- create mode 100644 src/greentest/3.8/test_ssl.py
- create mode 100644 src/greentest/3.8/test_subprocess.py
- create mode 100644 src/greentest/3.8/test_threading.py
- create mode 100644 src/greentest/3.8/test_wsgiref.py
- create mode 100644 src/greentest/3.8/version
-
-=== SKIPPED ===
-From e349789fff94418ff363c3d7ba8d4cf4a5bcd798 Mon Sep 17 00:00:00 2001
-From: Jason Madden <jamadden@gmail.com>
-Date: Fri, 6 Sep 2019 18:27:34 -0500
-Subject: [PATCH 3/9] Fix lint.
-
----
- src/gevent/tests/test__core_fork.py | 1 -
- 1 file changed, 1 deletion(-)
-
-diff --git a/src/gevent/tests/test__core_fork.py b/src/gevent/tests/test__core_fork.py
-index 5717cf7d9..20dc2a4d1 100644
---- a/src/gevent/tests/test__core_fork.py
-+++ b/src/gevent/tests/test__core_fork.py
-@@ -6,7 +6,6 @@
- import multiprocessing
- import gevent
--from gevent._compat import MAC
- hub = gevent.get_hub()
- pid = os.getpid()
-
-From 5c5d2bc660b599256734a9f5c9e58c79ec4f1b1b Mon Sep 17 00:00:00 2001
-From: Jason Madden <jamadden@gmail.com>
-Date: Fri, 6 Sep 2019 18:28:24 -0500
-Subject: [PATCH 4/9] Fix the other place that refs the version in .travis.yml.
-
----
- .travis.yml | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-#diff --git a/.travis.yml b/.travis.yml
-#index 05dc24b12..c956f6ae7 100644
-#--- a/.travis.yml
-#+++ b/.travis.yml
-#@@ -284,10 +284,10 @@ jobs:
-#     # 3.8
-#     - <<: *test-libuv-jobs
-#       env: TRAVIS_PYTHON_VERSION=3.8
-#-      name: libuv36
-#+      name: libuv38
-#     - <<: *test-libev-jobs
-#       env: TRAVIS_PYTHON_VERSION=3.8
-#-      name: libev-cffi36
-#+      name: libev-cffi38
-# 
-# 
-#     # 2.7, no-embed. Run the tests that exercise the libraries we
-#
-From 0a45f740f3afce22c88fd7f9dbe5e30aa7d95336 Mon Sep 17 00:00:00 2001
-From: Jason Madden <jamadden@gmail.com>
-Date: Fri, 6 Sep 2019 18:48:09 -0500
-Subject: [PATCH 5/9] Fix false detection in test__all__.
-
----
- .travis.yml              |  7 +++++--
- src/gevent/subprocess.py | 45 ++++++++++++++++++++++++----------------
- 2 files changed, 32 insertions(+), 20 deletions(-)
-
-#diff --git a/.travis.yml b/.travis.yml
-#index c956f6ae7..f676bb6e7 100644
-#--- a/.travis.yml
-#+++ b/.travis.yml
-#@@ -198,9 +198,12 @@ jobs:
-#     # We only need to do this on one version, and it should be Python 3, because
-#     # pylint has stopped updating for Python 2.
-#     - stage: test
-#-      # We need pylint, since above we're not installing a requirements file
-#+      # We need pylint, since above we're not installing a
-#+      # requirements file. Code added to _ssl3.SSLContext for Python
-#+      # 3.8 triggers an infinite recursion bug in pylint 2.3.1/astroid 2.2.5
-#+      # unless we disable inference.
-#       install: pip install pylint
-#-      script: python -m pylint --rcfile=.pylintrc gevent
-#+      script: python -m pylint --limit-inference-results=1 --rcfile=.pylintrc gevent
-#       env: TRAVIS_PYTHON_VERSION=3.7
-#       name: lint37
-# 
-#diff --git a/src/gevent/subprocess.py b/src/gevent/subprocess.py
-#index 9b4d13cd2..ed22d863b 100644
-#--- a/src/gevent/subprocess.py
-#+++ b/src/gevent/subprocess.py
-#@@ -70,24 +70,6 @@
-#     __implements__.append("_posixsubprocess")
-#     _posixsubprocess = None
-# 
-#-if PY38:
-#-    # Using os.posix_spawn() to start subprocesses
-#-    # bypasses our child watchers on certain operating systems,
-#-    # and with certain library versions. Possibly the right
-#-    # fix is to monkey-patch os.posix_spawn like we do os.fork?
-#-    # These have no effect, they're just here to match the stdlib.
-#-    # TODO: When available, given a monkey patch on them, I think
-#-    # we ought to be able to use them if the stdlib has identified them
-#-    # as suitable.
-#-    __implements__.extend([
-#-        '_use_posix_spawn',
-#-        '_USE_POSIX_SPAWN'
-#-    ])
-#-
-#-    def _use_posix_spawn():
-#-        return False
-#-
-#-    _USE_POSIX_SPAWN = False
-# 
-# # Some symbols we define that we expect to export;
-# # useful for static analysis
-#@@ -183,6 +165,33 @@ def _use_posix_spawn():
-#         'CREATE_BREAKAWAY_FROM_JOB'
-#     ])
-# 
-#+if PY38:
-#+    # Using os.posix_spawn() to start subprocesses
-#+    # bypasses our child watchers on certain operating systems,
-#+    # and with certain library versions. Possibly the right
-#+    # fix is to monkey-patch os.posix_spawn like we do os.fork?
-#+    # These have no effect, they're just here to match the stdlib.
-#+    # TODO: When available, given a monkey patch on them, I think
-#+    # we ought to be able to use them if the stdlib has identified them
-#+    # as suitable.
-#+    __implements__.extend([
-#+        '_use_posix_spawn',
-#+    ])
-#+
-#+    def _use_posix_spawn():
-#+        return False
-#+
-#+    _USE_POSIX_SPAWN = False
-#+
-#+    if __subprocess__._USE_POSIX_SPAWN:
-#+        __implements__.extend([
-#+            '_USE_POSIX_SPAWN',
-#+        ])
-#+    else:
-#+        __imports__.extend([
-#+            '_USE_POSIX_SPAWN',
-#+        ])
-#+
-# actually_imported = copy_globals(__subprocess__, globals(),
-#                                  only_names=__imports__,
-#                                  ignore_missing_names=True)
-#
-From 412d59d0889bf0d1221c52d902a98a7648f0a829 Mon Sep 17 00:00:00 2001
-From: Jason Madden <jamadden@gmail.com>
-Date: Sat, 7 Sep 2019 07:04:09 -0500
-Subject: [PATCH 6/9] Hmm, why is test__core giving fits on py38/libuv/travis?
- Can't reproduce locally.
-
----
- appveyor.yml                        |  1 +
- src/gevent/libuv/_corecffi_source.c | 16 +++++++++-------
- 2 files changed, 10 insertions(+), 7 deletions(-)
-
-#diff --git a/appveyor.yml b/appveyor.yml
-#index 3e5f84f78..ee660e472 100644
-#--- a/appveyor.yml
-#+++ b/appveyor.yml
-#@@ -11,6 +11,7 @@ environment:
-#     # too often we get failures to resolve DNS names or failures
-#     # to connect on AppVeyor.
-#     GEVENTTEST_USE_RESOURCES: "-network"
-#+    PYTHONTRACEMALLOC: 10
-# 
-#   matrix:
-# 
-diff --git a/src/gevent/libuv/_corecffi_source.c b/src/gevent/libuv/_corecffi_source.c
-index 83fe82ee9..3b4b8d156 100644
---- a/src/gevent/libuv/_corecffi_source.c
-+++ b/src/gevent/libuv/_corecffi_source.c
-@@ -150,32 +150,34 @@ static void _gevent_fs_poll_callback3(void* handlep, int status, const uv_stat_t
- static void gevent_uv_walk_callback_close(uv_handle_t* handle, void* arg)
- {
--      if( handle && !uv_is_closing(handle) ) {
--              uv_close(handle, NULL);
--      }
-+    if( handle && !uv_is_closing(handle) ) {
-+      uv_close(handle, NULL);
-+    }
- }
- static void gevent_close_all_handles(uv_loop_t* loop)
- {
-+    if (loop) {
-       uv_walk(loop, gevent_uv_walk_callback_close, NULL);
-+    }
- }
- static void gevent_zero_timer(uv_timer_t* handle)
- {
--      memset(handle, 0, sizeof(uv_timer_t));
-+    memset(handle, 0, sizeof(uv_timer_t));
- }
- static void gevent_zero_check(uv_check_t* handle)
- {
--      memset(handle, 0, sizeof(uv_check_t));
-+    memset(handle, 0, sizeof(uv_check_t));
- }
- static void gevent_zero_prepare(uv_prepare_t* handle)
- {
--      memset(handle, 0, sizeof(uv_prepare_t));
-+    memset(handle, 0, sizeof(uv_prepare_t));
- }
- static void gevent_zero_loop(uv_loop_t* handle)
- {
--      memset(handle, 0, sizeof(uv_loop_t));
-+    memset(handle, 0, sizeof(uv_loop_t));
- }
-
-From e52ac513ef66dba47f5312f1870fe2e5b020cb19 Mon Sep 17 00:00:00 2001
-From: Jason Madden <jamadden@gmail.com>
-Date: Sat, 7 Sep 2019 07:44:37 -0500
-Subject: [PATCH 7/9] Disable that failing test on 3.8b4 for now.
-
----
- src/gevent/tests/test__core.py   |  7 +++++++
- src/gevent/tests/test__socket.py | 21 ++++++++++-----------
- 2 files changed, 17 insertions(+), 11 deletions(-)
-
-diff --git a/src/gevent/tests/test__core.py b/src/gevent/tests/test__core.py
-index 1816e0f89..c538ee7aa 100644
---- a/src/gevent/tests/test__core.py
-+++ b/src/gevent/tests/test__core.py
-@@ -2,6 +2,7 @@
- from __future__ import absolute_import, print_function, division
- import unittest
-+import sys
- import gevent.testing as greentest
- from gevent import core
-@@ -128,6 +129,12 @@ def destroyOne(self, loop):
-     "See https://ci.appveyor.com/project/denik/gevent/build/1.0.1380/job/lrlvid6mkjtyrhn5#L1103 "
-     "It has also timed out, but only on Appveyor CPython 3.6; local CPython 3.6 does not. "
-     "See https://ci.appveyor.com/project/denik/gevent/build/1.0.1414/job/yn7yi8b53vtqs8lw#L1523")
-+@greentest.skipIf(
-+    greentest.LIBUV and greentest.RUNNING_ON_TRAVIS and sys.version_info == (3, 8, 0, 'beta', 4),
-+    "Crashes on 3.8.0b4 on TravisCI. "
-+    "(https://travis-ci.org/gevent/gevent/jobs/582031266#L215) "
-+    "Unable to reproduce locally so far on macOS."
-+)
- class TestWatchersDefaultDestroyed(TestWatchers):
-     def _makeOne(self):
-#diff --git a/src/gevent/tests/test__socket.py b/src/gevent/tests/test__socket.py
-#index 48f6ee3ed..4a670cdb0 100644
-#--- a/src/gevent/tests/test__socket.py
-#+++ b/src/gevent/tests/test__socket.py
-#@@ -3,15 +3,15 @@
-# from gevent import monkey; monkey.patch_all()
-# 
-# import sys
-#-import os
-# import array
-# import socket
-#-import traceback
-# import time
-# import unittest
-#-import gevent.testing as greentest
-# from functools import wraps
-# 
-#+from gevent import get_hub
-#+import gevent.testing as greentest
-#+
-# from gevent.testing import six
-# from gevent.testing import LARGE_TIMEOUT
-# from gevent.testing import support
-#@@ -34,8 +34,7 @@ def errors_are_fatal(*args, **kwargs):
-#             try:
-#                 return target(*args, **kwargs)
-#             except: # pylint:disable=bare-except
-#-                traceback.print_exc()
-#-                os._exit(2)
-#+                get_hub().throw(*sys.exc_info())
-# 
-#         _Thread.__init__(self, target=errors_are_fatal, **kwargs)
-#         self.start()
-#@@ -91,18 +90,17 @@ def _test_sendall(self, data, match_data=None, client_method='sendall',
-# 
-#         def accept_and_read():
-#             conn = None
-#+            r = None
-#             try:
-#                 conn, _ = self.listener.accept()
-#                 r = conn.makefile(mode='rb')
-#                 read_data.append(r.read())
-#                 r.flush()
-#                 r.close()
-#-            except: # pylint:disable=bare-except
-#-                server_exc_info.append(sys.exc_info())
-#             finally:
-#-                if conn:
-#-                    conn.close()
-#-                self.listener.close()
-#+                for f in (conn, r, self.listener):
-#+                    if f is not None:
-#+                        f.close()
-# 
-#         server = Thread(target=accept_and_read)
-#         client = self.create_connection(**client_args)
-#@@ -114,9 +112,10 @@ def accept_and_read():
-#             client.close()
-# 
-#         server.join()
-#+        assert not server.is_alive()
-#         if match_data is None:
-#             match_data = self.long_data
-#-        self.assertEqual(read_data[0], match_data)
-#+        self.assertEqual(read_data, [match_data])
-# 
-#         if server_exc_info:
-#             six.reraise(*server_exc_info[0])
-#
-From 271e58658f7cc839dcde74239c66d1d396d675b7 Mon Sep 17 00:00:00 2001
-From: Jason Madden <jamadden@gmail.com>
-Date: Sat, 7 Sep 2019 09:02:12 -0500
-Subject: [PATCH 8/9] Whoops, fix Python 2.
-
----
- src/gevent/tests/test__greenness.py | 23 +++++++++++++----------
- src/gevent/tests/test__socket.py    | 13 ++++++++-----
- src/gevent/tests/test__ssl.py       |  3 ++-
- 3 files changed, 23 insertions(+), 16 deletions(-)
-
-diff --git a/src/gevent/tests/test__greenness.py b/src/gevent/tests/test__greenness.py
-index da4fc948e..71392971f 100644
---- a/src/gevent/tests/test__greenness.py
-+++ b/src/gevent/tests/test__greenness.py
-@@ -29,13 +29,15 @@
- import gevent.testing as greentest
- try:
--    import urllib2
--except ImportError:
-     from urllib import request as urllib2
--try:
--    import BaseHTTPServer
--except ImportError:
-     from http import server as BaseHTTPServer
-+    from http.server import SimpleHTTPRequestHandler
-+except ImportError:
-+    # Python 2
-+    import urllib2
-+    import BaseHTTPServer
-+    from SimpleHTTPServer import SimpleHTTPRequestHandler
-+
- import gevent
- from gevent.testing import params
-@@ -47,7 +49,8 @@ class TestGreenness(greentest.TestCase):
-     def setUp(self):
-         server_address = params.DEFAULT_BIND_ADDR_TUPLE
-         BaseHTTPServer.BaseHTTPRequestHandler.protocol_version = "HTTP/1.0"
--        self.httpd = BaseHTTPServer.HTTPServer(server_address, BaseHTTPServer.BaseHTTPRequestHandler)
-+        self.httpd = BaseHTTPServer.HTTPServer(server_address,
-+                                               SimpleHTTPRequestHandler)
-         self.httpd.request_count = 0
-     def tearDown(self):
-@@ -62,10 +65,10 @@ def test_urllib2(self):
-         server = gevent.spawn(self.serve)
-         port = self.httpd.socket.getsockname()[1]
--        with self.assertRaises(urllib2.HTTPError) as exc:
--            urllib2.urlopen('http://127.0.0.1:%s' % port)
--        self.assertEqual(exc.exception.code, 501)
--        server.get(0.01)
-+        rsp = urllib2.urlopen('http://127.0.0.1:%s' % port)
-+        rsp.read()
-+        rsp.close()
-+        server.join()
-         self.assertEqual(self.httpd.request_count, 1)
-#diff --git a/src/gevent/tests/test__socket.py b/src/gevent/tests/test__socket.py
-#index 4a670cdb0..195ef1af5 100644
-#--- a/src/gevent/tests/test__socket.py
-#+++ b/src/gevent/tests/test__socket.py
-#@@ -9,7 +9,7 @@
-# import unittest
-# from functools import wraps
-# 
-#-from gevent import get_hub
-#+from gevent import getcurrent
-# import gevent.testing as greentest
-# 
-# from gevent.testing import six
-#@@ -34,7 +34,7 @@ def errors_are_fatal(*args, **kwargs):
-#             try:
-#                 return target(*args, **kwargs)
-#             except: # pylint:disable=bare-except
-#-                get_hub().throw(*sys.exc_info())
-#+                getcurrent().parent.throw(*sys.exc_info())
-# 
-#         _Thread.__init__(self, target=errors_are_fatal, **kwargs)
-#         self.start()
-#@@ -95,13 +95,16 @@ def accept_and_read():
-#                 conn, _ = self.listener.accept()
-#                 r = conn.makefile(mode='rb')
-#                 read_data.append(r.read())
-#-                r.flush()
-#-                r.close()
-#             finally:
-#-                for f in (conn, r, self.listener):
-#+                # Order matters. On Python 2, if we close the
-#+                # connection before closing the makefile,
-#+                # test__ssl fails because the underlying socket
-#+                # has been deleted.
-#+                for f in (r, conn, self.listener):
-#                     if f is not None:
-#                         f.close()
-# 
-#+
-#         server = Thread(target=accept_and_read)
-#         client = self.create_connection(**client_args)
-# 
-#diff --git a/src/gevent/tests/test__ssl.py b/src/gevent/tests/test__ssl.py
-#index 97b70bd98..537e70773 100644
-#--- a/src/gevent/tests/test__ssl.py
-#+++ b/src/gevent/tests/test__ssl.py
-#@@ -1,3 +1,4 @@
-#+from __future__ import print_function, division, absolute_import
-# from gevent import monkey; monkey.patch_all()
-# import os
-# 
-#@@ -5,7 +6,7 @@
-# import gevent.testing as greentest
-# # Be careful not to have TestTCP as a bare attribute in this module,
-# # even aliased, to avoid running duplicate tests
-#-import test__socket
-#+from gevent.tests import test__socket
-# import ssl
-# 
-# 
-#
-From 158ccf26ff07af1c0737307f67ed118e7a1d6ac1 Mon Sep 17 00:00:00 2001
-From: Jason Madden <jamadden@gmail.com>
-Date: Sat, 7 Sep 2019 09:27:19 -0500
-Subject: [PATCH 9/9] Implement verify_client_post_handshake; appveyor has TLS
- 1.3 now so those tests are running there.
-
----
- CHANGES.rst                        | 2 ++
- src/gevent/_ssl3.py                | 5 +++++
- src/gevent/tests/known_failures.py | 9 +++++++++
- src/gevent/tests/test__socket.py   | 3 ++-
- 4 files changed, 18 insertions(+), 1 deletion(-)
-
-#diff --git a/CHANGES.rst b/CHANGES.rst
-#index 53f4398d2..a4ab7a7ab 100644
-#--- a/CHANGES.rst
-#+++ b/CHANGES.rst
-#@@ -16,6 +16,8 @@
-# 
-# - Improve the way joining the main thread works on Python 3.
-# 
-#+- Implement ``SSLSocket.verify_client_post_handshake()`` when available.
-#+
-# 1.5a1 (2019-05-02)
-# ==================
-# 
-diff --git a/src/gevent/_ssl3.py b/src/gevent/_ssl3.py
-index d3de81034..29988cff0 100644
---- a/src/gevent/_ssl3.py
-+++ b/src/gevent/_ssl3.py
-@@ -678,6 +678,11 @@ def get_channel_binding(self, cb_type="tls-unique"):
-             return None
-         return self._sslobj.tls_unique_cb()
-+    def verify_client_post_handshake(self):
-+        # Only present in 3.7.1+; an attributeerror is alright
-+        if self._sslobj:
-+            return self._sslobj.verify_client_post_handshake()
-+        raise ValueError("No SSL wrapper around " + str(self))
- # Python does not support forward declaration of types
- SSLContext.sslsocket_class = SSLSocket
-diff --git a/src/gevent/tests/known_failures.py b/src/gevent/tests/known_failures.py
-index eb1db0da1..d5f38ba91 100644
---- a/src/gevent/tests/known_failures.py
-+++ b/src/gevent/tests/known_failures.py
-@@ -351,6 +351,15 @@
-     'test__example_webproxy.py',
- ]
-+if APPVEYOR:
-+    # Strange failures sometimes, but only on Python 3.7, reporting
-+    # "ConnectionAbortedError: [WinError 10053] An established
-+    # connection was aborted by the software in your host machine"
-+    # when we've done no such thing. Try running not in parallel
-+    RUN_ALONE += [
-+        'test__ssl.py',
-+        'test__server.py',
-+    ]
- if APPVEYOR or TRAVIS:
-#diff --git a/src/gevent/tests/test__socket.py b/src/gevent/tests/test__socket.py
-#index 195ef1af5..4976d5767 100644
-#--- a/src/gevent/tests/test__socket.py
-#+++ b/src/gevent/tests/test__socket.py
-#@@ -29,12 +29,13 @@ class Thread(_Thread):
-# 
-#     def __init__(self, **kwargs):
-#         target = kwargs.pop('target')
-#+        caller = getcurrent()
-#         @wraps(target)
-#         def errors_are_fatal(*args, **kwargs):
-#             try:
-#                 return target(*args, **kwargs)
-#             except: # pylint:disable=bare-except
-#-                getcurrent().parent.throw(*sys.exc_info())
-#+                caller.throw(*sys.exc_info())
-# 
-#         _Thread.__init__(self, target=errors_are_fatal, **kwargs)
-#         self.start()
---- gevent-1.4.0/src/gevent/thread.py.orig     2019-01-04 12:51:44.000000000 +0100
-+++ gevent-1.4.0/src/gevent/thread.py  2020-01-03 21:14:08.922889769 +0100
-@@ -31,6 +31,8 @@
-                     'exit_thread',
-                     'interrupt_main',
-                     'start_new']
-+    if sys.version_info[:2] >= (3, 8):
-+        __imports__.append('get_native_id')
- error = __thread__.error
- from gevent._compat import PY3
- from gevent._compat import PYPY
---- gevent-1.4.0/src/gevent/_tblib.py.orig     2019-01-04 12:51:44.000000000 +0100
-+++ gevent-1.4.0/src/gevent/_tblib.py  2020-01-03 21:25:28.152543399 +0100
-@@ -198,6 +198,9 @@
-         while current:
-             f_code = current.tb_frame.f_code
-             code = compile('\n' * (current.tb_lineno - 1) + 'raise __traceback_maker', current.tb_frame.f_code.co_filename, 'exec')
--            if PY3:
-+            if hasattr(code, "replace"):
-+                # Python 3.8 and newer
-+                code = code.replace(co_argcount=0, co_freevars=(), co_cellvars=())
-+            elif PY3:
-                 code = CodeType(
-                     0, code.co_kwonlyargcount,
---- gevent-1.4.0/src/gevent/_socketcommon.py.orig      2019-01-04 12:51:44.000000000 +0100
-+++ gevent-1.4.0/src/gevent/_socketcommon.py   2020-01-06 15:00:51.236688228 +0100
-@@ -74,6 +74,12 @@
- from gevent._compat import string_types, integer_types, PY3
- from gevent._util import copy_globals
-+if sys.version_info[:2] >= (3, 8):
-+    __imports__.extend([
-+        'create_server',
-+        'has_dualstack_ipv6'
-+    ])
-+
- is_windows = sys.platform == 'win32'
- is_macos = sys.platform == 'darwin'
index 479996bfde5ec9e618edfc6ff28d99159bd645f4..9a07e48359ce92498ef893ef2cab24de795684f8 100644 (file)
@@ -19,7 +19,7 @@ Summary:      A coroutine-based Python 2 networking library
 Summary(pl.UTF-8):     Biblioteka sieciowa dla Pythona 2 oparta na korutynach
 Name:          python-%{module}
 Version:       1.4.0
-Release:       1
+Release:       2
 Epoch:         1
 License:       MIT
 Group:         Development/Languages
This page took 0.736716 seconds and 4 git commands to generate.