diff options
author | Xavier de Gaye <xdegaye@users.sourceforge.net> | 2016-12-12 08:56:55 (GMT) |
---|---|---|
committer | Xavier de Gaye <xdegaye@users.sourceforge.net> | 2016-12-12 08:56:55 (GMT) |
commit | 3603d1858926524eb03bf28a9b2e16052bc58586 (patch) | |
tree | e871d584ed7fdb93bb8b6a7b997d99695765b0c7 /Lib | |
parent | 8bfba84ff24a07db053d9e354c0233f18f811fb0 (diff) | |
parent | 452b3a6a3e9e4ca99d9c6caff367fce749a7ec58 (diff) | |
download | cpython-3603d1858926524eb03bf28a9b2e16052bc58586.zip cpython-3603d1858926524eb03bf28a9b2e16052bc58586.tar.gz cpython-3603d1858926524eb03bf28a9b2e16052bc58586.tar.bz2 |
Issue #28764: Merge 3.6.
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/mailbox.py | 21 | ||||
-rw-r--r-- | Lib/test/test_mailbox.py | 4 |
2 files changed, 14 insertions, 11 deletions
diff --git a/Lib/mailbox.py b/Lib/mailbox.py index 0e23987..39f24f9 100644 --- a/Lib/mailbox.py +++ b/Lib/mailbox.py @@ -313,11 +313,12 @@ class Maildir(Mailbox): # final position in order to prevent race conditions with changes # from other programs try: - if hasattr(os, 'link'): + try: os.link(tmp_file.name, dest) - os.remove(tmp_file.name) - else: + except (AttributeError, PermissionError): os.rename(tmp_file.name, dest) + else: + os.remove(tmp_file.name) except OSError as e: os.remove(tmp_file.name) if e.errno == errno.EEXIST: @@ -1200,13 +1201,14 @@ class MH(Mailbox): for key in self.iterkeys(): if key - 1 != prev: changes.append((key, prev + 1)) - if hasattr(os, 'link'): + try: os.link(os.path.join(self._path, str(key)), os.path.join(self._path, str(prev + 1))) - os.unlink(os.path.join(self._path, str(key))) - else: + except (AttributeError, PermissionError): os.rename(os.path.join(self._path, str(key)), os.path.join(self._path, str(prev + 1))) + else: + os.unlink(os.path.join(self._path, str(key))) prev += 1 self._next_key = prev + 1 if len(changes) == 0: @@ -2076,13 +2078,14 @@ def _lock_file(f, dotlock=True): else: raise try: - if hasattr(os, 'link'): + try: os.link(pre_lock.name, f.name + '.lock') dotlock_done = True - os.unlink(pre_lock.name) - else: + except (AttributeError, PermissionError): os.rename(pre_lock.name, f.name + '.lock') dotlock_done = True + else: + os.unlink(pre_lock.name) except FileExistsError: os.remove(pre_lock.name) raise ExternalClashError('dot lock unavailable: %s' % diff --git a/Lib/test/test_mailbox.py b/Lib/test/test_mailbox.py index aeabdbb..2ba9443 100644 --- a/Lib/test/test_mailbox.py +++ b/Lib/test/test_mailbox.py @@ -2137,9 +2137,9 @@ class MaildirTestCase(unittest.TestCase): if mbox: fp.write(FROM_) fp.write(DUMMY_MESSAGE) - if hasattr(os, "link"): + try: os.link(tmpname, newname) - else: + except (AttributeError, PermissionError): with open(newname, "w") as fp: fp.write(DUMMY_MESSAGE) self._msgfiles.append(newname) |