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

This commit is contained in:
Petri Lehtinen 2012-06-15 20:50:51 +03:00
parent 5ec84cd69e
commit 7cf6699699
3 changed files with 16 additions and 0 deletions

View File

@ -649,6 +649,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)

View File

@ -386,6 +386,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()))

View File

@ -67,6 +67,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 #10133: Make multiprocessing deallocate buffer if socket read - Issue #10133: Make multiprocessing deallocate buffer if socket read
fails. Patch by Hallvard B Furuseth. fails. Patch by Hallvard B Furuseth.