diff --git a/Doc/library/tarfile.rst b/Doc/library/tarfile.rst index b62148aead1..aabd6410bff 100644 --- a/Doc/library/tarfile.rst +++ b/Doc/library/tarfile.rst @@ -140,6 +140,10 @@ Some facts and figures: 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 619921328ae..85abcd8d850 100644 --- a/Lib/tarfile.py +++ b/Lib/tarfile.py @@ -2468,6 +2468,9 @@ class TarFileCompat: 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 @@ class TarFileCompat: 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 6db54e0e02c..5824ce3279c 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -38,6 +38,9 @@ Core and Builtins 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.