mirror of
https://github.com/python/cpython.git
synced 2025-10-09 16:34:44 +00:00
Issue #16601: Restarting iteration over tarfile no more continues from where
it left off. Patch by Michael Birtwell.
This commit is contained in:
parent
6bcc0f1b51
commit
263fab94ee
4 changed files with 19 additions and 5 deletions
|
@ -2398,16 +2398,18 @@ class TarIter:
|
|||
# Fix for SF #1100429: Under rare circumstances it can
|
||||
# happen that getmembers() is called during iteration,
|
||||
# which will cause TarIter to stop prematurely.
|
||||
if not self.tarfile._loaded:
|
||||
|
||||
if self.index == 0 and self.tarfile.firstmember is not None:
|
||||
tarinfo = self.tarfile.next()
|
||||
elif self.index < len(self.tarfile.members):
|
||||
tarinfo = self.tarfile.members[self.index]
|
||||
elif not self.tarfile._loaded:
|
||||
tarinfo = self.tarfile.next()
|
||||
if not tarinfo:
|
||||
self.tarfile._loaded = True
|
||||
raise StopIteration
|
||||
else:
|
||||
try:
|
||||
tarinfo = self.tarfile.members[self.index]
|
||||
except IndexError:
|
||||
raise StopIteration
|
||||
raise StopIteration
|
||||
self.index += 1
|
||||
return tarinfo
|
||||
|
||||
|
|
|
@ -415,6 +415,14 @@ class MiscReadTest(CommonReadTest):
|
|||
finally:
|
||||
support.unlink(empty)
|
||||
|
||||
def test_parallel_iteration(self):
|
||||
# Issue #16601: Restarting iteration over tarfile continued
|
||||
# from where it left off.
|
||||
with tarfile.open(self.tarname) as tar:
|
||||
for m1, m2 in zip(tar, tar):
|
||||
self.assertEqual(m1.offset, m2.offset)
|
||||
self.assertEqual(m1.get_info(), m2.get_info())
|
||||
|
||||
|
||||
class StreamReadTest(CommonReadTest):
|
||||
|
||||
|
|
|
@ -117,6 +117,7 @@ Adrian von Bidder
|
|||
David Binger
|
||||
Dominic Binks
|
||||
Philippe Biondi
|
||||
Michael Birtwell
|
||||
Stuart Bishop
|
||||
Roy Bixler
|
||||
Jonathan Black
|
||||
|
|
|
@ -47,6 +47,9 @@ Core and Builtins
|
|||
Library
|
||||
-------
|
||||
|
||||
- Issue #16601: Restarting iteration over tarfile no more continues from where
|
||||
it left off. Patch by Michael Birtwell.
|
||||
|
||||
- Issue #17289: The readline module now plays nicer with external modules
|
||||
or applications changing the rl_completer_word_break_characters global
|
||||
variable. Initial patch by Bradley Froehle.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue