Rev 6498: (gz) Implement osutils._rename_wrap_exception for recording both filenames in file:///srv/pqm.bazaar-vcs.org/archives/thelove/bzr/%2Btrunk/

Patch Queue Manager pqm at pqm.ubuntu.com
Mon Mar 12 19:01:06 UTC 2012


At file:///srv/pqm.bazaar-vcs.org/archives/thelove/bzr/%2Btrunk/

------------------------------------------------------------
revno: 6498 [merge]
revision-id: pqm at pqm.ubuntu.com-20120312190105-p9dg7dxetifq1k0w
parent: pqm at pqm.ubuntu.com-20120312153114-roz3tzlcn7eaiwmc
parent: rosslagerwall at gmail.com-20120217162142-jef4bxuwh2gngd4e
committer: Patch Queue Manager <pqm at pqm.ubuntu.com>
branch nick: +trunk
timestamp: Mon 2012-03-12 19:01:05 +0000
message:
  (gz) Implement osutils._rename_wrap_exception for recording both filenames
   in the error (Ross Lagerwall)
modified:
  bzrlib/osutils.py              osutils.py-20050309040759-eeaff12fbf77ac86
  bzrlib/tests/test_osutils.py   test_osutils.py-20051201224856-e48ee24c12182989
=== modified file 'bzrlib/osutils.py'
--- a/bzrlib/osutils.py	2012-02-28 04:58:14 +0000
+++ b/bzrlib/osutils.py	2012-03-12 19:01:05 +0000
@@ -450,6 +450,29 @@
     return unicodedata.normalize('NFC', os.getcwdu())
 
 
+def _rename_wrap_exception(rename_func):
+    """Adds extra information to any exceptions that come from rename().
+
+    The exception has an updated message and 'old_filename' and 'new_filename'
+    attributes.
+    """
+
+    def _rename_wrapper(old, new):
+        try:
+            rename_func(old, new)
+        except OSError, e:
+            detailed_error = OSError(e.errno, e.strerror +
+                                " [occurred when renaming '%s' to '%s']" %
+                                (old, new))
+            detailed_error.old_filename = old
+            detailed_error.new_filename = new
+            raise detailed_error
+
+    return _rename_wrapper
+
+# Default rename wraps os.rename()
+rename = _rename_wrap_exception(os.rename)
+
 # Default is to just use the python builtins, but these can be rebound on
 # particular platforms.
 abspath = _posix_abspath
@@ -460,7 +483,6 @@
 _get_home_dir = _posix_get_home_dir
 getuser_unicode = _posix_getuser_unicode
 getcwd = os.getcwdu
-rename = os.rename
 dirname = os.path.dirname
 basename = os.path.basename
 split = os.path.split
@@ -488,7 +510,7 @@
     normpath = _win32_normpath
     getcwd = _win32_getcwd
     mkdtemp = _win32_mkdtemp
-    rename = _win32_rename
+    rename = _rename_wrap_exception(_win32_rename)
     try:
         from bzrlib import _walkdirs_win32
     except ImportError:

=== modified file 'bzrlib/tests/test_osutils.py'
--- a/bzrlib/tests/test_osutils.py	2012-02-28 04:58:14 +0000
+++ b/bzrlib/tests/test_osutils.py	2012-03-12 19:01:05 +0000
@@ -181,6 +181,15 @@
         shape = sorted(os.listdir('.'))
         self.assertEquals(['A', 'B'], shape)
 
+    def test_rename_exception(self):
+        try:
+            osutils.rename('nonexistent_path', 'different_nonexistent_path')
+        except OSError, e:
+            self.assertEqual(e.old_filename, 'nonexistent_path')
+            self.assertEqual(e.new_filename, 'different_nonexistent_path')
+            self.assertTrue('nonexistent_path' in e.strerror)
+            self.assertTrue('different_nonexistent_path' in e.strerror)
+
 
 class TestRandChars(tests.TestCase):
 




More information about the bazaar-commits mailing list