Commit a717d563 authored by Petri Lehtinen's avatar Petri Lehtinen

#15036: Make a repeated changes and flushes work with single-file mailboxes

parents 3730a17a 02653f1b
...@@ -675,6 +675,7 @@ class _singlefileMailbox(Mailbox): ...@@ -675,6 +675,7 @@ class _singlefileMailbox(Mailbox):
new_file.write(buffer) new_file.write(buffer)
new_toc[key] = (new_start, new_file.tell()) new_toc[key] = (new_start, new_file.tell())
self._post_message_hook(new_file) self._post_message_hook(new_file)
self._file_length = new_file.tell()
except: except:
new_file.close() new_file.close()
os.remove(new_file.name) os.remove(new_file.name)
......
...@@ -504,6 +504,17 @@ class TestMailbox(TestBase): ...@@ -504,6 +504,17 @@ class TestMailbox(TestBase):
# Write changes to disk # Write changes to disk
self._test_flush_or_close(self._box.flush, True) self._test_flush_or_close(self._box.flush, True)
def test_popitem_and_flush_twice(self):
# See #15036.
self._box.add(self._template % 0)
self._box.add(self._template % 1)
self._box.flush()
self._box.popitem()
self._box.flush()
self._box.popitem()
self._box.flush()
def test_lock_unlock(self): def test_lock_unlock(self):
# Lock and unlock the mailbox # Lock and unlock the mailbox
self.assertFalse(os.path.exists(self._get_lock_path())) self.assertFalse(os.path.exists(self._get_lock_path()))
......
...@@ -21,6 +21,10 @@ Core and Builtins ...@@ -21,6 +21,10 @@ Core and Builtins
Library Library
------- -------
- Issue #15036: Allow removing or changing multiple items in
single-file mailboxes (mbox, MMDF, Babyl) flushing the mailbox
between the changes.
- Issue #14059: Implement multiprocessing.Barrier. - Issue #14059: Implement multiprocessing.Barrier.
- Issue #15061: The inappropriately named hmac.secure_compare has been - Issue #15061: The inappropriately named hmac.secure_compare has been
......
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