Issue #3039: Fix TarFileCompat.writestr() which always raised an
AttributeError since __slots__ were added to zipfile.ZipInfo in
r46967 two years ago.
Add a warning about the removal of TarFileCompat in Python 3.0.
diff --git a/Doc/library/tarfile.rst b/Doc/library/tarfile.rst
index b62148a..aabd641 100644
--- a/Doc/library/tarfile.rst
+++ b/Doc/library/tarfile.rst
@@ -140,6 +140,10 @@
Constant for a :mod:`gzip` compressed tar archive.
+ .. deprecated:: 2.6
+ The :class:`TarFileCompat` class has been deprecated for removal in Python 3.0.
+
+
.. exception:: TarError
Base class for all :mod:`tarfile` exceptions.
diff --git a/Lib/tarfile.py b/Lib/tarfile.py
index 6199213..85abcd8 100644
--- a/Lib/tarfile.py
+++ b/Lib/tarfile.py
@@ -2468,6 +2468,9 @@
ZipFile class.
"""
def __init__(self, file, mode="r", compression=TAR_PLAIN):
+ from warnings import warnpy3k
+ warnpy3k("the TarFileCompat class has been removed in Python 3.0",
+ stacklevel=2)
if compression == TAR_PLAIN:
self.tarfile = TarFile.taropen(file, mode)
elif compression == TAR_GZIPPED:
@@ -2501,10 +2504,10 @@
except ImportError:
from StringIO import StringIO
import calendar
- zinfo.name = zinfo.filename
- zinfo.size = zinfo.file_size
- zinfo.mtime = calendar.timegm(zinfo.date_time)
- self.tarfile.addfile(zinfo, StringIO(bytes))
+ tinfo = TarInfo(zinfo.filename)
+ tinfo.size = len(bytes)
+ tinfo.mtime = calendar.timegm(zinfo.date_time)
+ self.tarfile.addfile(tinfo, StringIO(bytes))
def close(self):
self.tarfile.close()
#class TarFileCompat
diff --git a/Misc/NEWS b/Misc/NEWS
index 6db54e0..5824ce3 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -38,6 +38,9 @@
Library
-------
+- Issue #3039: Fix tarfile.TarFileCompat.writestr() which always
+ raised an AttributeError.
+
- Issue #2523: Fix quadratic behaviour when read()ing a binary file without
asking for a specific length.