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."
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 ParentBranchExists(AlreadyBranchError):
715
_fmt = 'Parent branch already exists: "%(path)s".'
759
718
class BranchExistsWithoutWorkingTree(PathError):
761
720
_fmt = 'Directory contains a branch, but no working tree \
790
749
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
752
class UnsupportedFormatError(BzrError):
808
754
_fmt = "Unsupported branch format: %(format)s\nPlease run 'bzr upgrade'"
827
773
self.bzrdir = bzrdir_format
776
class ParseFormatError(BzrError):
778
_fmt = "Parse error on line %(lineno)d of %(format)s format: %(line)s"
780
def __init__(self, format, lineno, line, text):
781
BzrError.__init__(self)
830
788
class IncompatibleRepositories(BzrError):
831
789
"""Report an error that two repositories are not compatible.
1296
1249
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
1252
class NoCommits(BranchError):
1312
1254
_fmt = "Branch %(branch)s has no commits."
1728
1677
TransportError.__init__(self, msg, orig_error=orig_error)
1680
class CertificateError(TransportError):
1682
_fmt = "Certificate error: %(error)s"
1684
def __init__(self, error):
1731
1688
class InvalidHttpRange(InvalidHttpResponse):
1733
1690
_fmt = "Invalid http range %(range)r for %(path)s: %(msg)s"
1805
1762
class ConfigOptionValueError(BzrError):
1807
_fmt = """Bad value "%(value)s" for option "%(name)s"."""
1764
_fmt = ('Bad value "%(value)s" for option "%(name)s".\n'
1765
'See ``bzr help %(name)s``')
1809
1767
def __init__(self, name, value):
1810
1768
BzrError.__init__(self, name=name, value=value)
2072
2030
BzrMoveFailedError.__init__(self, from_path, to_path, extra)
2075
class BzrRemoveChangedFilesError(BzrError):
2076
"""Used when user is trying to remove changed files."""
2078
_fmt = ("Can't safely remove modified or unknown files:\n"
2079
"%(changes_as_text)s"
2080
"Use --keep to not delete them, or --force to delete them regardless.")
2082
def __init__(self, tree_delta):
2083
symbol_versioning.warn(symbol_versioning.deprecated_in((2, 3, 0)) %
2084
"BzrRemoveChangedFilesError", DeprecationWarning, stacklevel=2)
2085
BzrError.__init__(self)
2086
self.changes_as_text = tree_delta.get_changes_as_text()
2087
#self.paths_as_string = '\n'.join(changed_files)
2088
#self.paths_as_string = '\n'.join([quotefn(p) for p in changed_files])
2091
2033
class BzrBadParameterNotString(BzrBadParameter):
2093
2035
_fmt = "Parameter %(param)s is not a string or unicode string."
3086
3036
BzrError.__init__(self, unknowns_str=", ".join(unknowns))
3089
class HookFailed(BzrError):
3090
"""Raised when a pre_change_branch_tip hook function fails anything other
3091
than TipChangeRejected.
3093
Note that this exception is no longer raised, and the import is only left
3094
to be nice to code which might catch it in a plugin.
3097
_fmt = ("Hook '%(hook_name)s' during %(hook_stage)s failed:\n"
3098
"%(traceback_text)s%(exc_value)s")
3100
def __init__(self, hook_stage, hook_name, exc_info, warn=True):
3102
symbol_versioning.warn("BzrError HookFailed has been deprecated "
3103
"as of bzrlib 2.1.", DeprecationWarning, stacklevel=2)
3105
self.hook_stage = hook_stage
3106
self.hook_name = hook_name
3107
self.exc_info = exc_info
3108
self.exc_type = exc_info[0]
3109
self.exc_value = exc_info[1]
3110
self.exc_tb = exc_info[2]
3111
self.traceback_text = ''.join(traceback.format_tb(self.exc_tb))
3114
3039
class TipChangeRejected(BzrError):
3115
3040
"""A pre_change_branch_tip hook function may raise this to cleanly and
3116
3041
explicitly abort a change to a branch tip.
3324
3249
def __init__(self, source, target):
3325
3250
self.source = source
3326
3251
self.target = target
3254
class HpssVfsRequestNotAllowed(BzrError):
3256
_fmt = ("VFS requests over the smart server are not allowed. Encountered: "
3257
"%(method)s, %(arguments)s.")
3259
def __init__(self, method, arguments):
3260
self.method = method
3261
self.arguments = arguments
3264
class UnsupportedKindChange(BzrError):
3266
_fmt = ("Kind change from %(from_kind)s to %(to_kind)s for "
3267
"%(path)s not supported by format %(format)r")
3269
def __init__(self, path, from_kind, to_kind, format):
3271
self.from_kind = from_kind
3272
self.to_kind = to_kind
3273
self.format = format
3276
class MissingFeature(BzrError):
3278
_fmt = ("Missing feature %(feature)s not provided by this "
3279
"version of Bazaar or any plugin.")
3281
def __init__(self, feature):
3282
self.feature = feature
3285
class PatchSyntax(BzrError):
3286
"""Base class for patch syntax errors."""
3289
class BinaryFiles(BzrError):
3291
_fmt = 'Binary files section encountered.'
3293
def __init__(self, orig_name, mod_name):
3294
self.orig_name = orig_name
3295
self.mod_name = mod_name
3298
class MalformedPatchHeader(PatchSyntax):
3300
_fmt = "Malformed patch header. %(desc)s\n%(line)r"
3302
def __init__(self, desc, line):
3307
class MalformedHunkHeader(PatchSyntax):
3309
_fmt = "Malformed hunk header. %(desc)s\n%(line)r"
3311
def __init__(self, desc, line):
3316
class MalformedLine(PatchSyntax):
3318
_fmt = "Malformed line. %(desc)s\n%(line)r"
3320
def __init__(self, desc, line):
3325
class PatchConflict(BzrError):
3327
_fmt = ('Text contents mismatch at line %(line_no)d. Original has '
3328
'"%(orig_line)s", but patch says it should be "%(patch_line)s"')
3330
def __init__(self, line_no, orig_line, patch_line):
3331
self.line_no = line_no
3332
self.orig_line = orig_line.rstrip('\n')
3333
self.patch_line = patch_line.rstrip('\n')
3336
class FeatureAlreadyRegistered(BzrError):
3338
_fmt = 'The feature %(feature)s has already been registered.'
3340
def __init__(self, feature):
3341
self.feature = feature