Kaydet (Commit) b3c5d856 authored tarafından Serhiy Storchaka's avatar Serhiy Storchaka

Issue #16601: Restarting iteration over tarfile no more continues from where

it left off.  Patch by Michael Birtwell.
...@@ -2397,16 +2397,18 @@ class TarIter: ...@@ -2397,16 +2397,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): ...@@ -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):
......
...@@ -118,6 +118,7 @@ Adrian von Bidder ...@@ -118,6 +118,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
Daniel Black Daniel Black
......
...@@ -86,6 +86,9 @@ Core and Builtins ...@@ -86,6 +86,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.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment