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 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:"\
2921
2893
BzrError.__init__(self, tree=tree, display_url=display_url, more=more)
2896
class StoringUncommittedNotSupported(BzrError):
2898
_fmt = ('Branch "%(display_url)s" does not support storing uncommitted'
2901
def __init__(self, branch):
2902
import bzrlib.urlutils as urlutils
2903
user_url = getattr(branch, "user_url", None)
2904
if user_url is None:
2905
display_url = str(branch)
2907
display_url = urlutils.unescape_for_display(user_url, 'ascii')
2908
BzrError.__init__(self, branch=branch, display_url=display_url)
2924
2911
class ShelvedChanges(UncommittedChanges):
2926
2913
_fmt = ('Working tree "%(display_url)s" has shelved changes'
3065
3052
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
3055
class TipChangeRejected(BzrError):
3094
3056
"""A pre_change_branch_tip hook function may raise this to cleanly and
3095
3057
explicitly abort a change to a branch tip.
3289
3251
class ExpandingUnknownOption(BzrError):
3291
_fmt = 'Option %(name)s is not defined while expanding "%(string)s".'
3253
_fmt = 'Option "%(name)s" is not defined while expanding "%(string)s".'
3293
3255
def __init__(self, name, string):
3294
3256
self.name = name
3295
3257
self.string = string
3260
class IllegalOptionName(BzrError):
3262
_fmt = 'Option "%(name)s" is not allowed.'
3264
def __init__(self, name):
3298
3268
class NoCompatibleInter(BzrError):
3300
3270
_fmt = ('No compatible object available for operations from %(source)r '
3303
3273
def __init__(self, source, target):
3304
3274
self.source = source
3305
3275
self.target = target
3278
class HpssVfsRequestNotAllowed(BzrError):
3280
_fmt = ("VFS requests over the smart server are not allowed. Encountered: "
3281
"%(method)s, %(arguments)s.")
3283
def __init__(self, method, arguments):
3284
self.method = method
3285
self.arguments = arguments
3288
class UnsupportedKindChange(BzrError):
3290
_fmt = ("Kind change from %(from_kind)s to %(to_kind)s for "
3291
"%(path)s not supported by format %(format)r")
3293
def __init__(self, path, from_kind, to_kind, format):
3295
self.from_kind = from_kind
3296
self.to_kind = to_kind
3297
self.format = format
3300
class MissingFeature(BzrError):
3302
_fmt = ("Missing feature %(feature)s not provided by this "
3303
"version of Bazaar or any plugin.")
3305
def __init__(self, feature):
3306
self.feature = feature
3309
class PatchSyntax(BzrError):
3310
"""Base class for patch syntax errors."""
3313
class BinaryFiles(BzrError):
3315
_fmt = 'Binary files section encountered.'
3317
def __init__(self, orig_name, mod_name):
3318
self.orig_name = orig_name
3319
self.mod_name = mod_name
3322
class MalformedPatchHeader(PatchSyntax):
3324
_fmt = "Malformed patch header. %(desc)s\n%(line)r"
3326
def __init__(self, desc, line):
3331
class MalformedHunkHeader(PatchSyntax):
3333
_fmt = "Malformed hunk header. %(desc)s\n%(line)r"
3335
def __init__(self, desc, line):
3340
class MalformedLine(PatchSyntax):
3342
_fmt = "Malformed line. %(desc)s\n%(line)r"
3344
def __init__(self, desc, line):
3349
class PatchConflict(BzrError):
3351
_fmt = ('Text contents mismatch at line %(line_no)d. Original has '
3352
'"%(orig_line)s", but patch says it should be "%(patch_line)s"')
3354
def __init__(self, line_no, orig_line, patch_line):
3355
self.line_no = line_no
3356
self.orig_line = orig_line.rstrip('\n')
3357
self.patch_line = patch_line.rstrip('\n')
3360
class FeatureAlreadyRegistered(BzrError):
3362
_fmt = 'The feature %(feature)s has already been registered.'
3364
def __init__(self, feature):
3365
self.feature = feature
3368
class ChangesAlreadyStored(BzrCommandError):
3370
_fmt = ('Cannot store uncommitted changes because this branch already'
3371
' stores uncommitted changes.')