gh-115256: Remove refcycles from tarfile writing (GH-115257)
This commit is contained in:
parent
cfbdce7208
commit
0dfa7ce346
@ -791,6 +791,9 @@ Deprecated
|
|||||||
coroutine.
|
coroutine.
|
||||||
(Contributed by Irit Katriel in :gh:`81137`.)
|
(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
|
Pending Removal in Python 3.14
|
||||||
------------------------------
|
------------------------------
|
||||||
|
@ -872,7 +872,7 @@ class TarInfo(object):
|
|||||||
pax_headers = ('A dictionary containing key-value pairs of an '
|
pax_headers = ('A dictionary containing key-value pairs of an '
|
||||||
'associated pax extended header.'),
|
'associated pax extended header.'),
|
||||||
sparse = 'Sparse member information.',
|
sparse = 'Sparse member information.',
|
||||||
tarfile = None,
|
_tarfile = None,
|
||||||
_sparse_structs = None,
|
_sparse_structs = None,
|
||||||
_link_target = None,
|
_link_target = None,
|
||||||
)
|
)
|
||||||
@ -901,6 +901,24 @@ class TarInfo(object):
|
|||||||
self.sparse = None # sparse member information
|
self.sparse = None # sparse member information
|
||||||
self.pax_headers = {} # pax header 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
|
@property
|
||||||
def path(self):
|
def path(self):
|
||||||
'In pax headers, "name" is called "path".'
|
'In pax headers, "name" is called "path".'
|
||||||
@ -2030,7 +2048,7 @@ class TarFile(object):
|
|||||||
# Now, fill the TarInfo object with
|
# Now, fill the TarInfo object with
|
||||||
# information specific for the file.
|
# information specific for the file.
|
||||||
tarinfo = self.tarinfo()
|
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.
|
# Use os.stat or os.lstat, depending on if symlinks shall be resolved.
|
||||||
if fileobj is None:
|
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…
x
Reference in New Issue
Block a user