mirror of https://github.com/python/cpython
gh-115256: Remove refcycles from tarfile writing (GH-115257)
This commit is contained in:
parent
cfbdce7208
commit
0dfa7ce346
|
@ -791,6 +791,9 @@ Deprecated
|
|||
coroutine.
|
||||
(Contributed by Irit Katriel in :gh:`81137`.)
|
||||
|
||||
* The undocumented and unused ``tarfile`` attribute of :class:`tarfile.TarFile`
|
||||
is deprecated and scheduled for removal in Python 3.16.
|
||||
|
||||
|
||||
Pending Removal in Python 3.14
|
||||
------------------------------
|
||||
|
|
|
@ -872,7 +872,7 @@ class TarInfo(object):
|
|||
pax_headers = ('A dictionary containing key-value pairs of an '
|
||||
'associated pax extended header.'),
|
||||
sparse = 'Sparse member information.',
|
||||
tarfile = None,
|
||||
_tarfile = None,
|
||||
_sparse_structs = None,
|
||||
_link_target = None,
|
||||
)
|
||||
|
@ -901,6 +901,24 @@ class TarInfo(object):
|
|||
self.sparse = None # sparse member information
|
||||
self.pax_headers = {} # pax header information
|
||||
|
||||
@property
|
||||
def tarfile(self):
|
||||
import warnings
|
||||
warnings.warn(
|
||||
'The undocumented "tarfile" attribute of TarInfo objects '
|
||||
+ 'is deprecated and will be removed in Python 3.16',
|
||||
DeprecationWarning, stacklevel=2)
|
||||
return self._tarfile
|
||||
|
||||
@tarfile.setter
|
||||
def tarfile(self, tarfile):
|
||||
import warnings
|
||||
warnings.warn(
|
||||
'The undocumented "tarfile" attribute of TarInfo objects '
|
||||
+ 'is deprecated and will be removed in Python 3.16',
|
||||
DeprecationWarning, stacklevel=2)
|
||||
self._tarfile = tarfile
|
||||
|
||||
@property
|
||||
def path(self):
|
||||
'In pax headers, "name" is called "path".'
|
||||
|
@ -2030,7 +2048,7 @@ class TarFile(object):
|
|||
# Now, fill the TarInfo object with
|
||||
# information specific for the file.
|
||||
tarinfo = self.tarinfo()
|
||||
tarinfo.tarfile = self # Not needed
|
||||
tarinfo._tarfile = self # To be removed in 3.16.
|
||||
|
||||
# Use os.stat or os.lstat, depending on if symlinks shall be resolved.
|
||||
if fileobj is None:
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
Added DeprecationWarning when accessing the tarfile attribute of TarInfo
|
||||
objects. The attribute is never used internally and is only attached to
|
||||
TarInfos when the tarfile is opened in write-mode, not read-mode. The
|
||||
attribute creates an unnecessary reference cycle which may cause
|
||||
corruption when not closing the handle after writing a tarfile.
|
Loading…
Reference in New Issue