From 5efd7542fe369eaaff116c0a900bbd812e2b0ca40323e33ce5d686e53a12cde7 Mon Sep 17 00:00:00 2001 From: Steve Kowalik Date: Wed, 17 Jun 2020 08:47:54 +0000 Subject: [PATCH] - Update to 1.13.1: * regression fix if `_fg=False` [#520](https://github.com/amoffat/sh/issues/520) * minor Travis CI fixes [#492](https://github.com/amoffat/sh/pull/492) * bugfix for boolean long options not respecting `_long_prefix` [#488](https://github.com/amoffat/sh/pull/488) * fix deprecation warning on Python 3.6 regexes [#482](https://github.com/amoffat/sh/pull/482) * `_pass_fds` and `_close_fds` special kwargs for controlling file descriptor inheritance in child. * more efficiently closing inherited fds [#406](https://github.com/amoffat/sh/issues/406) * bugfix where passing invalid dictionary to `_env` will cause a mysterious child 255 exit code. [#497](https://github.com/amoffat/sh/pull/497) * bugfix where `_in` using 0 or `sys.stdin` wasn't behaving like a TTY, if it was in fact a TTY. [#514](https://github.com/amoffat/sh/issues/514) * bugfix where `help(sh)` raised an exception [#455](https://github.com/amoffat/sh/issues/455) * bugfix fixing broken interactive ssh tutorial from docs * change to automatic tty merging into a single pty if `_tty_in=True` and `_tty_out=True` * introducing `_unify_ttys`, default False, which allows explicit tty merging into single pty * contrib command for `ssh` connections requiring passwords * performance fix for polling output too fast when using `_iter` [#462](https://github.com/amoffat/sh/issues/462) * execution contexts can now be used in python shell [#466](https://github.com/amoffat/sh/pull/466) * bugfix `ErrorReturnCode` instances can now be pickled * bugfix passing empty string or `None` for `_in` hanged [#427](https://github.com/amoffat/sh/pull/427) * bugfix where passing a filename or file-like object to `_out` wasn't using os.dup2 [#449](https://github.com/amoffat/sh/issues/449) * regression make `_fg` work with `_cwd` again [#330](https://github.com/amoffat/sh/issues/330) * an invalid `_cwd` now raises a `ForkException` not an `OSError`. * AIX support [#477](https://github.com/amoffat/sh/issues/477) * added a `timeout=None` param to `RunningCommand.wait()` [#515](https://github.com/amoffat/sh/issues/515) - Re-enable tests. - Refresh no-coverage.patch, fix-test_general_signal.diff and fix-test_signal_group.diff - Add fix-sleep-path-in-test.patch to fix a test failure. - Drop no longer required patches, 0001-Fix-tests-for-the-drop-the-unversion-python.patch, always-use-fully-versioned-python-command-in-tests.patch and pep-0538-test-fix.patch OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-sh?expand=0&rev=24 --- ...ts-for-the-drop-the-unversion-python.patch | 29 ------- ...ly-versioned-python-command-in-tests.patch | 77 ------------------- fix-sleep-path-in-test.patch | 13 ++++ fix-test_general_signal.diff | 19 ++--- fix-test_signal_group.diff | 12 +-- no-coverage.patch | 47 ++++++----- pep-0538-test-fix.patch | 50 ------------ python-sh.changes | 35 +++++++++ python-sh.spec | 18 ++--- sh-1.12.14.tar.gz | 3 - sh-1.13.1.tar.gz | 3 + 11 files changed, 95 insertions(+), 211 deletions(-) delete mode 100644 0001-Fix-tests-for-the-drop-the-unversion-python.patch delete mode 100644 always-use-fully-versioned-python-command-in-tests.patch create mode 100644 fix-sleep-path-in-test.patch delete mode 100644 pep-0538-test-fix.patch delete mode 100644 sh-1.12.14.tar.gz create mode 100644 sh-1.13.1.tar.gz diff --git a/0001-Fix-tests-for-the-drop-the-unversion-python.patch b/0001-Fix-tests-for-the-drop-the-unversion-python.patch deleted file mode 100644 index b2ffa36..0000000 --- a/0001-Fix-tests-for-the-drop-the-unversion-python.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 392a0471ed19d71a226442270127a9414ccc7908 Mon Sep 17 00:00:00 2001 -From: Pierre-Yves Chibon -Date: Tue, 24 Jul 2018 17:39:58 +0200 -Subject: [PATCH] Fix tests for the drop the unversion python - -Signed-off-by: Pierre-Yves Chibon ---- - test.py | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - -diff --git a/test.py b/test.py -index 68ef40c..71994fa 100644 ---- a/test.py -+++ b/test.py -@@ -3007,7 +3007,10 @@ class ExecutionContextTests(unittest.TestCase): - import sh - _sh = sh() - omg = _sh -- from omg import python -+ if IS_PY2: -+ from omg import python2 -+ else: -+ from omg import python3 - - def test_importer_only_works_with_sh(self): - def unallowed_import(): --- -2.14.4 - diff --git a/always-use-fully-versioned-python-command-in-tests.patch b/always-use-fully-versioned-python-command-in-tests.patch deleted file mode 100644 index 283cfff..0000000 --- a/always-use-fully-versioned-python-command-in-tests.patch +++ /dev/null @@ -1,77 +0,0 @@ -From 94774d2574668aa9f7bc775cc13087a7aed03f12 Mon Sep 17 00:00:00 2001 -From: Carl George -Date: Wed, 20 Jun 2018 11:02:01 -0500 -Subject: [PATCH] always use fully versioned python command in tests - ---- - test.py | 18 ++++++++++-------- - 1 file changed, 10 insertions(+), 8 deletions(-) - -diff --git a/test.py b/test.py -index 68ef40c..ef4f589 100644 ---- a/test.py -+++ b/test.py -@@ -93,13 +93,13 @@ def append_module_path(env, m): - ioStringIO = StringIO - from io import BytesIO as cStringIO - iocStringIO = cStringIO -- python = sh.Command(sh.which("python%d.%d" % sys.version_info[:2])) - else: - from StringIO import StringIO - from cStringIO import StringIO as cStringIO - from io import StringIO as ioStringIO - from io import BytesIO as iocStringIO -- python = sh.python -+ -+system_python = sh.Command(sh.which("python%d.%d" % sys.version_info[:2])) - - THIS_DIR = dirname(os.path.abspath(__file__)) - -@@ -108,7 +108,7 @@ def append_module_path(env, m): - # module, and not the system one - baked_env = os.environ.copy() - append_module_path(baked_env, sh) --python = python.bake(_env=baked_env) -+python = system_python.bake(_env=baked_env) - - - if hasattr(logging, 'NullHandler'): -@@ -1634,10 +1634,10 @@ def test_cmd_eq(self): - - def test_fg(self): - py = create_tmp_test("exit(0)") -- # notice we're using `sh.python`, and not `python`. this is because -+ # notice we're using `system_python`, and not `python`. this is because - # `python` has an env baked into it, and we want `_env` to be None for - # coverage -- sh.python(py.name, _fg=True) -+ system_python(py.name, _fg=True) - - def test_fg_env(self): - py = create_tmp_test(""" -@@ -2058,8 +2058,10 @@ def test_signal_group(self): - """) - - parent = create_tmp_test(""" -+import sys - import sh --p = sh.python("{child_file}", _bg=True, _new_session=False) -+system_python = sh.Command(sh.which("python%d.%d" % sys.version_info[:2])) -+p = system_python("{child_file}", _bg=True, _new_session=False) - print(p.pid) - print(p.process.pgid) - p.wait() -@@ -2875,11 +2877,11 @@ def test_threaded_with_contexts(self): - def f1(): - with p1: - time.sleep(1) -- results[0] = str(sh.python("one")) -+ results[0] = str(system_python("one")) - - def f2(): - with p2: -- results[1] = str(sh.python("two")) -+ results[1] = str(system_python("two")) - - t1 = threading.Thread(target=f1) - t1.start() diff --git a/fix-sleep-path-in-test.patch b/fix-sleep-path-in-test.patch new file mode 100644 index 0000000..5cff187 --- /dev/null +++ b/fix-sleep-path-in-test.patch @@ -0,0 +1,13 @@ +Index: sh-1.13.1/test.py +=================================================================== +--- sh-1.13.1.orig/test.py ++++ sh-1.13.1/test.py +@@ -1974,7 +1974,7 @@ sys.stdout.write("line1") + try: + sh.sleep(sleep_for, _timeout=timeout).wait() + except sh.TimeoutException as e: +- self.assertEqual(e.full_cmd, '/bin/sleep 3') ++ self.assertEqual(e.full_cmd, '/usr/bin/sleep 3') + else: + self.fail("no timeout exception") + elapsed = time() - started diff --git a/fix-test_general_signal.diff b/fix-test_general_signal.diff index 7405ab1..d02be6a 100644 --- a/fix-test_general_signal.diff +++ b/fix-test_general_signal.diff @@ -1,8 +1,8 @@ -Index: sh-1.12.14/test.py +Index: sh-1.13.1/test.py =================================================================== ---- sh-1.12.14.orig/test.py -+++ sh-1.12.14/test.py -@@ -1374,10 +1374,9 @@ for i in range(5): +--- sh-1.13.1.orig/test.py ++++ sh-1.13.1/test.py +@@ -1449,10 +1449,9 @@ for i in range(5): self.assertTrue("4" not in stdout) def test_general_signal(self): @@ -14,16 +14,7 @@ Index: sh-1.12.14/test.py import sys import os import time -@@ -1386,7 +1385,7 @@ import signal - def sig_handler(sig, frame): - print(10) - exit(0) -- -+ - signal.signal(signal.SIGINT, sig_handler) - - for i in range(5): -@@ -1403,7 +1402,7 @@ for i in range(5): +@@ -1478,7 +1477,7 @@ for i in range(5): process.signal(SIGINT) return True diff --git a/fix-test_signal_group.diff b/fix-test_signal_group.diff index 8a0f1f9..bf2d2e1 100644 --- a/fix-test_signal_group.diff +++ b/fix-test_signal_group.diff @@ -1,14 +1,14 @@ -Index: sh-1.12.14/test.py +Index: sh-1.13.1/test.py =================================================================== ---- sh-1.12.14.orig/test.py -+++ sh-1.12.14/test.py +--- sh-1.13.1.orig/test.py ++++ sh-1.13.1/test.py @@ -1,4 +1,4 @@ -# -*- coding: utf8 -*- +# -*- coding: utf-8 -*- import sys import os -@@ -2048,7 +2048,8 @@ time.sleep(3) +@@ -2174,7 +2174,8 @@ time.sleep(3) """) parent = create_tmp_test(""" @@ -16,5 +16,5 @@ Index: sh-1.12.14/test.py +import os, sys +sys.path.insert(0, os.getcwd()) import sh - system_python = sh.Command(sh.which("python%d.%d" % sys.version_info[:2])) - p = system_python("{child_file}", _bg=True, _new_session=False) + python = sh.Command(sys.executable) + p = python("{child_file}", _bg=True, _new_session=False) diff --git a/no-coverage.patch b/no-coverage.patch index 094293b..c6e5f6d 100644 --- a/no-coverage.patch +++ b/no-coverage.patch @@ -1,9 +1,10 @@ -diff -Naurp sh-1.12.14.orig/sh.py sh-1.12.14/sh.py ---- sh-1.12.14.orig/sh.py 2017-06-06 21:51:42.000000000 -0500 -+++ sh-1.12.14/sh.py 2017-06-07 08:49:59.350791975 -0500 -@@ -3519,14 +3519,9 @@ if __name__ == "__main__": # pragma: no +Index: sh-1.13.1/sh.py +=================================================================== +--- sh-1.13.1.orig/sh.py ++++ sh-1.13.1/sh.py +@@ -3785,14 +3785,9 @@ if __name__ == "__main__": # pragma: no - if action in ("test", "travis"): + if action in ("test", "travis", "tox"): import test - coverage = None - if test.HAS_UNICODE_LITERAL: @@ -16,10 +17,11 @@ diff -Naurp sh-1.12.14.orig/sh.py sh-1.12.14/sh.py # if we're testing locally, run all versions of python on the system if action == "test": -diff -Naurp sh-1.12.14.orig/test.py sh-1.12.14/test.py ---- sh-1.12.14.orig/test.py 2017-06-06 21:51:42.000000000 -0500 -+++ sh-1.12.14/test.py 2017-06-07 08:49:59.351791993 -0500 -@@ -6,31 +6,6 @@ IS_PY3 = sys.version_info[0] == 3 +Index: sh-1.13.1/test.py +=================================================================== +--- sh-1.13.1.orig/test.py ++++ sh-1.13.1/test.py +@@ -6,34 +6,6 @@ IS_PY3 = sys.version_info[0] == 3 IS_PY2 = not IS_PY3 MINOR_VER = sys.version_info[1] @@ -32,26 +34,29 @@ diff -Naurp sh-1.12.14.orig/test.py sh-1.12.14/test.py - run_idx = int(os.environ.pop("SH_TEST_RUN_IDX", "0")) - first_run = run_idx == 0 - -- import coverage +- try: +- import coverage +- except ImportError: +- pass +- else: +- # for some reason, we can't run auto_data on the first run, or the coverage +- # numbers get really screwed up +- auto_data = True +- if first_run: +- auto_data = False - -- # for some reason, we can't run auto_data on the first run, or the coverage -- # numbers get really screwed up -- auto_data = True -- if first_run: -- auto_data = False +- cov = coverage.Coverage(auto_data=auto_data) - -- cov = coverage.Coverage(auto_data=auto_data) +- if first_run: +- cov.erase() - -- if first_run: -- cov.erase() -- -- cov.start() +- cov.start() - - from os.path import exists, join, realpath, dirname, split import unittest try: -@@ -3045,6 +3020,4 @@ if __name__ == "__main__": +@@ -3230,6 +3202,4 @@ if __name__ == "__main__": exit(1) finally: diff --git a/pep-0538-test-fix.patch b/pep-0538-test-fix.patch deleted file mode 100644 index 1ec4b25..0000000 --- a/pep-0538-test-fix.patch +++ /dev/null @@ -1,50 +0,0 @@ -diff -Naurp sh-1.12.14.orig/test.py sh-1.12.14/test.py ---- sh-1.12.14.orig/test.py 2017-06-06 21:51:42.000000000 -0500 -+++ sh-1.12.14/test.py 2017-06-07 11:27:04.912212886 -0500 -@@ -515,17 +515,28 @@ while True: - "VERSIONER_PYTHON_VERSION", - ] - -+ # Fedora adds some extra environment variables as well. -+ # See https://www.python.org/dev/peps/pep-0538/ for more info. -+ fedora_cruft = [ -+ "LC_CTYPE", -+ "LANG" -+ ] -+ - # first we test that the environment exists in our child process as - # we've set it - py = create_tmp_test(""" - import os - - osx_cruft = %s -+fedora_cruft = %s - for key in osx_cruft: - try: del os.environ[key] - except: pass -+for key in fedora_cruft: -+ try: del os.environ[key] -+ except: pass - print(os.environ["HERP"] + " " + str(len(os.environ))) --""" % osx_cruft) -+""" % (osx_cruft, fedora_cruft)) - out = python(py.name, _env=env).strip() - self.assertEqual(out, "DERP 1") - -@@ -534,11 +545,15 @@ import os, sys - sys.path.insert(0, os.getcwd()) - import sh - osx_cruft = %s -+fedora_cruft = %s - for key in osx_cruft: - try: del os.environ[key] - except: pass -+for key in fedora_cruft: -+ try: del os.environ[key] -+ except: pass - print(sh.HERP + " " + str(len(os.environ))) --""" % osx_cruft) -+""" % (osx_cruft, fedora_cruft)) - out = python(py.name, _env=env, _cwd=THIS_DIR).strip() - self.assertEqual(out, "DERP 1") - diff --git a/python-sh.changes b/python-sh.changes index 4916e2b..e5c3afb 100644 --- a/python-sh.changes +++ b/python-sh.changes @@ -1,3 +1,38 @@ +------------------------------------------------------------------- +Wed Jun 17 08:14:24 UTC 2020 - Steve Kowalik + +- Update to 1.13.1: + * regression fix if `_fg=False` [#520](https://github.com/amoffat/sh/issues/520) + * minor Travis CI fixes [#492](https://github.com/amoffat/sh/pull/492) + * bugfix for boolean long options not respecting `_long_prefix` [#488](https://github.com/amoffat/sh/pull/488) + * fix deprecation warning on Python 3.6 regexes [#482](https://github.com/amoffat/sh/pull/482) + * `_pass_fds` and `_close_fds` special kwargs for controlling file descriptor inheritance in child. + * more efficiently closing inherited fds [#406](https://github.com/amoffat/sh/issues/406) + * bugfix where passing invalid dictionary to `_env` will cause a mysterious child 255 exit code. [#497](https://github.com/amoffat/sh/pull/497) + * bugfix where `_in` using 0 or `sys.stdin` wasn't behaving like a TTY, if it was in fact a TTY. [#514](https://github.com/amoffat/sh/issues/514) + * bugfix where `help(sh)` raised an exception [#455](https://github.com/amoffat/sh/issues/455) + * bugfix fixing broken interactive ssh tutorial from docs + * change to automatic tty merging into a single pty if `_tty_in=True` and `_tty_out=True` + * introducing `_unify_ttys`, default False, which allows explicit tty merging into single pty + * contrib command for `ssh` connections requiring passwords + * performance fix for polling output too fast when using `_iter` [#462](https://github.com/amoffat/sh/issues/462) + * execution contexts can now be used in python shell [#466](https://github.com/amoffat/sh/pull/466) + * bugfix `ErrorReturnCode` instances can now be pickled + * bugfix passing empty string or `None` for `_in` hanged [#427](https://github.com/amoffat/sh/pull/427) + * bugfix where passing a filename or file-like object to `_out` wasn't using os.dup2 [#449](https://github.com/amoffat/sh/issues/449) + * regression make `_fg` work with `_cwd` again [#330](https://github.com/amoffat/sh/issues/330) + * an invalid `_cwd` now raises a `ForkException` not an `OSError`. + * AIX support [#477](https://github.com/amoffat/sh/issues/477) + * added a `timeout=None` param to `RunningCommand.wait()` [#515](https://github.com/amoffat/sh/issues/515) +- Re-enable tests. +- Refresh no-coverage.patch, fix-test_general_signal.diff and + fix-test_signal_group.diff +- Add fix-sleep-path-in-test.patch to fix a test failure. +- Drop no longer required patches, + 0001-Fix-tests-for-the-drop-the-unversion-python.patch, + always-use-fully-versioned-python-command-in-tests.patch and + pep-0538-test-fix.patch + ------------------------------------------------------------------- Mon Apr 20 17:27:27 UTC 2020 - Matej Cepl diff --git a/python-sh.spec b/python-sh.spec index 9acedfc..0246ebc 100644 --- a/python-sh.spec +++ b/python-sh.spec @@ -18,19 +18,16 @@ %{?!python_module:%define python_module() python-%{**} python3-%{**}} Name: python-sh -Version: 1.12.14 +Version: 1.13.1 Release: 0 Summary: Python subprocess interface License: MIT -Group: Development/Languages/Python URL: https://github.com/amoffat/sh Source: https://files.pythonhosted.org/packages/source/s/sh/sh-%{version}.tar.gz -Patch0: always-use-fully-versioned-python-command-in-tests.patch -Patch1: no-coverage.patch -Patch2: 0001-Fix-tests-for-the-drop-the-unversion-python.patch -Patch3: pep-0538-test-fix.patch -Patch4: fix-test_signal_group.diff -Patch5: fix-test_general_signal.diff +Patch0: no-coverage.patch +Patch1: fix-test_signal_group.diff +Patch2: fix-test_general_signal.diff +Patch3: fix-sleep-path-in-test.patch BuildRequires: %{python_module setuptools} BuildRequires: python-rpm-macros BuildArch: noarch @@ -56,9 +53,8 @@ sh is not a collection of system commands implemented in Python. %install %python_install -# https://trello.com/c/gkuDtBOU -# %%check -# %%python_exec test.py +%check +%python_exec test.py %files %{python_files} %license LICENSE.txt diff --git a/sh-1.12.14.tar.gz b/sh-1.12.14.tar.gz deleted file mode 100644 index f4dd6c9..0000000 --- a/sh-1.12.14.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b52bf5833ed01c7b5c5fb73a7f71b3d98d48e9b9b8764236237bdc7ecae850fc -size 56861 diff --git a/sh-1.13.1.tar.gz b/sh-1.13.1.tar.gz new file mode 100644 index 0000000..99f6e95 --- /dev/null +++ b/sh-1.13.1.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:97a3d2205e3c6a842d87ebbc9ae93acae5a352b1bc4609b428d0fd5bb9e286a3 +size 62768