Rev 2363: Cleanup errors, and change ReadOnlyLockError to pass around more details. in http://bzr.arbash-meinel.com/branches/bzr/0.15-dev/lock_cleanup
John Arbash Meinel
john at arbash-meinel.com
Wed Mar 14 20:47:29 GMT 2007
At http://bzr.arbash-meinel.com/branches/bzr/0.15-dev/lock_cleanup
------------------------------------------------------------
revno: 2363
revision-id: john at arbash-meinel.com-20070314204717-htynwogv97fqr22a
parent: john at arbash-meinel.com-20070314201552-bjtfua57456dviep
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: lock_cleanup
timestamp: Wed 2007-03-14 15:47:17 -0500
message:
Cleanup errors, and change ReadOnlyLockError to pass around more details.
modified:
bzrlib/errors.py errors.py-20050309040759-20512168c4e14fbd
bzrlib/lock.py lock.py-20050527050856-ec090bb51bc03349
bzrlib/tests/test_errors.py test_errors.py-20060210110251-41aba2deddf936a8
-------------- next part --------------
=== modified file 'bzrlib/errors.py'
--- a/bzrlib/errors.py 2007-03-13 19:39:27 +0000
+++ b/bzrlib/errors.py 2007-03-14 20:47:17 +0000
@@ -698,12 +698,13 @@
class ReadOnlyLockError(LockError):
-
- _fmt = "Cannot acquire write lock on %(fname)s. File is readonly."
-
- def __init__(self, fname):
+
+ _fmt = "Cannot acquire write lock on %(fname)s. %(msg)s"
+
+ def __init__(self, fname, msg):
LockError.__init__(self, '')
self.fname = fname
+ self.msg = msg
class OutSideTransaction(BzrError):
=== modified file 'bzrlib/lock.py'
--- a/bzrlib/lock.py 2007-03-14 20:15:52 +0000
+++ b/bzrlib/lock.py 2007-03-14 20:47:17 +0000
@@ -48,21 +48,23 @@
def __init__(self):
self.f = None
+ self.filename = None
def _open(self, filename, filemode):
+ self.filename = realpath(filename)
try:
- self.f = open(filename, filemode)
+ self.f = open(self.filename, filemode)
return self.f
except IOError, e:
if e.errno in (errno.EACCES, errno.EPERM):
- raise errors.ReadOnlyLockError(e)
+ raise errors.ReadOnlyLockError(self.filename, str(e))
if e.errno != errno.ENOENT:
raise
# maybe this is an old branch (before may 2005)
- mutter("trying to create missing branch lock %r", filename)
+ mutter("trying to create missing lock %r", self.filename)
- self.f = open(filename, 'wb+')
+ self.f = open(self.filename, 'wb+')
return self.f
def _clear_f(self):
@@ -123,7 +125,6 @@
# standard IO errors get exposed directly.
super(_fcntl_WriteLock, self).__init__()
self._open(filename, 'rb+')
- self.filename = realpath(filename)
if self.filename in self.open_locks:
self._clear_f()
raise LockContention(self.filename)
@@ -326,33 +327,3 @@
# We default to using the first available lock class.
_lock_type, WriteLock, ReadLock = _lock_classes[0]
-
-class LockTreeTestProviderAdapter(object):
- """A tool to generate a suite testing multiple lock formats at once.
-
- This is done by copying the test once for each lock and injecting the
- read_lock and write_lock classes.
- They are also given a new test id.
- """
-
- def __init__(self, lock_classes):
- self._lock_classes = lock_classes
-
- def _clone_test(self, test, write_lock, read_lock, variation):
- """Clone test for adaption."""
- new_test = deepcopy(test)
- new_test.write_lock = write_lock
- new_test.read_lock = read_lock
- def make_new_test_id():
- new_id = "%s(%s)" % (test.id(), variation)
- return lambda: new_id
- new_test.id = make_new_test_id()
- return new_test
-
- def adapt(self, test):
- from bzrlib.tests import TestSuite
- result = TestSuite()
- for name, write_lock, read_lock in self._lock_classes:
- new_test = self._clone_test(test, write_lock, read_lock, name)
- result.addTest(new_test)
- return result
=== modified file 'bzrlib/tests/test_errors.py'
--- a/bzrlib/tests/test_errors.py 2007-02-26 22:08:14 +0000
+++ b/bzrlib/tests/test_errors.py 2007-03-14 20:47:17 +0000
@@ -105,6 +105,11 @@
"to be.",
str(error))
+ def test_read_only_lock_error(self):
+ error = errors.ReadOnlyLockError('filename', 'error message')
+ self.assertEqualDiff("Cannot acquire write lock on filename."
+ " error message", str(error))
+
def test_too_many_concurrent_requests(self):
error = errors.TooManyConcurrentRequests("a medium")
self.assertEqualDiff("The medium 'a medium' has reached its concurrent "
More information about the bazaar-commits
mailing list