]> granicus.if.org Git - python/commitdiff
Merged revisions 88730 via svnmerge from
authorR. David Murray <rdmurray@bitdance.com>
Thu, 3 Mar 2011 18:17:40 +0000 (18:17 +0000)
committerR. David Murray <rdmurray@bitdance.com>
Thu, 3 Mar 2011 18:17:40 +0000 (18:17 +0000)
svn+ssh://pythondev@svn.python.org/python/branches/py3k

........
  r88730 | r.david.murray | 2011-03-03 13:03:36 -0500 (Thu, 03 Mar 2011) | 2 lines

  #11306: Treat EROFS like EACCES when making a 'file is read-only' decision
........

Lib/mailbox.py
Misc/NEWS

index 728ce2ad69faff426beb6035876d62172c0986e6..b74eeb531cb3e5eb2a94c585cb2422122171f2d9 100644 (file)
@@ -554,7 +554,7 @@ class _singlefileMailbox(Mailbox):
                     f = open(self._path, 'wb+')
                 else:
                     raise NoSuchMailboxError(self._path)
-            elif e.errno == errno.EACCES:
+            elif e.errno in (errno.EACCES, errno.EROFS):
                 f = open(self._path, 'rb')
             else:
                 raise
@@ -1905,7 +1905,7 @@ def _lock_file(f, dotlock=True):
             try:
                 fcntl.lockf(f, fcntl.LOCK_EX | fcntl.LOCK_NB)
             except IOError, e:
-                if e.errno in (errno.EAGAIN, errno.EACCES):
+                if e.errno in (errno.EAGAIN, errno.EACCES, errno.EROFS):
                     raise ExternalClashError('lockf: lock unavailable: %s' %
                                              f.name)
                 else:
@@ -1915,7 +1915,7 @@ def _lock_file(f, dotlock=True):
                 pre_lock = _create_temporary(f.name + '.lock')
                 pre_lock.close()
             except IOError, e:
-                if e.errno == errno.EACCES:
+                if e.errno in (errno.EACCES, errno.EROFS):
                     return  # Without write access, just skip dotlocking.
                 else:
                     raise
index 5155f0368d8c2d106f12525461ea4f6eb1622c8a..bed3edcfa2999c27c3304e14e2aa9e9270a7ea6f 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -37,6 +37,10 @@ Core and Builtins
 Library
 -------
 
+- Issue #11306: mailbox in certain cases adapts to an inability to open
+  certain files in read-write mode.  Previously it detected this by
+  checking for EACCES, now it also checks for EROFS.
+
 - Issue #11265: asyncore now correctly handles EPIPE, EBADF and EAGAIN errors
   on accept(), send() and recv().