diff options
author | Antoine Pitrou <solipsis@pitrou.net> | 2009-11-02 11:40:19 (GMT) |
---|---|---|
committer | Antoine Pitrou <solipsis@pitrou.net> | 2009-11-02 11:40:19 (GMT) |
commit | 868b578929e50e17d832cfb2431cee091f52caab (patch) | |
tree | 0f001566a21080f53f314427e123081322ac77bb /Lib/mailbox.py | |
parent | 628b41f2bdebcf8b6c726855572cac17e8773c3b (diff) | |
download | cpython-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-x | Lib/mailbox.py | 13 |
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.""" |