Commit b1a54a35 authored by Lars Gustäbel's avatar Lars Gustäbel

Do not close external file objects passed to tarfile.open(mode='w:bz2')

when the TarFile is closed.
parent 0902cac4
......@@ -692,7 +692,6 @@ class _BZ2Proxy(object):
if self.mode == "w":
raw = self.bz2obj.flush()
self.fileobj.write(raw)
self.fileobj.close()
# class _BZ2Proxy
#------------------------
......
......@@ -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.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment