summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2011-01-20 17:59:32 -0800
committerZac Medico <zmedico@gentoo.org>2011-01-20 17:59:32 -0800
commitfc9fdba08b5ac46ffb8cdf34753624d6050d8052 (patch)
treebfb679ecdc8ac2d7dd5f12fa4b036208137959fc
parentecbdd241f7e8e28f1057781c4ac2013e8d476288 (diff)
downloadportage-fc9fdba08b5ac46ffb8cdf34753624d6050d8052.tar.gz
portage-fc9fdba08b5ac46ffb8cdf34753624d6050d8052.tar.bz2
portage-fc9fdba08b5ac46ffb8cdf34753624d6050d8052.zip
PtyEofTestCase: test unbuffered fdopen
New development: It appears that array.fromfile() is usable with python3 as long as fdopen is called with a bufsize argument of 0.
-rw-r--r--pym/portage/tests/ebuild/test_pty_eof.py16
-rw-r--r--pym/portage/util/_pty.py15
2 files changed, 27 insertions, 4 deletions
diff --git a/pym/portage/tests/ebuild/test_pty_eof.py b/pym/portage/tests/ebuild/test_pty_eof.py
index 042227b67..c4386e944 100644
--- a/pym/portage/tests/ebuild/test_pty_eof.py
+++ b/pym/portage/tests/ebuild/test_pty_eof.py
@@ -1,4 +1,4 @@
-# Copyright 2009-2010 Gentoo Foundation
+# Copyright 2009-2011 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
from portage.tests import TestCase
@@ -6,7 +6,7 @@ from portage.util._pty import _can_test_pty_eof, _test_pty_eof
class PtyEofTestCase(TestCase):
- def testPtyEof(self):
+ def testPtyEofFdopenBuffered(self):
# This tests if the following python issue is fixed yet:
# http://bugs.python.org/issue5380
# Since it might not be fixed, mark as todo.
@@ -17,3 +17,15 @@ class PtyEofTestCase(TestCase):
self.assertEqual(_test_pty_eof(), True)
except EnvironmentError:
pass
+
+ def testPtyEofFdopenUnBuffered(self):
+ # New development: It appears that array.fromfile() is usable
+ # with python3 as long as fdopen is called with a bufsize
+ # argument of 0.
+
+ # The result is only valid if openpty does not raise EnvironmentError.
+ if _can_test_pty_eof():
+ try:
+ self.assertEqual(_test_pty_eof(fdopen_buffered=False), True)
+ except EnvironmentError:
+ pass
diff --git a/pym/portage/util/_pty.py b/pym/portage/util/_pty.py
index 877430e96..7e769d204 100644
--- a/pym/portage/util/_pty.py
+++ b/pym/portage/util/_pty.py
@@ -28,11 +28,19 @@ def _can_test_pty_eof():
"""
return platform.system() in ("Linux",)
-def _test_pty_eof():
+def _test_pty_eof(fdopen_buffered=True):
"""
Returns True if this issues is fixed for the currently
running version of python: http://bugs.python.org/issue5380
Raises an EnvironmentError from openpty() if it fails.
+
+ NOTE: This issue is only problematic when array.fromfile()
+ is used, rather than os.read(). However, array.fromfile()
+ is preferred since it is approximatly 10% faster.
+
+ New development: It appears that array.fromfile() is usable
+ with python3 as long as fdopen is called with a bufsize
+ argument of 0.
"""
use_fork = False
@@ -78,7 +86,10 @@ def _test_pty_eof():
if pid is not None:
os.waitpid(pid, 0)
- master_file = os.fdopen(master_fd, 'rb')
+ if fdopen_buffered:
+ master_file = os.fdopen(master_fd, 'rb')
+ else:
+ master_file = os.fdopen(master_fd, 'rb', 0)
eof = False
data = []
iwtd = [master_file]