Reduce the number of properties used.
[jelmer/subvertpy.git] / errors.py
1 # Copyright (C) 2007 Jelmer Vernooij <jelmer@samba.org>
2
3 # This program is free software; you can redistribute it and/or modify
4 # it under the terms of the GNU General Public License as published by
5 # the Free Software Foundation; either version 2 of the License, or
6 # (at your option) any later version.
7
8 # This program is distributed in the hope that it will be useful,
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11 # GNU General Public License for more details.
12
13 # You should have received a copy of the GNU General Public License
14 # along with this program; if not, write to the Free Software
15 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16 """Subversion-specific errors and conversion of Subversion-specific errors."""
17
18 from bzrlib.errors import BzrError, ConnectionReset, LockError
19
20 import svn.core
21
22 class NotSvnBranchPath(BzrError):
23     """Error raised when a path was specified that did not exist."""
24     _fmt = """{%(branch_path)s}:%(revnum)s is not a valid Svn branch path"""
25
26     def __init__(self, branch_path, revnum=None):
27         BzrError.__init__(self)
28         self.branch_path = branch_path
29         self.revnum = revnum
30
31
32 def convert_error(err):
33     (num, msg) = err.args
34
35     if num == svn.core.SVN_ERR_RA_SVN_CONNECTION_CLOSED:
36         return ConnectionReset(msg=msg)
37     elif num == svn.core.SVN_ERR_WC_LOCKED:
38         return LockError(message=msg)
39     else:
40         return err
41
42
43 def convert_svn_error(unbound):
44     """Decorator that catches particular Subversion exceptions and 
45     converts them to Bazaar exceptions.
46     """
47     def convert(*args, **kwargs):
48         try:
49             return unbound(*args, **kwargs)
50         except svn.core.SubversionException, e:
51             raise convert_error(e)
52
53     convert.__doc__ = unbound.__doc__
54     convert.__name__ = unbound.__name__
55     return convert
56
57
58 class NoCheckoutSupport(BzrError):
59
60     _fmt = 'Subversion version too old for working tree support.'
61
62
63 class LocalCommitsUnsupported(BzrError):
64
65     _fmt = 'Local commits are not supported for lightweight Subversion checkouts.'