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