summaryrefslogtreecommitdiffstats
path: root/Lib/mailbox.py
diff options
context:
space:
mode:
authorAntoine Pitrou <solipsis@pitrou.net>2009-11-02 11:40:19 (GMT)
committerAntoine Pitrou <solipsis@pitrou.net>2009-11-02 11:40:19 (GMT)
commit868b578929e50e17d832cfb2431cee091f52caab (patch)
tree0f001566a21080f53f314427e123081322ac77bb /Lib/mailbox.py
parent628b41f2bdebcf8b6c726855572cac17e8773c3b (diff)
downloadcpython-868b578929e50e17d832cfb2431cee091f52caab.zip
cpython-868b578929e50e17d832cfb2431cee091f52caab.tar.gz
cpython-868b578929e50e17d832cfb2431cee091f52caab.tar.bz2
Merged revisions 76055 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k ................ r76055 | antoine.pitrou | 2009-11-02 12:36:51 +0100 (lun., 02 nov. 2009) | 13 lines Merged revisions 76034,76054 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r76034 | antoine.pitrou | 2009-11-01 22:29:33 +0100 (dim., 01 nov. 2009) | 3 lines This should finally fix #6896. Let's watch the buildbots. ........ r76054 | antoine.pitrou | 2009-11-02 12:34:27 +0100 (lun., 02 nov. 2009) | 3 lines Since r76034 was successful, add a NEWS entry for it. ........ ................
Diffstat (limited to 'Lib/mailbox.py')
-rwxr-xr-xLib/mailbox.py13
1 files changed, 12 insertions, 1 deletions
diff --git a/Lib/mailbox.py b/Lib/mailbox.py
index 85e3ab1..d9c289b 100755
--- a/Lib/mailbox.py
+++ b/Lib/mailbox.py
@@ -234,6 +234,9 @@ class Maildir(Mailbox):
raise NoSuchMailboxError(self._path)
self._toc = {}
self._last_read = None # Records last time we read cur/new
+ # NOTE: we manually invalidate _last_read each time we do any
+ # modifications ourselves, otherwise we might get tripped up by
+ # bogus mtime behaviour on some systems (see issue #6896).
def add(self, message):
"""Add message and return assigned key."""
@@ -267,11 +270,15 @@ class Maildir(Mailbox):
raise
if isinstance(message, MaildirMessage):
os.utime(dest, (os.path.getatime(dest), message.get_date()))
+ # Invalidate cached toc
+ self._last_read = None
return uniq
def remove(self, key):
"""Remove the keyed message; raise KeyError if it doesn't exist."""
os.remove(os.path.join(self._path, self._lookup(key)))
+ # Invalidate cached toc (only on success)
+ self._last_read = None
def discard(self, key):
"""If the keyed message exists, remove it."""
@@ -306,6 +313,8 @@ class Maildir(Mailbox):
if isinstance(message, MaildirMessage):
os.utime(new_path, (os.path.getatime(new_path),
message.get_date()))
+ # Invalidate cached toc
+ self._last_read = None
def get_message(self, key):
"""Return a Message representation or raise a KeyError."""
@@ -360,7 +369,9 @@ class Maildir(Mailbox):
def flush(self):
"""Write any pending changes to disk."""
- return # Maildir changes are always written immediately.
+ # Maildir changes are always written immediately, so there's nothing
+ # to do except invalidate our cached toc.
+ self._last_read = None
def lock(self):
"""Lock the mailbox."""