95
106
# __str__() should always return a 'str' object
96
107
# never a 'unicode' object.
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),
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),
108
116
def __unicode__(self):
109
117
u = self._format()
132
140
"""Return format string for this exception or None"""
133
141
fmt = getattr(self, '_fmt', None)
134
142
if fmt is not None:
135
from bzrlib.i18n import gettext
136
return gettext(unicode(fmt)) # _fmt strings should be ascii
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),
138
156
def __eq__(self, other):
139
157
if self.__class__ is not other.__class__:
152
170
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__,
155
206
class AlreadyBuilding(BzrError):
157
208
_fmt = "The tree builder is already building a tree."
1168
1180
class InvalidRevisionSpec(BzrError):
1170
1182
_fmt = ("Requested revision: '%(spec)s' does not exist in branch:"
1171
" %(branch_url)s%(extra)s")
1183
" %(branch)s%(extra)s")
1173
1185
def __init__(self, spec, branch, extra=None):
1174
1186
BzrError.__init__(self, branch=branch, spec=spec)
1175
self.branch_url = getattr(branch, 'user_url', str(branch))
1177
1188
self.extra = '\n' + str(extra)
1179
1190
self.extra = ''
1193
class HistoryMissing(BzrError):
1195
_fmt = "%(branch)s is missing %(object_type)s {%(object_id)s}"
1182
1198
class AppendRevisionsOnlyViolation(BzrError):
1184
1200
_fmt = ('Operation denied because it would change the main history,'
1665
1685
class InvalidHttpResponse(TransportError):
1667
_fmt = "Invalid http response for %(path)s: %(msg)s%(orig_error)s"
1687
_fmt = "Invalid http response for %(path)s: %(msg)s"
1669
1689
def __init__(self, path, msg, orig_error=None):
1670
1690
self.path = path
1671
if orig_error is None:
1674
# This is reached for obscure and unusual errors so we want to
1675
# preserve as much info as possible to ease debug.
1676
orig_error = ': %r' % (orig_error,)
1677
1691
TransportError.__init__(self, msg, orig_error=orig_error)
1680
class CertificateError(TransportError):
1682
_fmt = "Certificate error: %(error)s"
1684
def __init__(self, error):
1688
1694
class InvalidHttpRange(InvalidHttpResponse):
1690
1696
_fmt = "Invalid http range %(range)r for %(path)s: %(msg)s"
1694
1700
InvalidHttpResponse.__init__(self, path, msg)
1697
class HttpBoundaryMissing(InvalidHttpResponse):
1698
"""A multipart response ends with no boundary marker.
1700
This is a special case caused by buggy proxies, described in
1701
<https://bugs.launchpad.net/bzr/+bug/198646>.
1704
_fmt = "HTTP MIME Boundary missing for %(path)s: %(msg)s"
1706
def __init__(self, path, msg):
1707
InvalidHttpResponse.__init__(self, path, msg)
1710
1703
class InvalidHttpContentType(InvalidHttpResponse):
1712
1705
_fmt = 'Invalid http Content-type "%(ctype)s" for %(path)s: %(msg)s'
1740
1733
_fmt = "Working tree has conflicts."
1743
class ConfigContentError(BzrError):
1745
_fmt = "Config file %(filename)s is not UTF-8 encoded\n"
1747
def __init__(self, filename):
1748
BzrError.__init__(self)
1749
self.filename = filename
1752
1736
class ParseConfigError(BzrError):
1754
_fmt = "Error(s) parsing config file %(filename)s:\n%(errors)s"
1756
1738
def __init__(self, errors, filename):
1757
BzrError.__init__(self)
1758
self.filename = filename
1759
self.errors = '\n'.join(e.msg for e in errors)
1762
class ConfigOptionValueError(BzrError):
1764
_fmt = """Bad value "%(value)s" for option "%(name)s"."""
1766
def __init__(self, name, value):
1767
BzrError.__init__(self, name=name, value=value)
1739
if filename is None:
1741
message = "Error(s) parsing config file %s:\n%s" % \
1742
(filename, ('\n'.join(e.msg for e in errors)))
1743
BzrError.__init__(self, message)
1770
1746
class NoEmailInUsername(BzrError):
1779
1755
class SigningFailed(BzrError):
1781
_fmt = 'Failed to GPG sign data with command "%(command_line)s"'
1757
_fmt = 'Failed to gpg sign data with command "%(command_line)s"'
1783
1759
def __init__(self, command_line):
1784
1760
BzrError.__init__(self, command_line=command_line)
1787
class SignatureVerificationFailed(BzrError):
1789
_fmt = 'Failed to verify GPG signature data with error "%(error)s"'
1791
def __init__(self, error):
1792
BzrError.__init__(self, error=error)
1795
class DependencyNotPresent(BzrError):
1797
_fmt = 'Unable to import library "%(library)s": %(error)s'
1799
def __init__(self, library, error):
1800
BzrError.__init__(self, library=library, error=error)
1803
class GpgmeNotInstalled(DependencyNotPresent):
1805
_fmt = 'python-gpgme is not installed, it is needed to verify signatures'
1807
def __init__(self, error):
1808
DependencyNotPresent.__init__(self, 'gpgme', error)
1811
1763
class WorkingTreeNotRevision(BzrError):
1813
1765
_fmt = ("The working tree for %(basedir)s has changed since"
1973
1925
_fmt = "Moving the root directory is not supported at this time"
1976
class TransformRenameFailed(BzrError):
1978
_fmt = "Failed to rename %(from_path)s to %(to_path)s: %(why)s"
1980
def __init__(self, from_path, to_path, why, errno):
1981
self.from_path = from_path
1982
self.to_path = to_path
1987
1928
class BzrMoveFailedError(BzrError):
1989
_fmt = ("Could not move %(from_path)s%(operator)s %(to_path)s"
1990
"%(_has_extra)s%(extra)s")
1930
_fmt = "Could not move %(from_path)s%(operator)s %(to_path)s%(extra)s"
1992
1932
def __init__(self, from_path='', to_path='', extra=None):
1993
1933
from bzrlib.osutils import splitpath
1994
1934
BzrError.__init__(self)
1996
self.extra, self._has_extra = extra, ': '
1936
self.extra = ': ' + str(extra)
1998
self.extra = self._has_extra = ''
2000
1940
has_from = len(from_path) > 0
2001
1941
has_to = len(to_path) > 0
2023
1963
class BzrRenameFailedError(BzrMoveFailedError):
2025
_fmt = ("Could not rename %(from_path)s%(operator)s %(to_path)s"
2026
"%(_has_extra)s%(extra)s")
1965
_fmt = "Could not rename %(from_path)s%(operator)s %(to_path)s%(extra)s"
2028
1967
def __init__(self, from_path, to_path, extra=None):
2029
1968
BzrMoveFailedError.__init__(self, from_path, to_path, extra)
1970
class BzrRemoveChangedFilesError(BzrError):
1971
"""Used when user is trying to remove changed files."""
1973
_fmt = ("Can't safely remove modified or unknown files:\n"
1974
"%(changes_as_text)s"
1975
"Use --keep to not delete them, or --force to delete them regardless.")
1977
def __init__(self, tree_delta):
1978
BzrError.__init__(self)
1979
self.changes_as_text = tree_delta.get_changes_as_text()
1980
#self.paths_as_string = '\n'.join(changed_files)
1981
#self.paths_as_string = '\n'.join([quotefn(p) for p in changed_files])
2032
1984
class BzrBadParameterNotString(BzrBadParameter):
2667
2619
This is distinct from ErrorFromSmartServer so that it is possible to
2668
2620
distinguish between the following two cases:
2670
- ErrorFromSmartServer was uncaught. This is logic error in the client
2671
and so should provoke a traceback to the user.
2672
- ErrorFromSmartServer was caught but its error_tuple could not be
2673
translated. This is probably because the server sent us garbage, and
2674
should not provoke a traceback.
2621
- ErrorFromSmartServer was uncaught. This is logic error in the client
2622
and so should provoke a traceback to the user.
2623
- ErrorFromSmartServer was caught but its error_tuple could not be
2624
translated. This is probably because the server sent us garbage, and
2625
should not provoke a traceback.
2677
2628
_fmt = "Server sent an unexpected error: %(error_tuple)r"
2884
2835
more = ' ' + more
2885
2836
import bzrlib.urlutils as urlutils
2886
user_url = getattr(tree, "user_url", None)
2887
if user_url is None:
2888
display_url = str(tree)
2890
display_url = urlutils.unescape_for_display(user_url, 'ascii')
2837
display_url = urlutils.unescape_for_display(
2838
tree.user_url, 'ascii')
2891
2839
BzrError.__init__(self, tree=tree, display_url=display_url, more=more)
2894
class ShelvedChanges(UncommittedChanges):
2896
_fmt = ('Working tree "%(display_url)s" has shelved changes'
2897
' (See bzr shelve --list).%(more)s')
2900
2842
class MissingTemplateVariable(BzrError):
2902
2844
_fmt = 'Variable {%(name)s} is not available.'
2968
2910
from bzrlib.osutils import get_user_encoding
2969
2911
self.path = path
2970
2912
self.kind = kind
2971
self.user_encoding = get_user_encoding()
2974
class NoSuchConfig(BzrError):
2976
_fmt = ('The "%(config_id)s" configuration does not exist.')
2978
def __init__(self, config_id):
2979
BzrError.__init__(self, config_id=config_id)
2982
class NoSuchConfigOption(BzrError):
2984
_fmt = ('The "%(option_name)s" configuration option does not exist.')
2986
def __init__(self, option_name):
2987
BzrError.__init__(self, option_name=option_name)
2913
self.user_encoding = osutils.get_user_encoding()
2990
2916
class NoSuchAlias(BzrError):
3035
2961
BzrError.__init__(self, unknowns_str=", ".join(unknowns))
2964
class HookFailed(BzrError):
2965
"""Raised when a pre_change_branch_tip hook function fails anything other
2966
than TipChangeRejected.
2968
Note that this exception is no longer raised, and the import is only left
2969
to be nice to code which might catch it in a plugin.
2972
_fmt = ("Hook '%(hook_name)s' during %(hook_stage)s failed:\n"
2973
"%(traceback_text)s%(exc_value)s")
2975
def __init__(self, hook_stage, hook_name, exc_info, warn=True):
2977
symbol_versioning.warn("BzrError HookFailed has been deprecated "
2978
"as of bzrlib 2.1.", DeprecationWarning, stacklevel=2)
2980
self.hook_stage = hook_stage
2981
self.hook_name = hook_name
2982
self.exc_info = exc_info
2983
self.exc_type = exc_info[0]
2984
self.exc_value = exc_info[1]
2985
self.exc_tb = exc_info[2]
2986
self.traceback_text = ''.join(traceback.format_tb(self.exc_tb))
3038
2989
class TipChangeRejected(BzrError):
3039
2990
"""A pre_change_branch_tip hook function may raise this to cleanly and
3040
2991
explicitly abort a change to a branch tip.
3195
3134
def __init__(self, bzrdir):
3196
3135
self.bzrdir = bzrdir
3199
class NoWhoami(BzrError):
3201
_fmt = ('Unable to determine your name.\n'
3202
"Please, set your name with the 'whoami' command.\n"
3203
'E.g. bzr whoami "Your Name <name@example.com>"')
3206
class InvalidPattern(BzrError):
3208
_fmt = ('Invalid pattern(s) found. %(msg)s')
3210
def __init__(self, msg):
3214
class RecursiveBind(BzrError):
3216
_fmt = ('Branch "%(branch_url)s" appears to be bound to itself. '
3217
'Please use `bzr unbind` to fix.')
3219
def __init__(self, branch_url):
3220
self.branch_url = branch_url
3223
# FIXME: I would prefer to define the config related exception classes in
3224
# config.py but the lazy import mechanism proscribes this -- vila 20101222
3225
class OptionExpansionLoop(BzrError):
3227
_fmt = 'Loop involving %(refs)r while expanding "%(string)s".'
3229
def __init__(self, string, refs):
3230
self.string = string
3231
self.refs = '->'.join(refs)
3234
class ExpandingUnknownOption(BzrError):
3236
_fmt = 'Option %(name)s is not defined while expanding "%(string)s".'
3238
def __init__(self, name, string):
3240
self.string = string
3243
class NoCompatibleInter(BzrError):
3245
_fmt = ('No compatible object available for operations from %(source)r '
3248
def __init__(self, source, target):
3249
self.source = source
3250
self.target = target
3253
class HpssVfsRequestNotAllowed(BzrError):
3255
_fmt = ("VFS requests over the smart server are not allowed. Encountered: "
3256
"%(method)s, %(arguments)s.")
3258
def __init__(self, method, arguments):
3259
self.method = method
3260
self.arguments = arguments
3263
class UnsupportedKindChange(BzrError):
3265
_fmt = ("Kind change from %(from_kind)s to %(to_kind)s for "
3266
"%(path)s not supported by format %(format)r")
3268
def __init__(self, path, from_kind, to_kind, format):
3270
self.from_kind = from_kind
3271
self.to_kind = to_kind
3272
self.format = format
3275
class MissingFeature(BzrError):
3277
_fmt = ("Missing feature %(feature)s not provided by this "
3278
"version of Bazaar or any plugin.")
3280
def __init__(self, feature):
3281
self.feature = feature
3284
class PatchSyntax(BzrError):
3285
"""Base class for patch syntax errors."""
3288
class BinaryFiles(BzrError):
3290
_fmt = 'Binary files section encountered.'
3292
def __init__(self, orig_name, mod_name):
3293
self.orig_name = orig_name
3294
self.mod_name = mod_name
3297
class MalformedPatchHeader(PatchSyntax):
3299
_fmt = "Malformed patch header. %(desc)s\n%(line)r"
3301
def __init__(self, desc, line):
3306
class MalformedHunkHeader(PatchSyntax):
3308
_fmt = "Malformed hunk header. %(desc)s\n%(line)r"
3310
def __init__(self, desc, line):
3315
class MalformedLine(PatchSyntax):
3317
_fmt = "Malformed line. %(desc)s\n%(line)r"
3319
def __init__(self, desc, line):
3324
class PatchConflict(BzrError):
3326
_fmt = ('Text contents mismatch at line %(line_no)d. Original has '
3327
'"%(orig_line)s", but patch says it should be "%(patch_line)s"')
3329
def __init__(self, line_no, orig_line, patch_line):
3330
self.line_no = line_no
3331
self.orig_line = orig_line.rstrip('\n')
3332
self.patch_line = patch_line.rstrip('\n')
3335
class FeatureAlreadyRegistered(BzrError):
3337
_fmt = 'The feature %(feature)s has already been registered.'
3339
def __init__(self, feature):
3340
self.feature = feature