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."
1180
1168
class InvalidRevisionSpec(BzrError):
1182
1170
_fmt = ("Requested revision: '%(spec)s' does not exist in branch:"
1183
" %(branch)s%(extra)s")
1171
" %(branch_url)s%(extra)s")
1185
1173
def __init__(self, spec, branch, extra=None):
1186
1174
BzrError.__init__(self, branch=branch, spec=spec)
1175
self.branch_url = getattr(branch, 'user_url', str(branch))
1188
1177
self.extra = '\n' + str(extra)
1190
1179
self.extra = ''
1193
class HistoryMissing(BzrError):
1195
_fmt = "%(branch)s is missing %(object_type)s {%(object_id)s}"
1198
1182
class AppendRevisionsOnlyViolation(BzrError):
1200
1184
_fmt = ('Operation denied because it would change the main history,'
1685
1665
class InvalidHttpResponse(TransportError):
1687
_fmt = "Invalid http response for %(path)s: %(msg)s"
1667
_fmt = "Invalid http response for %(path)s: %(msg)s%(orig_error)s"
1689
1669
def __init__(self, path, msg, orig_error=None):
1690
1670
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,)
1691
1677
TransportError.__init__(self, msg, orig_error=orig_error)
1680
class CertificateError(TransportError):
1682
_fmt = "Certificate error: %(error)s"
1684
def __init__(self, error):
1694
1688
class InvalidHttpRange(InvalidHttpResponse):
1696
1690
_fmt = "Invalid http range %(range)r for %(path)s: %(msg)s"
1700
1694
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)
1703
1710
class InvalidHttpContentType(InvalidHttpResponse):
1705
1712
_fmt = 'Invalid http Content-type "%(ctype)s" for %(path)s: %(msg)s'
1733
1740
_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
1736
1752
class ParseConfigError(BzrError):
1754
_fmt = "Error(s) parsing config file %(filename)s:\n%(errors)s"
1738
1756
def __init__(self, errors, filename):
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)
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".\n'
1765
'See ``bzr help %(name)s``')
1767
def __init__(self, name, value):
1768
BzrError.__init__(self, name=name, value=value)
1746
1771
class NoEmailInUsername(BzrError):
1755
1780
class SigningFailed(BzrError):
1757
_fmt = 'Failed to gpg sign data with command "%(command_line)s"'
1782
_fmt = 'Failed to GPG sign data with command "%(command_line)s"'
1759
1784
def __init__(self, command_line):
1760
1785
BzrError.__init__(self, command_line=command_line)
1788
class SignatureVerificationFailed(BzrError):
1790
_fmt = 'Failed to verify GPG signature data with error "%(error)s"'
1792
def __init__(self, error):
1793
BzrError.__init__(self, error=error)
1796
class DependencyNotPresent(BzrError):
1798
_fmt = 'Unable to import library "%(library)s": %(error)s'
1800
def __init__(self, library, error):
1801
BzrError.__init__(self, library=library, error=error)
1804
class GpgmeNotInstalled(DependencyNotPresent):
1806
_fmt = 'python-gpgme is not installed, it is needed to verify signatures'
1808
def __init__(self, error):
1809
DependencyNotPresent.__init__(self, 'gpgme', error)
1763
1812
class WorkingTreeNotRevision(BzrError):
1765
1814
_fmt = ("The working tree for %(basedir)s has changed since"
1925
1974
_fmt = "Moving the root directory is not supported at this time"
1977
class TransformRenameFailed(BzrError):
1979
_fmt = "Failed to rename %(from_path)s to %(to_path)s: %(why)s"
1981
def __init__(self, from_path, to_path, why, errno):
1982
self.from_path = from_path
1983
self.to_path = to_path
1928
1988
class BzrMoveFailedError(BzrError):
1930
_fmt = "Could not move %(from_path)s%(operator)s %(to_path)s%(extra)s"
1990
_fmt = ("Could not move %(from_path)s%(operator)s %(to_path)s"
1991
"%(_has_extra)s%(extra)s")
1932
1993
def __init__(self, from_path='', to_path='', extra=None):
1933
1994
from bzrlib.osutils import splitpath
1934
1995
BzrError.__init__(self)
1936
self.extra = ': ' + str(extra)
1997
self.extra, self._has_extra = extra, ': '
1999
self.extra = self._has_extra = ''
1940
2001
has_from = len(from_path) > 0
1941
2002
has_to = len(to_path) > 0
1963
2024
class BzrRenameFailedError(BzrMoveFailedError):
1965
_fmt = "Could not rename %(from_path)s%(operator)s %(to_path)s%(extra)s"
2026
_fmt = ("Could not rename %(from_path)s%(operator)s %(to_path)s"
2027
"%(_has_extra)s%(extra)s")
1967
2029
def __init__(self, from_path, to_path, extra=None):
1968
2030
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])
1984
2033
class BzrBadParameterNotString(BzrBadParameter):
2619
2668
This is distinct from ErrorFromSmartServer so that it is possible to
2620
2669
distinguish between the following two cases:
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.
2671
- ErrorFromSmartServer was uncaught. This is logic error in the client
2672
and so should provoke a traceback to the user.
2673
- ErrorFromSmartServer was caught but its error_tuple could not be
2674
translated. This is probably because the server sent us garbage, and
2675
should not provoke a traceback.
2628
2678
_fmt = "Server sent an unexpected error: %(error_tuple)r"
2835
2885
more = ' ' + more
2836
2886
import bzrlib.urlutils as urlutils
2837
display_url = urlutils.unescape_for_display(
2838
tree.user_url, 'ascii')
2887
user_url = getattr(tree, "user_url", None)
2888
if user_url is None:
2889
display_url = str(tree)
2891
display_url = urlutils.unescape_for_display(user_url, 'ascii')
2839
2892
BzrError.__init__(self, tree=tree, display_url=display_url, more=more)
2895
class ShelvedChanges(UncommittedChanges):
2897
_fmt = ('Working tree "%(display_url)s" has shelved changes'
2898
' (See bzr shelve --list).%(more)s')
2842
2901
class MissingTemplateVariable(BzrError):
2844
2903
_fmt = 'Variable {%(name)s} is not available.'
2910
2969
from bzrlib.osutils import get_user_encoding
2911
2970
self.path = path
2912
2971
self.kind = kind
2913
self.user_encoding = osutils.get_user_encoding()
2972
self.user_encoding = get_user_encoding()
2975
class NoSuchConfig(BzrError):
2977
_fmt = ('The "%(config_id)s" configuration does not exist.')
2979
def __init__(self, config_id):
2980
BzrError.__init__(self, config_id=config_id)
2983
class NoSuchConfigOption(BzrError):
2985
_fmt = ('The "%(option_name)s" configuration option does not exist.')
2987
def __init__(self, option_name):
2988
BzrError.__init__(self, option_name=option_name)
2916
2991
class NoSuchAlias(BzrError):
2961
3036
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))
2989
3039
class TipChangeRejected(BzrError):
2990
3040
"""A pre_change_branch_tip hook function may raise this to cleanly and
2991
3041
explicitly abort a change to a branch tip.
3134
3196
def __init__(self, bzrdir):
3135
3197
self.bzrdir = bzrdir
3200
class NoWhoami(BzrError):
3202
_fmt = ('Unable to determine your name.\n'
3203
"Please, set your name with the 'whoami' command.\n"
3204
'E.g. bzr whoami "Your Name <name@example.com>"')
3207
class InvalidPattern(BzrError):
3209
_fmt = ('Invalid pattern(s) found. %(msg)s')
3211
def __init__(self, msg):
3215
class RecursiveBind(BzrError):
3217
_fmt = ('Branch "%(branch_url)s" appears to be bound to itself. '
3218
'Please use `bzr unbind` to fix.')
3220
def __init__(self, branch_url):
3221
self.branch_url = branch_url
3224
# FIXME: I would prefer to define the config related exception classes in
3225
# config.py but the lazy import mechanism proscribes this -- vila 20101222
3226
class OptionExpansionLoop(BzrError):
3228
_fmt = 'Loop involving %(refs)r while expanding "%(string)s".'
3230
def __init__(self, string, refs):
3231
self.string = string
3232
self.refs = '->'.join(refs)
3235
class ExpandingUnknownOption(BzrError):
3237
_fmt = 'Option %(name)s is not defined while expanding "%(string)s".'
3239
def __init__(self, name, string):
3241
self.string = string
3244
class NoCompatibleInter(BzrError):
3246
_fmt = ('No compatible object available for operations from %(source)r '
3249
def __init__(self, source, target):
3250
self.source = source
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