106
95
# __str__() should always return a 'str' object
107
96
# never a 'unicode' object.
109
except (AttributeError, TypeError, NameError, ValueError, KeyError), e:
110
return 'Unprintable exception %s: dict=%r, fmt=%r, error=%r' \
111
% (self.__class__.__name__,
113
getattr(self, '_fmt', None),
99
pass # just bind to 'e' for formatting below
102
return 'Unprintable exception %s: dict=%r, fmt=%r, error=%r' \
103
% (self.__class__.__name__,
105
getattr(self, '_fmt', None),
116
108
def __unicode__(self):
117
109
u = self._format()
140
132
"""Return format string for this exception or None"""
141
133
fmt = getattr(self, '_fmt', None)
142
134
if fmt is not None:
144
fmt = getattr(self, '__doc__', None)
146
symbol_versioning.warn("%s uses its docstring as a format, "
147
"it should use _fmt instead" % self.__class__.__name__,
150
return 'Unprintable exception %s: dict=%r, fmt=%r' \
151
% (self.__class__.__name__,
153
getattr(self, '_fmt', None),
135
from bzrlib.i18n import gettext
136
return gettext(unicode(fmt)) # _fmt strings should be ascii
156
138
def __eq__(self, other):
157
139
if self.__class__ is not other.__class__:
170
152
internal_error = True
173
class BzrNewError(BzrError):
174
"""Deprecated error base class."""
175
# base classes should override the docstring with their human-
176
# readable explanation
178
def __init__(self, *args, **kwds):
179
# XXX: Use the underlying BzrError to always generate the args
180
# attribute if it doesn't exist. We can't use super here, because
181
# exceptions are old-style classes in python2.4 (but new in 2.5).
183
symbol_versioning.warn('BzrNewError was deprecated in bzr 0.13; '
184
'please convert %s to use BzrError instead'
185
% self.__class__.__name__,
188
BzrError.__init__(self, *args)
189
for key, value in kwds.items():
190
setattr(self, key, value)
194
# __str__() should always return a 'str' object
195
# never a 'unicode' object.
196
s = self.__doc__ % self.__dict__
197
if isinstance(s, unicode):
198
return s.encode('utf8')
200
except (TypeError, NameError, ValueError, KeyError), e:
201
return 'Unprintable exception %s(%r): %r' \
202
% (self.__class__.__name__,
206
155
class AlreadyBuilding(BzrError):
208
157
_fmt = "The tree builder is already building a tree."
622
571
_fmt = 'Unsupported protocol for url "%(path)s"%(extra)s'
624
def __init__(self, url, extra):
573
def __init__(self, url, extra=""):
625
574
PathError.__init__(self, url, extra=extra)
751
700
self.path = urlutils.unescape_for_display(branch.base, 'ascii')
703
class AlreadyControlDirError(PathError):
705
_fmt = 'A control directory already exists: "%(path)s".'
754
708
class AlreadyBranchError(PathError):
756
710
_fmt = 'Already a branch: "%(path)s".'
713
class InvalidBranchName(PathError):
715
_fmt = "Invalid branch name: %(name)s"
717
def __init__(self, name):
718
BzrError.__init__(self)
722
class ParentBranchExists(AlreadyBranchError):
724
_fmt = 'Parent branch already exists: "%(path)s".'
759
727
class BranchExistsWithoutWorkingTree(PathError):
761
729
_fmt = 'Directory contains a branch, but no working tree \
790
758
self.path = bzrdir.transport.clone('..').base
793
class FileInWrongBranch(BzrError):
795
_fmt = 'File "%(path)s" is not in branch %(branch_base)s.'
797
# use PathNotChild instead
798
@symbol_versioning.deprecated_method(symbol_versioning.deprecated_in((2, 3, 0)))
799
def __init__(self, branch, path):
800
BzrError.__init__(self)
802
self.branch_base = branch.base
806
761
class UnsupportedFormatError(BzrError):
808
763
_fmt = "Unsupported branch format: %(format)s\nPlease run 'bzr upgrade'"
827
782
self.bzrdir = bzrdir_format
785
class ParseFormatError(BzrError):
787
_fmt = "Parse error on line %(lineno)d of %(format)s format: %(line)s"
789
def __init__(self, format, lineno, line, text):
790
BzrError.__init__(self)
830
797
class IncompatibleRepositories(BzrError):
831
798
"""Report an error that two repositories are not compatible.
1296
1258
not_ancestor_id=not_ancestor_id)
1299
class AmbiguousBase(BzrError):
1301
def __init__(self, bases):
1302
symbol_versioning.warn("BzrError AmbiguousBase has been deprecated "
1303
"as of bzrlib 0.8.", DeprecationWarning, stacklevel=2)
1304
msg = ("The correct base is unclear, because %s are all equally close"
1306
BzrError.__init__(self, msg)
1310
1261
class NoCommits(BranchError):
1312
1263
_fmt = "Branch %(branch)s has no commits."
1728
1686
TransportError.__init__(self, msg, orig_error=orig_error)
1689
class CertificateError(TransportError):
1691
_fmt = "Certificate error: %(error)s"
1693
def __init__(self, error):
1731
1697
class InvalidHttpRange(InvalidHttpResponse):
1733
1699
_fmt = "Invalid http range %(range)r for %(path)s: %(msg)s"
1737
1703
InvalidHttpResponse.__init__(self, path, msg)
1706
class HttpBoundaryMissing(InvalidHttpResponse):
1707
"""A multipart response ends with no boundary marker.
1709
This is a special case caused by buggy proxies, described in
1710
<https://bugs.launchpad.net/bzr/+bug/198646>.
1713
_fmt = "HTTP MIME Boundary missing for %(path)s: %(msg)s"
1715
def __init__(self, path, msg):
1716
InvalidHttpResponse.__init__(self, path, msg)
1740
1719
class InvalidHttpContentType(InvalidHttpResponse):
1742
1721
_fmt = 'Invalid http Content-type "%(ctype)s" for %(path)s: %(msg)s'
1789
1768
self.errors = '\n'.join(e.msg for e in errors)
1771
class ConfigOptionValueError(BzrError):
1773
_fmt = ('Bad value "%(value)s" for option "%(name)s".\n'
1774
'See ``bzr help %(name)s``')
1776
def __init__(self, name, value):
1777
BzrError.__init__(self, name=name, value=value)
1792
1780
class NoEmailInUsername(BzrError):
1794
1782
_fmt = "%(username)r does not seem to contain a reasonable email address"
2051
2039
BzrMoveFailedError.__init__(self, from_path, to_path, extra)
2054
class BzrRemoveChangedFilesError(BzrError):
2055
"""Used when user is trying to remove changed files."""
2057
_fmt = ("Can't safely remove modified or unknown files:\n"
2058
"%(changes_as_text)s"
2059
"Use --keep to not delete them, or --force to delete them regardless.")
2061
def __init__(self, tree_delta):
2062
symbol_versioning.warn(symbol_versioning.deprecated_in((2, 3, 0)) %
2063
"BzrRemoveChangedFilesError", DeprecationWarning, stacklevel=2)
2064
BzrError.__init__(self)
2065
self.changes_as_text = tree_delta.get_changes_as_text()
2066
#self.paths_as_string = '\n'.join(changed_files)
2067
#self.paths_as_string = '\n'.join([quotefn(p) for p in changed_files])
2070
2042
class BzrBadParameterNotString(BzrBadParameter):
2072
2044
_fmt = "Parameter %(param)s is not a string or unicode string."
2797
2777
_fmt = "No mail-to address (--mail-to) or output (-o) specified."
2800
class UnknownMailClient(BzrError):
2802
_fmt = "Unknown mail client: %(mail_client)s"
2804
def __init__(self, mail_client):
2805
BzrError.__init__(self, mail_client=mail_client)
2808
2780
class MailClientNotFound(BzrError):
2810
2782
_fmt = "Unable to find mail client with the following names:"\
3065
3037
BzrError.__init__(self, unknowns_str=", ".join(unknowns))
3068
class HookFailed(BzrError):
3069
"""Raised when a pre_change_branch_tip hook function fails anything other
3070
than TipChangeRejected.
3072
Note that this exception is no longer raised, and the import is only left
3073
to be nice to code which might catch it in a plugin.
3076
_fmt = ("Hook '%(hook_name)s' during %(hook_stage)s failed:\n"
3077
"%(traceback_text)s%(exc_value)s")
3079
def __init__(self, hook_stage, hook_name, exc_info, warn=True):
3081
symbol_versioning.warn("BzrError HookFailed has been deprecated "
3082
"as of bzrlib 2.1.", DeprecationWarning, stacklevel=2)
3084
self.hook_stage = hook_stage
3085
self.hook_name = hook_name
3086
self.exc_info = exc_info
3087
self.exc_type = exc_info[0]
3088
self.exc_value = exc_info[1]
3089
self.exc_tb = exc_info[2]
3090
self.traceback_text = ''.join(traceback.format_tb(self.exc_tb))
3093
3040
class TipChangeRejected(BzrError):
3094
3041
"""A pre_change_branch_tip hook function may raise this to cleanly and
3095
3042
explicitly abort a change to a branch tip.
3303
3250
def __init__(self, source, target):
3304
3251
self.source = source
3305
3252
self.target = target
3255
class HpssVfsRequestNotAllowed(BzrError):
3257
_fmt = ("VFS requests over the smart server are not allowed. Encountered: "
3258
"%(method)s, %(arguments)s.")
3260
def __init__(self, method, arguments):
3261
self.method = method
3262
self.arguments = arguments
3265
class UnsupportedKindChange(BzrError):
3267
_fmt = ("Kind change from %(from_kind)s to %(to_kind)s for "
3268
"%(path)s not supported by format %(format)r")
3270
def __init__(self, path, from_kind, to_kind, format):
3272
self.from_kind = from_kind
3273
self.to_kind = to_kind
3274
self.format = format
3277
class MissingFeature(BzrError):
3279
_fmt = ("Missing feature %(feature)s not provided by this "
3280
"version of Bazaar or any plugin.")
3282
def __init__(self, feature):
3283
self.feature = feature
3286
class PatchSyntax(BzrError):
3287
"""Base class for patch syntax errors."""
3290
class BinaryFiles(BzrError):
3292
_fmt = 'Binary files section encountered.'
3294
def __init__(self, orig_name, mod_name):
3295
self.orig_name = orig_name
3296
self.mod_name = mod_name
3299
class MalformedPatchHeader(PatchSyntax):
3301
_fmt = "Malformed patch header. %(desc)s\n%(line)r"
3303
def __init__(self, desc, line):
3308
class MalformedHunkHeader(PatchSyntax):
3310
_fmt = "Malformed hunk header. %(desc)s\n%(line)r"
3312
def __init__(self, desc, line):
3317
class MalformedLine(PatchSyntax):
3319
_fmt = "Malformed line. %(desc)s\n%(line)r"
3321
def __init__(self, desc, line):
3326
class PatchConflict(BzrError):
3328
_fmt = ('Text contents mismatch at line %(line_no)d. Original has '
3329
'"%(orig_line)s", but patch says it should be "%(patch_line)s"')
3331
def __init__(self, line_no, orig_line, patch_line):
3332
self.line_no = line_no
3333
self.orig_line = orig_line.rstrip('\n')
3334
self.patch_line = patch_line.rstrip('\n')
3337
class FeatureAlreadyRegistered(BzrError):
3339
_fmt = 'The feature %(feature)s has already been registered.'
3341
def __init__(self, feature):
3342
self.feature = feature