summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLars Gustäbel <lars@gustaebel.de>2008-05-27 12:39:23 (GMT)
committerLars Gustäbel <lars@gustaebel.de>2008-05-27 12:39:23 (GMT)
commitb1a54a353021f3d478e1d9e667cef0fa92507c36 (patch)
tree968765c627007ccae0350e85264f16c0dcecdda6
parent0902cac4b355e98184b0e435f9bb7e24ed68f6a2 (diff)
downloadcpython-b1a54a353021f3d478e1d9e667cef0fa92507c36.zip
cpython-b1a54a353021f3d478e1d9e667cef0fa92507c36.tar.gz
cpython-b1a54a353021f3d478e1d9e667cef0fa92507c36.tar.bz2
Do not close external file objects passed to tarfile.open(mode='w:bz2')
when the TarFile is closed.
-rw-r--r--Lib/tarfile.py1
-rw-r--r--Lib/test/test_tarfile.py16
-rw-r--r--Misc/NEWS3
3 files changed, 17 insertions, 3 deletions
diff --git a/Lib/tarfile.py b/Lib/tarfile.py
index 4991ae1..6199213 100644
--- a/Lib/tarfile.py
+++ b/Lib/tarfile.py
@@ -692,7 +692,6 @@ class _BZ2Proxy(object):
if self.mode == "w":
raw = self.bz2obj.flush()
self.fileobj.write(raw)
- self.fileobj.close()
# class _BZ2Proxy
#------------------------
diff --git a/Lib/test/test_tarfile.py b/Lib/test/test_tarfile.py
index f0e755e..f3bc12d 100644
--- a/Lib/test/test_tarfile.py
+++ b/Lib/test/test_tarfile.py
@@ -529,7 +529,19 @@ class PaxReadTest(LongnameTest):
self.assertEqual(float(tarinfo.pax_headers["ctime"]), 1041808783.0)
-class WriteTest(unittest.TestCase):
+class WriteTestBase(unittest.TestCase):
+ # Put all write tests in here that are supposed to be tested
+ # in all possible mode combinations.
+
+ def test_fileobj_no_close(self):
+ fobj = StringIO.StringIO()
+ tar = tarfile.open(fileobj=fobj, mode=self.mode)
+ tar.addfile(tarfile.TarInfo("foo"))
+ tar.close()
+ self.assert_(fobj.closed is False, "external fileobjs must never closed")
+
+
+class WriteTest(WriteTestBase):
mode = "w:"
@@ -652,7 +664,7 @@ class WriteTest(unittest.TestCase):
shutil.rmtree(tempdir)
-class StreamWriteTest(unittest.TestCase):
+class StreamWriteTest(WriteTestBase):
mode = "w|"
diff --git a/Misc/NEWS b/Misc/NEWS
index 4f1c3c7..1decc90 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -63,6 +63,9 @@ Extension Modules
Library
-------
+- Do not close external file objects passed to tarfile.open(mode='w:bz2')
+ when the TarFile is closed.
+
- Issue #2959: For consistency with other file-like objects, gzip's
GzipFile.close() can now be called multiple times without raising
an exception.