forked from pool/python-sh
Accepting request 815418 from devel:languages:python
- 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/request/show/815418 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python-sh?expand=0&rev=8
This commit is contained in:
commit
10b205e74c
@ -1,29 +0,0 @@
|
||||
From 392a0471ed19d71a226442270127a9414ccc7908 Mon Sep 17 00:00:00 2001
|
||||
From: Pierre-Yves Chibon <pingou@pingoured.fr>
|
||||
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 <pingou@pingoured.fr>
|
||||
---
|
||||
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
|
||||
|
@ -1,77 +0,0 @@
|
||||
From 94774d2574668aa9f7bc775cc13087a7aed03f12 Mon Sep 17 00:00:00 2001
|
||||
From: Carl George <carl@george.computer>
|
||||
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()
|
13
fix-sleep-path-in-test.patch
Normal file
13
fix-sleep-path-in-test.patch
Normal file
@ -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
|
@ -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
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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:
|
||||
|
@ -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")
|
||||
|
@ -1,3 +1,38 @@
|
||||
-------------------------------------------------------------------
|
||||
Wed Jun 17 08:14:24 UTC 2020 - Steve Kowalik <steven.kowalik@suse.com>
|
||||
|
||||
- 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 <mcepl@suse.com>
|
||||
|
||||
|
@ -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
|
||||
|
@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:b52bf5833ed01c7b5c5fb73a7f71b3d98d48e9b9b8764236237bdc7ecae850fc
|
||||
size 56861
|
3
sh-1.13.1.tar.gz
Normal file
3
sh-1.13.1.tar.gz
Normal file
@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:97a3d2205e3c6a842d87ebbc9ae93acae5a352b1bc4609b428d0fd5bb9e286a3
|
||||
size 62768
|
Loading…
Reference in New Issue
Block a user