diff options
author | Lars Gustäbel <lars@gustaebel.de> | 2008-05-27 12:39:23 (GMT) |
---|---|---|
committer | Lars Gustäbel <lars@gustaebel.de> | 2008-05-27 12:39:23 (GMT) |
commit | b1a54a353021f3d478e1d9e667cef0fa92507c36 (patch) | |
tree | 968765c627007ccae0350e85264f16c0dcecdda6 | |
parent | 0902cac4b355e98184b0e435f9bb7e24ed68f6a2 (diff) | |
download | cpython-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.py | 1 | ||||
-rw-r--r-- | Lib/test/test_tarfile.py | 16 | ||||
-rw-r--r-- | Misc/NEWS | 3 |
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|" @@ -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. |