Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-execnet for openSUSE:Factory 
checked in at 2021-02-04 20:23:27
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-execnet (Old)
 and      /work/SRC/openSUSE:Factory/.python-execnet.new.28504 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-execnet"

Thu Feb  4 20:23:27 2021 rev:12 rq:868773 version:1.8.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-execnet/python-execnet.changes    
2019-09-04 08:57:06.947082788 +0200
+++ /work/SRC/openSUSE:Factory/.python-execnet.new.28504/python-execnet.changes 
2021-02-04 20:24:09.754834336 +0100
@@ -1,0 +2,8 @@
+Tue Feb  2 09:57:10 UTC 2021 - Dirk M??ller <dmuel...@suse.com>
+
+- update to 1.8.0:
+  * Dropped support for Python 3.4.
+  * Fixed internal leak that should make ``execnet`` execute remote code in 
the main thread more often
+  * Current working directory is now restored when calling 
``script/socketserver.py``. 
+
+-------------------------------------------------------------------

Old:
----
  execnet-1.7.1.tar.gz

New:
----
  execnet-1.8.0.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-execnet.spec ++++++
--- /var/tmp/diff_new_pack.7r0ZmY/_old  2021-02-04 20:24:10.378835287 +0100
+++ /var/tmp/diff_new_pack.7r0ZmY/_new  2021-02-04 20:24:10.382835292 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package python-execnet
 #
-# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2021 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -18,7 +18,7 @@
 
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
 Name:           python-execnet
-Version:        1.7.1
+Version:        1.8.0
 Release:        0
 Summary:        Rapid multi-Python deployment
 License:        MIT

++++++ execnet-1.7.1.tar.gz -> execnet-1.8.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/execnet-1.7.1/.github/workflows/main.yml 
new/execnet-1.8.0/.github/workflows/main.yml
--- old/execnet-1.7.1/.github/workflows/main.yml        1970-01-01 
01:00:00.000000000 +0100
+++ new/execnet-1.8.0/.github/workflows/main.yml        2021-01-27 
12:18:46.000000000 +0100
@@ -0,0 +1,130 @@
+name: build
+
+on: [push, pull_request]
+
+jobs:
+  build:
+
+    runs-on: ${{ matrix.os }}
+
+    strategy:
+      fail-fast: false
+      matrix:
+        name: [
+            "windows-py27",
+            "windows-py35",
+            "windows-py36",
+            "windows-py37",
+            "windows-py38",
+            "windows-py39",
+
+            "linux-py27",
+            "linux-py35",
+            "linux-py36",
+            "linux-py37",
+            "linux-py38",
+            "linux-py39",
+
+            "linux-pypy2",
+            "linux-pypy3",
+        ]
+        include:
+          - name: "windows-py27"
+            python: "2.7"
+            tox_env: "py27"
+            os: "windows-latest"
+          - name: "windows-py35"
+            python: "3.5"
+            tox_env: "py35"
+            os: "windows-latest"
+          - name: "windows-py36"
+            python: "3.6"
+            tox_env: "py36"
+            os: "windows-latest"
+          - name: "windows-py37"
+            python: "3.7"
+            tox_env: "py37"
+            os: "windows-latest"
+          - name: "windows-py38"
+            python: "3.8"
+            tox_env: "py38"
+            os: "windows-latest"
+          - name: "windows-py39"
+            python: "3.9"
+            tox_env: "py39"
+            os: "windows-latest"
+
+          - name: "linux-py27"
+            python: "2.7"
+            tox_env: "py27"
+            os: "ubuntu-latest"
+          - name: "linux-py35"
+            python: "3.5"
+            tox_env: "py35"
+            os: "ubuntu-latest"
+          - name: "linux-py36"
+            python: "3.6"
+            tox_env: "py36"
+            os: "ubuntu-latest"
+          - name: "linux-py37"
+            python: "3.7"
+            tox_env: "py37"
+            os: "ubuntu-latest"
+          - name: "linux-py38"
+            python: "3.8"
+            tox_env: "py38"
+            os: "ubuntu-latest"
+          - name: "linux-py39"
+            python: "3.9"
+            tox_env: "py39"
+            os: "ubuntu-latest"
+
+          - name: "linux-pypy2"
+            python: "pypy-2.7"
+            tox_env: "pypy2"
+            os: "ubuntu-latest"
+          - name: "linux-pypy3"
+            python: "pypy-3.7"
+            tox_env: "pypy3"
+            os: "ubuntu-latest"
+
+    steps:
+    - uses: actions/checkout@v1
+    - name: Set up Python
+      uses: actions/setup-python@v2
+      with:
+        python-version: ${{ matrix.python }}
+    - name: Install tox
+      run: |
+        python -m pip install --upgrade pip
+        pip install tox
+    - name: Test
+      run: |
+        tox -e ${{ matrix.tox_env }}
+
+  deploy:
+
+    if: github.event_name == 'push' && startsWith(github.event.ref, 
'refs/tags')
+
+    runs-on: ubuntu-latest
+
+    needs: build
+
+    steps:
+    - uses: actions/checkout@v1
+    - name: Set up Python
+      uses: actions/setup-python@v1
+      with:
+        python-version: "3.7"
+    - name: Install wheel
+      run: |
+        python -m pip install --upgrade pip
+        pip install wheel
+    - name: Build package
+      run: |
+        python setup.py sdist bdist_wheel
+    - name: Publish package to PyPI
+      uses: pypa/gh-action-pypi-publish@master
+      with:
+        user: __token__
+        password: ${{ secrets.pypi_token }}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/execnet-1.7.1/.pre-commit-config.yaml 
new/execnet-1.8.0/.pre-commit-config.yaml
--- old/execnet-1.7.1/.pre-commit-config.yaml   2019-08-30 03:03:48.000000000 
+0200
+++ new/execnet-1.8.0/.pre-commit-config.yaml   2021-01-27 12:18:46.000000000 
+0100
@@ -1,24 +1,24 @@
 exclude: doc/en/example/py2py3/test_py2.py
 repos:
 -   repo: https://github.com/python/black
-    rev: 19.3b0
+    rev: 20.8b1
     hooks:
     -   id: black
         args: [--safe, --quiet]
 -   repo: https://github.com/asottile/blacken-docs
-    rev: v1.0.0
+    rev: v1.9.2
     hooks:
     -   id: blacken-docs
         additional_dependencies: [black==19.3b0]
 -   repo: https://github.com/pre-commit/pre-commit-hooks
-    rev: v2.2.3
+    rev: v3.4.0
     hooks:
     -   id: trailing-whitespace
     -   id: end-of-file-fixer
     -   id: fix-encoding-pragma
     -   id: check-yaml
 -   repo: https://github.com/asottile/reorder_python_imports
-    rev: v1.4.0
+    rev: v2.3.6
     hooks:
     -   id: reorder-python-imports
         args: ['--application-directories=execnet']
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/execnet-1.7.1/.travis.yml 
new/execnet-1.8.0/.travis.yml
--- old/execnet-1.7.1/.travis.yml       2019-08-30 03:03:48.000000000 +0200
+++ new/execnet-1.8.0/.travis.yml       1970-01-01 01:00:00.000000000 +0100
@@ -1,79 +0,0 @@
-language: python
-dist: xenial
-
-stages:
-- baseline
-- name: test
-  if: repo = pytest-dev/execnet AND tag IS NOT present
-- name: deploy
-  if: repo = pytest-dev/execnet AND tag IS present
-
-python:
-  - '3.7'
-
-jobs:
-  include:
-    - stage: baseline
-      env: TOXENV=docs
-      python: '3.6'
-    - env: TOXENV=linting
-      python: '3.6'
-    - env: TOXENV=py27
-      python: '2.7'
-    - env: TOXENV=py37
-      python: '3.7'
-
-    - stage: test
-      env: TOXENV=py34
-      python: '3.4'
-    - env: TOXENV=py35
-      python: '3.5'
-    - env: TOXENV=py36
-      python: '3.6'
-    - env: TOXENV=pypy
-      python: 'pypy2.7-6.0'
-    - env: TOXENV=pypy3
-      python: 'pypy3.5-6.0'
-
-    - stage: deploy
-      python: '3.7'
-      install: pip install -U setuptools setuptools_scm
-      script: skip
-      deploy:
-        provider: pypi
-        user: __token__
-        distributions: sdist bdist_wheel
-        skip_upload_docs: true
-        password:
-          secure: 
"RE9SLQM4iivAg6DoSZWEfLovHby96QwgIzGBnGWAF8PucP7TlQcE7wvVRY3pY+n/CuEEnDN9KfIBfNVPK6UTbuobJhA3WTg9YkcnfM0K1RfQdNeHgILsG15iHWlMtvoFVkjPKgg/UuRyppL25+142GoqcIzImuN3yjUKkmsjMq0o1WPXJhLrebyq3MF2JRdyraEkYAG3gnHC6mJqUYyiGOH+5koO9F7OvznGAvp7q/HQJ2oxR87DknyWFHGhmiR0yi5hQ7u2SHUuW/6pzOv+qV7ZB54pSEWON3DkoLfbNocu5RHitojydbYdkXGfxuWHFRDU8c6v+f32cEAATbO2rGY1L+SFeJsWiOx4giFtgRNSvfz/7RVHlrrIBEPXZ8jEEUi+wmU5PgYAitPpdeL37BBSJWaiwdlSgE3jw6YwUmu5QUJ2uuY5rv9HZp9yiQbhiDXhD8U2jc5MK5RNQolhKqcC3JZSyfF+/HSJ1aQ6CboXfhNTkcqikEjAhgJ9ne/PDZKokT4VK5odwPFlZDu5E47X4dBmS+QsSAtxD3/lzaZL+qHA5HF9B6wwsZDQ0aJ11MeIT9WAtiBFNrkTz3wpNj7igb32gOmsZQqhlURBJr8YK0yEDGuzSd6ftqAaFvgE1LtSEhQ5SNTKXm6a0EpqbeRSQKhgpqIkYmS/AjGSYvo="
-        on:
-          tags: true
-          repo: pytest-dev/execnet
-  allow_failures:
-  - env: TOXENV=pypy
-    python: 'pypy2.7-6.0'
-  - env: TOXENV=pypy3
-    python: 'pypy3.5-6.0'
-
-
-matrix:
-  include:
-    - env: TOXENV=docs
-      python: '3.6'
-  allow_failures:
-    - python: 'pypy'
-
-install:
-  - pip install -U pip
-  - pip install -U setuptools setuptools_scm tox
-
-script:
-  - tox
-
-notifications:
-  irc:
-    channels:
-      - "chat.freenode.net#pylib"
-    on_success: change
-    on_failure: change
-    skip_join: true
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/execnet-1.7.1/CHANGELOG.rst 
new/execnet-1.8.0/CHANGELOG.rst
--- old/execnet-1.7.1/CHANGELOG.rst     2019-08-30 03:03:48.000000000 +0200
+++ new/execnet-1.8.0/CHANGELOG.rst     2021-01-27 12:18:46.000000000 +0100
@@ -1,3 +1,20 @@
+1.8.0 (2020-01-27)
+------------------
+
+* Dropped support for Python 3.4.
+
+* `#118 <https://github.com/pytest-dev/execnet/pull/118>`__: Fixed internal 
leak that should make
+  ``execnet`` execute remote code in the main thread more often; previously it 
would sometimes
+  spawn a thread to execute a ``remote_exec`` call, even when the caller
+  didn't issue multiple ``remote_exec`` calls at the same time. Some 
frameworks require code
+  to execute in the main thread, so the previous behavior would break them on 
occasion (see
+  `pytest-dev/pytest-xdist#620 
<https://github.com/pytest-dev/pytest-xdist/issues/620>`__
+  for an example).
+
+* `#115 <https://github.com/pytest-dev/execnet/pull/115>`__: Current working 
directory is now
+  restored when calling ``script/socketserver.py``. The script now also loops 
by default
+  when called from the command-line.
+
 1.7.1 (2019-08-28)
 ------------------
 
@@ -343,7 +360,7 @@
   to let KeyboardInterrupts pass through.
 
 - EXECNET_DEBUG=2 will cause tracing to go to stderr,
-  which with popen slave gateways will relay back
+  which with popen worker gateways will relay back
   tracing to the instantiator process.
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/execnet-1.7.1/HOWTORELEASE.rst 
new/execnet-1.8.0/HOWTORELEASE.rst
--- old/execnet-1.7.1/HOWTORELEASE.rst  2019-08-30 03:03:48.000000000 +0200
+++ new/execnet-1.8.0/HOWTORELEASE.rst  1970-01-01 01:00:00.000000000 +0100
@@ -1,37 +0,0 @@
-=================
-Releasing execnet
-=================
-
-This document describes the steps to make a new ``execnet`` release.
-
-Version
--------
-
-``master`` should always be green and a potential release candidate. 
``execnet`` follows
-semantic versioning, so given that the current version is ``X.Y.Z``, to find 
the next version number
-one needs to look at the ``CHANGELOG.rst`` file:
-
-- If there any new feature, then we must make a new **minor** release: next
-  release will be ``X.Y+1.0``.
-
-- Otherwise it is just a **bug fix** release: ``X.Y.Z+1``.
-
-
-Steps
------
-
-To publish a new release ``X.Y.Z``, the steps are as follows:
-
-#. Create a new branch named ``release-X.Y.Z`` from the latest ``master``.
-
-#. Update the ``CHANGELOG.rst`` file with the new release information.
-
-#. Commit and push the branch for review.
-
-#. Once PR is **green** and **approved**, create and push a tag::
-
-    $ export VERSION=X.Y.Z
-    $ git tag v$VERSION release-$VERSION
-    $ git push g...@github.com:pytest-dev/execnet.git v$VERSION
-
-That will build the package and publish it on ``PyPI`` automatically.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/execnet-1.7.1/PKG-INFO new/execnet-1.8.0/PKG-INFO
--- old/execnet-1.7.1/PKG-INFO  2019-08-30 03:04:03.000000000 +0200
+++ new/execnet-1.8.0/PKG-INFO  2021-01-27 12:18:52.000000000 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: execnet
-Version: 1.7.1
+Version: 1.8.0
 Summary: execnet: rapid multi-Python deployment
 Home-page: https://execnet.readthedocs.io/en/latest/
 Author: holger krekel and others
@@ -23,11 +23,8 @@
         .. image:: https://img.shields.io/pypi/pyversions/execnet.svg
             :target: https://pypi.org/project/execnet/
         
-        .. image:: https://travis-ci.org/pytest-dev/execnet.svg?branch=master
-            :target: https://travis-ci.org/pytest-dev/execnet
-        
-        .. image:: 
https://ci.appveyor.com/api/projects/status/n9qy8df16my4gds9/branch/master?svg=true
-            :target: https://ci.appveyor.com/project/pytestbot/execnet
+        .. image:: 
https://github.com/pytest-dev/execnet/workflows/build/badge.svg
+            :target: 
https://github.com/pytest-dev/execnet/actions?query=workflow%3Abuild
         
         .. image:: https://img.shields.io/badge/code%20style-black-000000.svg
             :target: https://github.com/python/black
@@ -54,9 +51,6 @@
         
         * grouped creation and robust termination of processes
         
-        * well tested between CPython 2.7, 3.4+, Jython 2.5.1 and PyPy 2.2
-          interpreters.
-        
         * interoperable between Windows and Unix-ish systems.
         
         * integrates with different threading models, including standard
@@ -79,11 +73,12 @@
 Classifier: Programming Language :: Python :: 2
 Classifier: Programming Language :: Python :: 2.7
 Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.4
 Classifier: Programming Language :: Python :: 3.5
 Classifier: Programming Language :: Python :: 3.6
 Classifier: Programming Language :: Python :: 3.7
+Classifier: Programming Language :: Python :: 3.8
+Classifier: Programming Language :: Python :: 3.9
 Classifier: Programming Language :: Python :: Implementation :: CPython
 Classifier: Programming Language :: Python :: Implementation :: PyPy
-Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*
+Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*
 Provides-Extra: testing
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/execnet-1.7.1/README.rst new/execnet-1.8.0/README.rst
--- old/execnet-1.7.1/README.rst        2019-08-30 03:03:48.000000000 +0200
+++ new/execnet-1.8.0/README.rst        2021-01-27 12:18:46.000000000 +0100
@@ -16,11 +16,8 @@
 .. image:: https://img.shields.io/pypi/pyversions/execnet.svg
     :target: https://pypi.org/project/execnet/
 
-.. image:: https://travis-ci.org/pytest-dev/execnet.svg?branch=master
-    :target: https://travis-ci.org/pytest-dev/execnet
-
-.. image:: 
https://ci.appveyor.com/api/projects/status/n9qy8df16my4gds9/branch/master?svg=true
-    :target: https://ci.appveyor.com/project/pytestbot/execnet
+.. image:: https://github.com/pytest-dev/execnet/workflows/build/badge.svg
+    :target: 
https://github.com/pytest-dev/execnet/actions?query=workflow%3Abuild
 
 .. image:: https://img.shields.io/badge/code%20style-black-000000.svg
     :target: https://github.com/python/black
@@ -47,9 +44,6 @@
 
 * grouped creation and robust termination of processes
 
-* well tested between CPython 2.7, 3.4+, Jython 2.5.1 and PyPy 2.2
-  interpreters.
-
 * interoperable between Windows and Unix-ish systems.
 
 * integrates with different threading models, including standard
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/execnet-1.7.1/RELEASING.rst 
new/execnet-1.8.0/RELEASING.rst
--- old/execnet-1.7.1/RELEASING.rst     1970-01-01 01:00:00.000000000 +0100
+++ new/execnet-1.8.0/RELEASING.rst     2021-01-27 12:18:46.000000000 +0100
@@ -0,0 +1,37 @@
+=================
+Releasing execnet
+=================
+
+This document describes the steps to make a new ``execnet`` release.
+
+Version
+-------
+
+``master`` should always be green and a potential release candidate. 
``execnet`` follows
+semantic versioning, so given that the current version is ``X.Y.Z``, to find 
the next version number
+one needs to look at the ``CHANGELOG.rst`` file:
+
+- If there any new feature, then we must make a new **minor** release: next
+  release will be ``X.Y+1.0``.
+
+- Otherwise it is just a **bug fix** release: ``X.Y.Z+1``.
+
+
+Steps
+-----
+
+To publish a new release ``X.Y.Z``, the steps are as follows:
+
+#. Create a new branch named ``release-X.Y.Z`` from the latest ``master``.
+
+#. Update the ``CHANGELOG.rst`` file with the new release information.
+
+#. Commit and push the branch for review.
+
+#. Once PR is **green** and **approved**, create and push a tag::
+
+    $ export VERSION=X.Y.Z
+    $ git tag v$VERSION release-$VERSION
+    $ git push g...@github.com:pytest-dev/execnet.git v$VERSION
+
+That will build the package and publish it on ``PyPI`` automatically.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/execnet-1.7.1/appveyor.yml 
new/execnet-1.8.0/appveyor.yml
--- old/execnet-1.7.1/appveyor.yml      2019-08-30 03:03:48.000000000 +0200
+++ new/execnet-1.8.0/appveyor.yml      1970-01-01 01:00:00.000000000 +0100
@@ -1,27 +0,0 @@
-build: false
-environment:
-  matrix:
-  - TOXENV: "py27"
-  - TOXENV: "py34"
-  - TOXENV: "py35"
-  - TOXENV: "py36"
-  - TOXENV: "py37"
-  - TOXENV: "pypy"
-  - TOXENV: "docs"
-
-matrix:
-  allow_failures:
-    - TOXENV: "pypy"
-
-install:
-  - echo Installed Pythons
-  - dir c:\Python*
-
-  - if "%TOXENV%" == "pypy" call scripts\install-pypy.bat
-
-  - C:\Python37\python -m pip install tox
-
-test_script:
-  - C:\Python37\python -m tox
-
-skip_tags: true
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/execnet-1.7.1/doc/basics.rst 
new/execnet-1.8.0/doc/basics.rst
--- old/execnet-1.7.1/doc/basics.rst    2019-08-30 03:03:48.000000000 +0200
+++ new/execnet-1.8.0/doc/basics.rst    2021-01-27 12:18:46.000000000 +0100
@@ -221,7 +221,7 @@
 configure a tracing mechanism:
 
 :EXECNET_DEBUG=1:  write per-process trace-files to ``execnet-debug-PID``
-:EXECNET_DEBUG=2:  perform tracing to stderr (popen-gateway slaves will send 
this to their instantiator)
+:EXECNET_DEBUG=2:  perform tracing to stderr (popen-gateway workers will send 
this to their instantiator)
 
 
 .. _`dumps/loads`:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/execnet-1.7.1/doc/example/sysinfo.py 
new/execnet-1.8.0/doc/example/sysinfo.py
--- old/execnet-1.7.1/doc/example/sysinfo.py    2019-08-30 03:03:48.000000000 
+0200
+++ new/execnet-1.8.0/doc/example/sysinfo.py    2021-01-27 12:18:46.000000000 
+0100
@@ -41,7 +41,7 @@
     for line in path.readlines():
         m = rex.match(line)
         if m is not None:
-            sshname, = m.groups()
+            (sshname,) = m.groups()
             l.append(sshname)
     return l
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/execnet-1.7.1/doc/example/test_debug.rst 
new/execnet-1.8.0/doc/example/test_debug.rst
--- old/execnet-1.7.1/doc/example/test_debug.rst        2019-08-30 
03:03:48.000000000 +0200
+++ new/execnet-1.8.0/doc/example/test_debug.rst        2021-01-27 
12:18:46.000000000 +0100
@@ -6,7 +6,7 @@
 configure the execnet tracing mechanism:
 
 :EXECNET_DEBUG=1:  write per-process trace-files to 
``${TEMPROOT}/execnet-debug-PID``
-:EXECNET_DEBUG=2:  perform tracing to stderr (popen-gateway slaves will send 
this to their instantiator)
+:EXECNET_DEBUG=2:  perform tracing to stderr (popen-gateway workers will send 
this to their instantiator)
 
 Here is a simple example to see what goes on with a simple execution::
 
@@ -18,13 +18,13 @@
 
     [2326] gw0 starting to receive
     [2326] gw0 sent <Message.CHANNEL_EXEC channelid=1 '42'>
-    [2327] creating slavegateway on <execnet.gateway_base.Popen2IO instance at 
0x9f1c20c>
-    [2327] gw0-slave starting to receive
-    [2327] gw0-slave received <Message.CHANNEL_EXEC channelid=1 '42'>
-    [2327] gw0-slave execution starts[1]: '42'
-    [2327] gw0-slave execution finished
-    [2327] gw0-slave sent <Message.CHANNEL_CLOSE channelid=1 ''>
-    [2327] gw0-slave 1 sent channel close message
+    [2327] creating workergateway on <execnet.gateway_base.Popen2IO instance 
at 0x9f1c20c>
+    [2327] gw0-worker starting to receive
+    [2327] gw0-worker received <Message.CHANNEL_EXEC channelid=1 '42'>
+    [2327] gw0-worker execution starts[1]: '42'
+    [2327] gw0-worker execution finished
+    [2327] gw0-worker sent <Message.CHANNEL_CLOSE channelid=1 ''>
+    [2327] gw0-worker 1 sent channel close message
     [2326] gw0 received <Message.CHANNEL_CLOSE channelid=1 ''>
     [2326] gw0 1 channel.__del__
     [2326] === atexit cleanup <Group ['gw0']> ===
@@ -32,12 +32,12 @@
     [2326] gw0 --> sending GATEWAY_TERMINATE
     [2326] gw0 sent <Message.GATEWAY_TERMINATE channelid=0 ''>
     [2326] gw0 joining receiver thread
-    [2327] gw0-slave received <Message.GATEWAY_TERMINATE channelid=0 ''>
-    [2327] gw0-slave putting None to execqueue
-    [2327] gw0-slave io.close_read()
-    [2327] gw0-slave leaving <Thread(receiver, started daemon -1220277392)>
-    [2327] gw0-slave 1 channel.__del__
-    [2327] gw0-slave io.close_write()
-    [2327] gw0-slave slavegateway.serve finished
-    [2327] gw0-slave gateway.join() called while receiverthread already 
finished
+    [2327] gw0-worker received <Message.GATEWAY_TERMINATE channelid=0 ''>
+    [2327] gw0-worker putting None to execqueue
+    [2327] gw0-worker io.close_read()
+    [2327] gw0-worker leaving <Thread(receiver, started daemon -1220277392)>
+    [2327] gw0-worker 1 channel.__del__
+    [2327] gw0-worker io.close_write()
+    [2327] gw0-worker workergateway.serve finished
+    [2327] gw0-worker gateway.join() called while receiverthread already 
finished
     [2326] gw0 leaving <Thread(receiver, started daemon -1221223568)>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/execnet-1.7.1/doc/example/test_proxy.rst 
new/execnet-1.8.0/doc/example/test_proxy.rst
--- old/execnet-1.7.1/doc/example/test_proxy.rst        2019-08-30 
03:03:48.000000000 +0200
+++ new/execnet-1.8.0/doc/example/test_proxy.rst        2021-01-27 
12:18:46.000000000 +0100
@@ -1,15 +1,14 @@
-Managing Proxyed gateways
+Managing Proxied gateways
 ==========================
 
 Simple Proxying
 ----------------
 
 Using the via arg of specs we can create a gateway
-whose io os created on a remote gateway and
-proxyed to the master.
+whose io is created on a remote gateway and proxied to the master.
 
 The simlest use case, is where one creates one master process
-and uses it to controll new slaves and their environment
+and uses it to control new workers and their environment
 
 ::
 
@@ -19,8 +18,8 @@
     >>> master = group.makegateway('popen//id=master')
     >>> master
     <Gateway id='master' receive-live, thread model, 0 active channels>
-    >>> slave = group.makegateway()
-    >>> slave
+    >>> worker = group.makegateway()
+    >>> worker
     <Gateway id='gw0' receive-live, thread model, 0 active channels>
     >>> group
     <Group ['master', 'gw0']>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/execnet-1.7.1/execnet/_version.py 
new/execnet-1.8.0/execnet/_version.py
--- old/execnet-1.7.1/execnet/_version.py       2019-08-30 03:04:03.000000000 
+0200
+++ new/execnet-1.8.0/execnet/_version.py       2021-01-27 12:18:52.000000000 
+0100
@@ -1,4 +1,5 @@
 # coding: utf-8
 # file generated by setuptools_scm
 # don't change, don't track in version control
-version = '1.7.1'
+version = '1.8.0'
+version_tuple = (1, 8, 0)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/execnet-1.7.1/execnet/deprecated.py 
new/execnet-1.8.0/execnet/deprecated.py
--- old/execnet-1.7.1/execnet/deprecated.py     2019-08-30 03:03:48.000000000 
+0200
+++ new/execnet-1.8.0/execnet/deprecated.py     2021-01-27 12:18:46.000000000 
+0100
@@ -8,8 +8,8 @@
 
 
 def PopenGateway(python=None):
-    """ instantiate a gateway to a subprocess
-        started with the given 'python' executable.
+    """instantiate a gateway to a subprocess
+    started with the given 'python' executable.
     """
     APIWARN("1.0.0b4", "use makegateway('popen')")
     spec = execnet.XSpec("popen")
@@ -18,12 +18,12 @@
 
 
 def SocketGateway(host, port):
-    """ This Gateway provides interaction with a remote process
-        by connecting to a specified socket.  On the remote
-        side you need to manually start a small script
-        (py/execnet/script/socketserver.py) that accepts
-        SocketGateway connections or use the experimental
-        new_remote() method on existing gateways.
+    """This Gateway provides interaction with a remote process
+    by connecting to a specified socket.  On the remote
+    side you need to manually start a small script
+    (py/execnet/script/socketserver.py) that accepts
+    SocketGateway connections or use the experimental
+    new_remote() method on existing gateways.
     """
     APIWARN("1.0.0b4", "use makegateway('socket=host:port')")
     spec = execnet.XSpec("socket={}:{}".format(host, port))
@@ -31,9 +31,9 @@
 
 
 def SshGateway(sshaddress, remotepython=None, ssh_config=None):
-    """ instantiate a remote ssh process with the
-        given 'sshaddress' and remotepython version.
-        you may specify an ssh_config file.
+    """instantiate a remote ssh process with the
+    given 'sshaddress' and remotepython version.
+    you may specify an ssh_config file.
     """
     APIWARN("1.0.0b4", "use makegateway('ssh=host')")
     spec = execnet.XSpec("ssh=%s" % sshaddress)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/execnet-1.7.1/execnet/gateway.py 
new/execnet-1.8.0/execnet/gateway.py
--- old/execnet-1.7.1/execnet/gateway.py        2019-08-30 03:03:48.000000000 
+0200
+++ new/execnet-1.8.0/execnet/gateway.py        2021-01-27 12:18:46.000000000 
+0100
@@ -42,7 +42,7 @@
         )
 
     def exit(self):
-        """ trigger gateway exit.  Defer waiting for finishing
+        """trigger gateway exit.  Defer waiting for finishing
         of receiver-thread and subprocess activity to when
         group.terminate() is called.
         """
@@ -75,7 +75,10 @@
         """ return some sys/env information from remote. """
         if update or not hasattr(self, "_cache_rinfo"):
             ch = self.remote_exec(rinfo_source)
-            self._cache_rinfo = RInfo(ch.receive())
+            try:
+                self._cache_rinfo = RInfo(ch.receive())
+            finally:
+                ch.waitclose()
         return self._cache_rinfo
 
     def hasreceiver(self):
@@ -93,20 +96,20 @@
         return RemoteStatus(statusdict)
 
     def remote_exec(self, source, **kwargs):
-        """ return channel object and connect it to a remote
-            execution thread where the given ``source`` executes.
+        """return channel object and connect it to a remote
+        execution thread where the given ``source`` executes.
 
-            * ``source`` is a string: execute source string remotely
-              with a ``channel`` put into the global namespace.
-            * ``source`` is a pure function: serialize source and
-              call function with ``**kwargs``, adding a
-              ``channel`` object to the keyword arguments.
-            * ``source`` is a pure module: execute source of module
-              with a ``channel`` in its global namespace
-
-            In all cases the binding ``__name__='__channelexec__'``
-            will be available in the global namespace of the remotely
-            executing code.
+        * ``source`` is a string: execute source string remotely
+          with a ``channel`` put into the global namespace.
+        * ``source`` is a pure function: serialize source and
+          call function with ``**kwargs``, adding a
+          ``channel`` object to the keyword arguments.
+        * ``source`` is a pure module: execute source of module
+          with a ``channel`` in its global namespace
+
+        In all cases the binding ``__name__='__channelexec__'``
+        will be available in the global namespace of the remotely
+        executing code.
         """
         call_name = None
         file_name = None
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/execnet-1.7.1/execnet/gateway_base.py 
new/execnet-1.8.0/execnet/gateway_base.py
--- old/execnet-1.7.1/execnet/gateway_base.py   2019-08-30 03:03:48.000000000 
+0200
+++ new/execnet-1.8.0/execnet/gateway_base.py   2021-01-27 12:18:46.000000000 
+0100
@@ -187,9 +187,9 @@
 
 
 class Reply(object):
-    """ reply instances provide access to the result
-        of a function execution that got dispatched
-        through WorkerPool.spawn()
+    """reply instances provide access to the result
+    of a function execution that got dispatched
+    through WorkerPool.spawn()
     """
 
     def __init__(self, task, threadmodel):
@@ -198,10 +198,10 @@
         self.running = True
 
     def get(self, timeout=None):
-        """ get the result object from an asynchronous function execution.
-            if the function execution raised an exception,
-            then calling get() will reraise that exception
-            including its traceback.
+        """get the result object from an asynchronous function execution.
+        if the function execution raised an exception,
+        then calling get() will reraise that exception
+        including its traceback.
         """
         self.waitfinish(timeout)
         try:
@@ -228,14 +228,14 @@
 
 
 class WorkerPool(object):
-    """ A WorkerPool allows to spawn function executions
-        to threads, returning a reply object on which you
-        can ask for the result (and get exceptions reraised).
-
-        This implementation allows the main thread to integrate
-        itself into performing function execution through
-        calling integrate_as_primary_thread() which will return
-        when the pool received a trigger_shutdown().
+    """A WorkerPool allows to spawn function executions
+    to threads, returning a reply object on which you
+    can ask for the result (and get exceptions reraised).
+
+    This implementation allows the main thread to integrate
+    itself into performing function execution through
+    calling integrate_as_primary_thread() which will return
+    when the pool received a trigger_shutdown().
     """
 
     def __init__(self, execmodel, hasprimary=False):
@@ -253,7 +253,7 @@
             self._primary_thread_task_ready = None
 
     def integrate_as_primary_thread(self):
-        """ integrate the thread with which we are called as a primary
+        """integrate the thread with which we are called as a primary
         thread for executing functions triggered with spawn().
         """
         assert self.execmodel.backend == "thread", self.execmodel
@@ -303,8 +303,8 @@
         return False
 
     def spawn(self, func, *args, **kwargs):
-        """ return Reply object for the asynchronous dispatch
-            of the given func(*args, **kwargs).
+        """return Reply object for the asynchronous dispatch
+        of the given func(*args, **kwargs).
         """
         reply = Reply((func, args, kwargs), self.execmodel)
         with self._running_lock:
@@ -572,14 +572,14 @@
         self.gateway._trace(self.id, *msg)
 
     def setcallback(self, callback, endmarker=NO_ENDMARKER_WANTED):
-        """ set a callback function for receiving items.
+        """set a callback function for receiving items.
 
-            All already queued items will immediately trigger the callback.
-            Afterwards the callback will execute in the receiver thread
-            for each received data item and calls to ``receive()`` will
-            raise an error.
-            If an endmarker is specified the callback will eventually
-            be called with the endmarker when the channel closes.
+        All already queued items will immediately trigger the callback.
+        Afterwards the callback will execute in the receiver thread
+        for each received data item and calls to ``receive()`` will
+        raise an error.
+        If an endmarker is specified the callback will eventually
+        be called with the endmarker when the channel closes.
         """
         _callbacks = self.gateway._channelfactory._callbacks
         with self.gateway._receivelock:
@@ -650,15 +650,15 @@
     # public API for channel objects
     #
     def isclosed(self):
-        """ return True if the channel is closed. A closed
-            channel may still hold items.
+        """return True if the channel is closed. A closed
+        channel may still hold items.
         """
         return self._closed
 
     def makefile(self, mode="w", proxyclose=False):
-        """ return a file-like object.
-            mode can be 'w' or 'r' for writeable/readable files.
-            if proxyclose is true file.close() will also close the channel.
+        """return a file-like object.
+        mode can be 'w' or 'r' for writeable/readable files.
+        if proxyclose is true file.close() will also close the channel.
         """
         if mode == "w":
             return ChannelFileWrite(channel=self, proxyclose=proxyclose)
@@ -667,10 +667,10 @@
         raise ValueError("mode {!r} not availabe".format(mode))
 
     def close(self, error=None):
-        """ close down this channel with an optional error message.
-            Note that closing of a channel tied to remote_exec happens
-            automatically at the end of execution and cannot
-            be done explicitely.
+        """close down this channel with an optional error message.
+        Note that closing of a channel tied to remote_exec happens
+        automatically at the end of execution and cannot
+        be done explicitely.
         """
         if self._executing:
             raise IOError("cannot explicitly close channel within remote_exec")
@@ -699,7 +699,7 @@
             self.gateway._channelfactory._no_longer_opened(self.id)
 
     def waitclose(self, timeout=None):
-        """ wait until this channel is closed (or the remote side
+        """wait until this channel is closed (or the remote side
         otherwise signalled that no more data was being sent).
         The channel may still hold receiveable items, but not receive
         any more after waitclose() has returned.  Exceptions from executing
@@ -936,7 +936,7 @@
 class BaseGateway(object):
     exc_info = sys.exc_info
     _sysex = sysex
-    id = "<slave>"
+    id = "<worker>"
 
     def __init__(self, io, id, _startcount=2):
         self.execmodel = io.execmodel
@@ -1020,7 +1020,7 @@
         self._receivepool.waitall()
 
 
-class SlaveGateway(BaseGateway):
+class WorkerGateway(BaseGateway):
     def _local_schedulexec(self, channel, sourcetask):
         sourcetask = loads_internal(sourcetask)
         self._execpool.spawn(self.executetask, (channel, sourcetask))
@@ -1061,7 +1061,7 @@
             trace("joining receiver thread")
             self.join()
         except KeyboardInterrupt:
-            # in the slave we can't really do anything sensible
+            # in the worker we can't really do anything sensible
             trace("swallowing keyboardinterrupt, serve finished")
 
     def executetask(self, item):
@@ -1319,7 +1319,7 @@
 
 
 def dumps(obj):
-    """ return a serialized bytestring of the given obj.
+    """return a serialized bytestring of the given obj.
 
     The obj and all contained objects must be of a builtin
     python type (so nested dicts, sets, etc. are all ok but
@@ -1334,7 +1334,7 @@
 
 
 def loads(bytestring, py2str_as_py3str=False, py3str_as_py2str=False):
-    """ return the object as deserialized from the given bytestring.
+    """return the object as deserialized from the given bytestring.
 
     py2str_as_py3str: if true then string (str) objects previously
                       dumped on Python2 will be loaded as Python3
@@ -1354,7 +1354,7 @@
 
 
 def load(io, py2str_as_py3str=False, py3str_as_py2str=False):
-    """ derserialize an object form the specified stream.
+    """derserialize an object form the specified stream.
 
     Behaviour and parameters are otherwise the same as with ``loads``
     """
@@ -1550,5 +1550,5 @@
 
 
 def serve(io, id):
-    trace("creating slavegateway on {!r}".format(io))
-    SlaveGateway(io=io, id=id, _startcount=2).serve()
+    trace("creating workergateway on {!r}".format(io))
+    WorkerGateway(io=io, id=id, _startcount=2).serve()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/execnet-1.7.1/execnet/gateway_bootstrap.py 
new/execnet-1.8.0/execnet/gateway_bootstrap.py
--- old/execnet-1.7.1/execnet/gateway_bootstrap.py      2019-08-30 
03:03:48.000000000 +0200
+++ new/execnet-1.8.0/execnet/gateway_bootstrap.py      2021-01-27 
12:18:46.000000000 +0100
@@ -29,7 +29,7 @@
         "sys.stdout.write('1')",
         "sys.stdout.flush()",
         "execmodel = get_execmodel(%r)" % spec.execmodel,
-        "serve(init_popen_io(execmodel), id='%s-slave')" % spec.id,
+        "serve(init_popen_io(execmodel), id='%s-worker')" % spec.id,
     )
     s = io.read(1)
     assert s == "1".encode("ascii"), repr(s)
@@ -43,7 +43,7 @@
             "execmodel = get_execmodel(%r)" % spec.execmodel,
             "io = init_popen_io(execmodel)",
             "io.write('1'.encode('ascii'))",
-            "serve(io, id='%s-slave')" % spec.id,
+            "serve(io, id='%s-worker')" % spec.id,
         )
         s = io.read(1)
         assert s == "1".encode("ascii")
@@ -67,7 +67,7 @@
         "   execmodel = get_execmodel('thread')",
         "io = SocketIO(clientsock, execmodel)",
         "io.write('1'.encode('ascii'))",
-        "serve(io, id='%s-slave')" % id,
+        "serve(io, id='%s-worker')" % id,
     )
     s = io.read(1)
     assert s == "1".encode("ascii")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/execnet-1.7.1/execnet/gateway_io.py 
new/execnet-1.8.0/execnet/gateway_io.py
--- old/execnet-1.7.1/execnet/gateway_io.py     2019-08-30 03:03:48.000000000 
+0200
+++ new/execnet-1.8.0/execnet/gateway_io.py     2021-01-27 12:18:46.000000000 
+0100
@@ -142,7 +142,7 @@
 
 
 class ProxyIO(object):
-    """ A Proxy IO object allows to instantiate a Gateway
+    """A Proxy IO object allows to instantiate a Gateway
     through another "via" gateway.  A master:ProxyIO object
     provides an IO object effectively connected to the sub
     via the forwarder.  To achieve this, master:ProxyIO interacts
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/execnet-1.7.1/execnet/gateway_socket.py 
new/execnet-1.8.0/execnet/gateway_socket.py
--- old/execnet-1.7.1/execnet/gateway_socket.py 2019-08-30 03:03:48.000000000 
+0200
+++ new/execnet-1.8.0/execnet/gateway_socket.py 2021-01-27 12:18:46.000000000 
+0100
@@ -54,8 +54,8 @@
 
 
 def start_via(gateway, hostport=None):
-    """ return a host, port tuple,
-        after instanciating a socketserver on the given gateway
+    """return a host, port tuple,
+    after instanciating a socketserver on the given gateway
     """
     if hostport is None:
         host, port = ("localhost", 0)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/execnet-1.7.1/execnet/multi.py 
new/execnet-1.8.0/execnet/multi.py
--- old/execnet-1.7.1/execnet/multi.py  2019-08-30 03:03:48.000000000 +0200
+++ new/execnet-1.8.0/execnet/multi.py  2021-01-27 12:18:46.000000000 +0100
@@ -25,7 +25,7 @@
     defaultspec = "popen"
 
     def __init__(self, xspecs=(), execmodel="thread"):
-        """ initialize group and make gateways as specified.
+        """initialize group and make gateways as specified.
         execmodel can be 'thread' or 'eventlet'.
         """
         self._gateways = []
@@ -51,7 +51,7 @@
         return self._remote_execmodel
 
     def set_execmodel(self, execmodel, remote_execmodel=None):
-        """ Set the execution model for local and remote site.
+        """Set the execution model for local and remote site.
 
         execmodel can be one of "thread" or "eventlet" (XXX gevent).
         It determines the execution model for any newly created gateway.
@@ -188,7 +188,7 @@
         self.terminate(timeout=1.0)
 
     def terminate(self, timeout=None):
-        """ trigger exit of member gateways and wait for termination
+        """trigger exit of member gateways and wait for termination
         of member gateways and associated subprocesses.  After waiting
         timeout seconds try to to kill local sub processes of popen-
         and ssh-gateways.  Timeout defaults to None meaning
@@ -223,8 +223,8 @@
             self._gateways_to_join[:] = []
 
     def remote_exec(self, source, **kwargs):
-        """ remote_exec source on all member gateways and return
-            MultiChannel connecting to all sub processes.
+        """remote_exec source on all member gateways and return
+        MultiChannel connecting to all sub processes.
         """
         channels = []
         for gw in self:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/execnet-1.7.1/execnet/rsync.py 
new/execnet-1.8.0/execnet/rsync.py
--- old/execnet-1.7.1/execnet/rsync.py  2019-08-30 03:03:48.000000000 +0200
+++ new/execnet-1.8.0/execnet/rsync.py  2021-01-27 12:18:46.000000000 +0100
@@ -17,13 +17,13 @@
 
 
 class RSync(object):
-    """ This class allows to send a directory structure (recursively)
-        to one or multiple remote filesystems.
+    """This class allows to send a directory structure (recursively)
+    to one or multiple remote filesystems.
 
-        There is limited support for symlinks, which means that symlinks
-        pointing to the sourcetree will be send "as is" while external
-        symlinks will be just copied (regardless of existance of such
-        a path on remote side).
+    There is limited support for symlinks, which means that symlinks
+    pointing to the sourcetree will be send "as is" while external
+    symlinks will be just copied (regardless of existance of such
+    a path on remote side).
     """
 
     def __init__(self, sourcedir, callback=None, verbose=True):
@@ -52,8 +52,7 @@
         channel.send(42)
 
     def _done(self, channel):
-        """ Call all callbacks
-        """
+        """Call all callbacks"""
         finishedcallback = self._channels.pop(channel)
         if finishedcallback:
             finishedcallback()
@@ -66,8 +65,7 @@
             self._callback("list", s, channel)
 
     def _send_item(self, channel, data):
-        """ Send one item
-        """
+        """Send one item"""
         modified_rel_path, checksum = data
         modifiedpath = os.path.join(self._sourcedir, *modified_rel_path)
         try:
@@ -100,7 +98,7 @@
             print("{} <= {}".format(gateway, modified_rel_path))
 
     def send(self, raises=True):
-        """ Sends a sourcedir to all added targets. Flag indicates
+        """Sends a sourcedir to all added targets. Flag indicates
         whether to raise an error or return in case of lack of
         targets
         """
@@ -143,8 +141,8 @@
                     assert "Unknown command %s" % command
 
     def add_target(self, gateway, destdir, finishedcallback=None, **options):
-        """ Adds a remote target specified via a gateway
-            and a remote destination directory.
+        """Adds a remote target specified via a gateway
+        and a remote destination directory.
         """
         for name in options:
             assert name in ("delete",)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/execnet-1.7.1/execnet/script/socketserver.py 
new/execnet-1.8.0/execnet/script/socketserver.py
--- old/execnet-1.7.1/execnet/script/socketserver.py    2019-08-30 
03:03:48.000000000 +0200
+++ new/execnet-1.8.0/execnet/script/socketserver.py    2021-01-27 
12:18:46.000000000 +0100
@@ -94,6 +94,7 @@
 
 
 def startserver(serversock, loop=False):
+    execute_path = os.getcwd()
     try:
         while 1:
             try:
@@ -108,6 +109,7 @@
                 else:
                     excinfo = sys.exc_info()
                     print_("got exception", excinfo[1])
+            os.chdir(execute_path)
             if not loop:
                 break
     finally:
@@ -126,7 +128,8 @@
 
     execmodel = get_execmodel("thread")
     serversock = bind_and_listen(hostport, execmodel)
-    startserver(serversock, loop=False)
+    startserver(serversock, loop=True)
+
 elif __name__ == "__channelexec__":
     chan = globals()["channel"]
     execmodel = chan.gateway.execmodel
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/execnet-1.7.1/execnet/xspec.py 
new/execnet-1.8.0/execnet/xspec.py
--- old/execnet-1.7.1/execnet/xspec.py  2019-08-30 03:03:48.000000000 +0200
+++ new/execnet-1.8.0/execnet/xspec.py  2021-01-27 12:18:46.000000000 +0100
@@ -5,12 +5,12 @@
 
 
 class XSpec:
-    """ Execution Specification: key1=value1//key2=value2 ...
-        * keys need to be unique within the specification scope
-        * neither key nor value are allowed to contain "//"
-        * keys are not allowed to contain "="
-        * keys are not allowed to start with underscore
-        * if no "=value" is given, assume a boolean True value
+    """Execution Specification: key1=value1//key2=value2 ...
+    * keys need to be unique within the specification scope
+    * neither key nor value are allowed to contain "//"
+    * keys are not allowed to contain "="
+    * keys are not allowed to start with underscore
+    * if no "=value" is given, assume a boolean True value
     """
 
     # XXX allow customization, for only allow specific key names
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/execnet-1.7.1/execnet.egg-info/PKG-INFO 
new/execnet-1.8.0/execnet.egg-info/PKG-INFO
--- old/execnet-1.7.1/execnet.egg-info/PKG-INFO 2019-08-30 03:04:03.000000000 
+0200
+++ new/execnet-1.8.0/execnet.egg-info/PKG-INFO 2021-01-27 12:18:52.000000000 
+0100
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: execnet
-Version: 1.7.1
+Version: 1.8.0
 Summary: execnet: rapid multi-Python deployment
 Home-page: https://execnet.readthedocs.io/en/latest/
 Author: holger krekel and others
@@ -23,11 +23,8 @@
         .. image:: https://img.shields.io/pypi/pyversions/execnet.svg
             :target: https://pypi.org/project/execnet/
         
-        .. image:: https://travis-ci.org/pytest-dev/execnet.svg?branch=master
-            :target: https://travis-ci.org/pytest-dev/execnet
-        
-        .. image:: 
https://ci.appveyor.com/api/projects/status/n9qy8df16my4gds9/branch/master?svg=true
-            :target: https://ci.appveyor.com/project/pytestbot/execnet
+        .. image:: 
https://github.com/pytest-dev/execnet/workflows/build/badge.svg
+            :target: 
https://github.com/pytest-dev/execnet/actions?query=workflow%3Abuild
         
         .. image:: https://img.shields.io/badge/code%20style-black-000000.svg
             :target: https://github.com/python/black
@@ -54,9 +51,6 @@
         
         * grouped creation and robust termination of processes
         
-        * well tested between CPython 2.7, 3.4+, Jython 2.5.1 and PyPy 2.2
-          interpreters.
-        
         * interoperable between Windows and Unix-ish systems.
         
         * integrates with different threading models, including standard
@@ -79,11 +73,12 @@
 Classifier: Programming Language :: Python :: 2
 Classifier: Programming Language :: Python :: 2.7
 Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.4
 Classifier: Programming Language :: Python :: 3.5
 Classifier: Programming Language :: Python :: 3.6
 Classifier: Programming Language :: Python :: 3.7
+Classifier: Programming Language :: Python :: 3.8
+Classifier: Programming Language :: Python :: 3.9
 Classifier: Programming Language :: Python :: Implementation :: CPython
 Classifier: Programming Language :: Python :: Implementation :: PyPy
-Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*
+Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*
 Provides-Extra: testing
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/execnet-1.7.1/execnet.egg-info/SOURCES.txt 
new/execnet-1.8.0/execnet.egg-info/SOURCES.txt
--- old/execnet-1.7.1/execnet.egg-info/SOURCES.txt      2019-08-30 
03:04:03.000000000 +0200
+++ new/execnet-1.8.0/execnet.egg-info/SOURCES.txt      2021-01-27 
12:18:52.000000000 +0100
@@ -1,15 +1,14 @@
 .gitignore
 .pre-commit-config.yaml
-.travis.yml
 CHANGELOG.rst
-HOWTORELEASE.rst
 ISSUES.txt
 LICENSE
 README.rst
-appveyor.yml
+RELEASING.rst
 setup.cfg
 setup.py
 tox.ini
+.github/workflows/main.yml
 doc/Makefile
 doc/__init__.py
 doc/basics.rst
@@ -74,7 +73,6 @@
 testing/test_basics.py
 testing/test_channel.py
 testing/test_compatibility_regressions.py
-testing/test_fixes.py
 testing/test_gateway.py
 testing/test_multi.py
 testing/test_rsync.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/execnet-1.7.1/setup.py new/execnet-1.8.0/setup.py
--- old/execnet-1.7.1/setup.py  2019-08-30 03:03:48.000000000 +0200
+++ new/execnet-1.8.0/setup.py  2021-01-27 12:18:46.000000000 +0100
@@ -26,15 +26,16 @@
             "Programming Language :: Python :: 2",
             "Programming Language :: Python :: 2.7",
             "Programming Language :: Python :: 3",
-            "Programming Language :: Python :: 3.4",
             "Programming Language :: Python :: 3.5",
             "Programming Language :: Python :: 3.6",
             "Programming Language :: Python :: 3.7",
+            "Programming Language :: Python :: 3.8",
+            "Programming Language :: Python :: 3.9",
             "Programming Language :: Python :: Implementation :: CPython",
             "Programming Language :: Python :: Implementation :: PyPy",
         ],
         packages=["execnet", "execnet.script"],
-        python_requires=">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*",
+        python_requires=">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*",
         install_requires=["apipkg>=1.4"],
         extras_require={"testing": ["pre-commit"]},
         setup_requires=["setuptools_scm"],
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/execnet-1.7.1/testing/test_basics.py 
new/execnet-1.8.0/testing/test_basics.py
--- old/execnet-1.7.1/testing/test_basics.py    2019-08-30 03:03:48.000000000 
+0200
+++ new/execnet-1.8.0/testing/test_basics.py    2021-01-27 12:18:46.000000000 
+0100
@@ -282,7 +282,7 @@
 def test_exectask(execmodel):
     io = py.io.BytesIO()
     io.execmodel = execmodel
-    gw = gateway_base.SlaveGateway(io, id="something")
+    gw = gateway_base.WorkerGateway(io, id="something")
     ch = PseudoChannel()
     gw.executetask((ch, ("raise ValueError()", None, {})))
     assert "ValueError" in str(ch._closed[0])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/execnet-1.7.1/testing/test_fixes.py 
new/execnet-1.8.0/testing/test_fixes.py
--- old/execnet-1.7.1/testing/test_fixes.py     2019-08-30 03:03:48.000000000 
+0200
+++ new/execnet-1.8.0/testing/test_fixes.py     1970-01-01 01:00:00.000000000 
+0100
@@ -1,45 +0,0 @@
-# -*- coding: utf-8 -*-
-import sys
-
-import pytest
-from execnet import Group
-from execnet.gateway_bootstrap import fix_pid_for_jython_popen
-
-
-def test_jython_bootstrap_not_on_remote():
-    group = Group()
-    try:
-        group.makegateway("popen//id=via")
-        group.makegateway("popen//via=via")
-    finally:
-        group.terminate(timeout=1.0)
-
-
-@pytest.mark.xfail(
-    condition=hasattr(sys, "pypy_version_info") and 
sys.platform.startswith("win"),
-    reason="failing on Windows on PyPy (#63)",
-)
-def test_jython_bootstrap_fix():
-    group = Group()
-    gw = group.makegateway("popen")
-    popen = gw._io.popen
-    real_pid = popen.pid
-    try:
-        # nothing happens when calling it on a normal seyup
-        fix_pid_for_jython_popen(gw)
-        assert popen.pid == real_pid
-
-        # if there is no pid for a popen gw, restore
-        popen.pid = None
-        fix_pid_for_jython_popen(gw)
-        assert popen.pid == real_pid
-
-        # if there is no pid for other gw, ignore - they are remote
-        gw.spec.popen = False
-        popen.pid = None
-        fix_pid_for_jython_popen(gw)
-        assert popen.pid is None
-
-    finally:
-        popen.pid = real_pid
-        group.terminate(timeout=1)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/execnet-1.7.1/testing/test_gateway.py 
new/execnet-1.8.0/testing/test_gateway.py
--- old/execnet-1.7.1/testing/test_gateway.py   2019-08-30 03:03:48.000000000 
+0200
+++ new/execnet-1.8.0/testing/test_gateway.py   2021-01-27 12:18:46.000000000 
+0100
@@ -470,14 +470,14 @@
         fn = gw.remote_exec(
             "import execnet;channel.send(execnet.gateway_base.fn)"
         ).receive()
-        slavefile = py.path.local(fn)
-        assert slavefile.check()
-        slave_line = "creating slavegateway"
-        for line in slavefile.readlines():
-            if slave_line in line:
+        workerfile = py.path.local(fn)
+        assert workerfile.check()
+        worker_line = "creating workergateway"
+        for line in workerfile.readlines():
+            if worker_line in line:
                 break
         else:
-            py.test.fail("did not find {!r} in tracefile".format(slave_line))
+            py.test.fail("did not find {!r} in tracefile".format(worker_line))
         gw.exit()
 
     @skip_win_pypy
@@ -487,8 +487,8 @@
         gw = makegateway("popen")
         pid = gw.remote_exec("import os ; channel.send(os.getpid())").receive()
         out, err = capfd.readouterr()
-        slave_line = "[%s] creating slavegateway" % pid
-        assert slave_line in err
+        worker_line = "[%s] creating workergateway" % pid
+        assert worker_line in err
         gw.exit()
 
     def test_no_tracing_by_default(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/execnet-1.7.1/testing/test_multi.py 
new/execnet-1.8.0/testing/test_multi.py
--- old/execnet-1.7.1/testing/test_multi.py     2019-08-30 03:03:48.000000000 
+0200
+++ new/execnet-1.8.0/testing/test_multi.py     2021-01-27 12:18:46.000000000 
+0100
@@ -221,7 +221,7 @@
     def test_terminate_with_proxying(self):
         group = Group()
         group.makegateway("popen//id=master")
-        group.makegateway("popen//via=master//id=slave")
+        group.makegateway("popen//via=master//id=worker")
         group.terminate(1.0)
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/execnet-1.7.1/testing/test_serializer.py 
new/execnet-1.8.0/testing/test_serializer.py
--- old/execnet-1.7.1/testing/test_serializer.py        2019-08-30 
03:03:48.000000000 +0200
+++ new/execnet-1.8.0/testing/test_serializer.py        2021-01-27 
12:18:46.000000000 +0100
@@ -1,4 +1,5 @@
 # -*- coding: utf-8 -*-
+import os
 import subprocess
 import sys
 import tempfile
@@ -148,6 +149,14 @@
 
 @py.test.mark.parametrize(["tp_name", "repr"], simple_tests)
 def test_simple(tp_name, repr, dump, load):
+    if (
+        sys.platform.startswith("win")
+        and os.environ.get("GITHUB_ACTIONS", "") == "true"
+    ):
+        pytest.skip(
+            "GitHub Actions on Windows doesn't support Python 2 and 3 at the 
same time."
+        )
+
     p = dump(repr)
     tp, v = load(p)
     assert tp == tp_name
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/execnet-1.7.1/testing/test_termination.py 
new/execnet-1.8.0/testing/test_termination.py
--- old/execnet-1.7.1/testing/test_termination.py       2019-08-30 
03:03:48.000000000 +0200
+++ new/execnet-1.8.0/testing/test_termination.py       2021-01-27 
12:18:46.000000000 +0100
@@ -15,7 +15,7 @@
 )
 
 
-def test_exit_blocked_slave_execution_gateway(anypython, makegateway, pool):
+def test_exit_blocked_worker_execution_gateway(anypython, makegateway, pool):
     gateway = makegateway("popen//python=%s" % anypython)
     gateway.remote_exec(
         """
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/execnet-1.7.1/tox.ini new/execnet-1.8.0/tox.ini
--- old/execnet-1.7.1/tox.ini   2019-08-30 03:03:48.000000000 +0200
+++ new/execnet-1.8.0/tox.ini   2021-01-27 12:18:46.000000000 +0100
@@ -5,6 +5,7 @@
 deps=
     pytest
     pytest-timeout
+passenv = GITHUB_ACTIONS
 commands=
     pytest {posargs:testing}
 

Reply via email to