mirror of https://github.com/python/cpython
Issue #16601: Restarting iteration over tarfile no more continues from where
it left off. Patch by Michael Birtwell.
This commit is contained in:
commit
b3c5d85680
|
@ -2397,16 +2397,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):
|
||||
|
||||
|
|
|
@ -118,6 +118,7 @@ Adrian von Bidder
|
|||
David Binger
|
||||
Dominic Binks
|
||||
Philippe Biondi
|
||||
Michael Birtwell
|
||||
Stuart Bishop
|
||||
Roy Bixler
|
||||
Daniel Black
|
||||
|
|
|
@ -86,6 +86,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…
Reference in New Issue