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
|
# Fix for SF #1100429: Under rare circumstances it can
|
||||||
# happen that getmembers() is called during iteration,
|
# happen that getmembers() is called during iteration,
|
||||||
# which will cause TarIter to stop prematurely.
|
# 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()
|
tarinfo = self.tarfile.next()
|
||||||
if not tarinfo:
|
if not tarinfo:
|
||||||
self.tarfile._loaded = True
|
self.tarfile._loaded = True
|
||||||
raise StopIteration
|
raise StopIteration
|
||||||
else:
|
else:
|
||||||
try:
|
raise StopIteration
|
||||||
tarinfo = self.tarfile.members[self.index]
|
|
||||||
except IndexError:
|
|
||||||
raise StopIteration
|
|
||||||
self.index += 1
|
self.index += 1
|
||||||
return tarinfo
|
return tarinfo
|
||||||
|
|
||||||
|
|
|
@ -415,6 +415,14 @@ class MiscReadTest(CommonReadTest):
|
||||||
finally:
|
finally:
|
||||||
support.unlink(empty)
|
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):
|
class StreamReadTest(CommonReadTest):
|
||||||
|
|
||||||
|
|
|
@ -117,6 +117,7 @@ Adrian von Bidder
|
||||||
David Binger
|
David Binger
|
||||||
Dominic Binks
|
Dominic Binks
|
||||||
Philippe Biondi
|
Philippe Biondi
|
||||||
|
Michael Birtwell
|
||||||
Stuart Bishop
|
Stuart Bishop
|
||||||
Roy Bixler
|
Roy Bixler
|
||||||
Jonathan Black
|
Jonathan Black
|
||||||
|
|
|
@ -47,6 +47,9 @@ Core and Builtins
|
||||||
Library
|
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
|
- Issue #17289: The readline module now plays nicer with external modules
|
||||||
or applications changing the rl_completer_word_break_characters global
|
or applications changing the rl_completer_word_break_characters global
|
||||||
variable. Initial patch by Bradley Froehle.
|
variable. Initial patch by Bradley Froehle.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue