[Python-checkins] cpython (merge 3.6 -> default): Issue #28764: Merge 3.6.

xavier.degaye python-checkins at python.org
Mon Dec 12 03:57:29 EST 2016


https://hg.python.org/cpython/rev/3a451c67008d
changeset:   105596:3a451c67008d
parent:      105594:402a227564f5
parent:      105595:51573ef25903
user:        Xavier de Gaye <xdegaye at users.sourceforge.net>
date:        Mon Dec 12 09:56:55 2016 +0100
summary:
  Issue #28764: Merge 3.6.

files:
  Lib/mailbox.py           |  21 ++++++++++++---------
  Lib/test/test_mailbox.py |   4 ++--
  2 files changed, 14 insertions(+), 11 deletions(-)


diff --git a/Lib/mailbox.py b/Lib/mailbox.py
--- a/Lib/mailbox.py
+++ b/Lib/mailbox.py
@@ -313,11 +313,12 @@
         # 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)
+            except (AttributeError, PermissionError):
+                os.rename(tmp_file.name, dest)
+            else:
                 os.remove(tmp_file.name)
-            else:
-                os.rename(tmp_file.name, dest)
         except OSError as e:
             os.remove(tmp_file.name)
             if e.errno == errno.EEXIST:
@@ -1200,13 +1201,14 @@
         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 @@
                 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
--- a/Lib/test/test_mailbox.py
+++ b/Lib/test/test_mailbox.py
@@ -2137,9 +2137,9 @@
             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)

-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list