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
1163
class InvalidRevisionSpec(BzrError):
1182
1165
_fmt = ("Requested revision: '%(spec)s' does not exist in branch:"
1183
" %(branch)s%(extra)s")
1166
" %(branch_url)s%(extra)s")
1185
1168
def __init__(self, spec, branch, extra=None):
1186
1169
BzrError.__init__(self, branch=branch, spec=spec)
1170
self.branch_url = getattr(branch, 'user_url', str(branch))
1188
1172
self.extra = '\n' + str(extra)
1190
1174
self.extra = ''
1193
class HistoryMissing(BzrError):
1195
_fmt = "%(branch)s is missing %(object_type)s {%(object_id)s}"
1198
1177
class AppendRevisionsOnlyViolation(BzrError):
1200
1179
_fmt = ('Operation denied because it would change the main history,'
1700
1681
InvalidHttpResponse.__init__(self, path, msg)
1684
class HttpBoundaryMissing(InvalidHttpResponse):
1685
"""A multipart response ends with no boundary marker.
1687
This is a special case caused by buggy proxies, described in
1688
<https://bugs.launchpad.net/bzr/+bug/198646>.
1691
_fmt = "HTTP MIME Boundary missing for %(path)s: %(msg)s"
1693
def __init__(self, path, msg):
1694
InvalidHttpResponse.__init__(self, path, msg)
1703
1697
class InvalidHttpContentType(InvalidHttpResponse):
1705
1699
_fmt = 'Invalid http Content-type "%(ctype)s" for %(path)s: %(msg)s'
1733
1727
_fmt = "Working tree has conflicts."
1730
class ConfigContentError(BzrError):
1732
_fmt = "Config file %(filename)s is not UTF-8 encoded\n"
1734
def __init__(self, filename):
1735
BzrError.__init__(self)
1736
self.filename = filename
1736
1739
class ParseConfigError(BzrError):
1741
_fmt = "Error(s) parsing config file %(filename)s:\n%(errors)s"
1738
1743
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)
1744
BzrError.__init__(self)
1745
self.filename = filename
1746
self.errors = '\n'.join(e.msg for e in errors)
1749
class ConfigOptionValueError(BzrError):
1751
_fmt = """Bad value "%(value)s" for option "%(name)s"."""
1753
def __init__(self, name, value):
1754
BzrError.__init__(self, name=name, value=value)
1746
1757
class NoEmailInUsername(BzrError):
1755
1766
class SigningFailed(BzrError):
1757
_fmt = 'Failed to gpg sign data with command "%(command_line)s"'
1768
_fmt = 'Failed to GPG sign data with command "%(command_line)s"'
1759
1770
def __init__(self, command_line):
1760
1771
BzrError.__init__(self, command_line=command_line)
1774
class SignatureVerificationFailed(BzrError):
1776
_fmt = 'Failed to verify GPG signature data with error "%(error)s"'
1778
def __init__(self, error):
1779
BzrError.__init__(self, error=error)
1782
class DependencyNotPresent(BzrError):
1784
_fmt = 'Unable to import library "%(library)s": %(error)s'
1786
def __init__(self, library, error):
1787
BzrError.__init__(self, library=library, error=error)
1790
class GpgmeNotInstalled(DependencyNotPresent):
1792
_fmt = 'python-gpgme is not installed, it is needed to verify signatures'
1794
def __init__(self, error):
1795
DependencyNotPresent.__init__(self, 'gpgme', error)
1763
1798
class WorkingTreeNotRevision(BzrError):
1765
1800
_fmt = ("The working tree for %(basedir)s has changed since"
1925
1960
_fmt = "Moving the root directory is not supported at this time"
1963
class TransformRenameFailed(BzrError):
1965
_fmt = "Failed to rename %(from_path)s to %(to_path)s: %(why)s"
1967
def __init__(self, from_path, to_path, why, errno):
1968
self.from_path = from_path
1969
self.to_path = to_path
1928
1974
class BzrMoveFailedError(BzrError):
1930
_fmt = "Could not move %(from_path)s%(operator)s %(to_path)s%(extra)s"
1976
_fmt = ("Could not move %(from_path)s%(operator)s %(to_path)s"
1977
"%(_has_extra)s%(extra)s")
1932
1979
def __init__(self, from_path='', to_path='', extra=None):
1933
1980
from bzrlib.osutils import splitpath
1934
1981
BzrError.__init__(self)
1936
self.extra = ': ' + str(extra)
1983
self.extra, self._has_extra = extra, ': '
1985
self.extra = self._has_extra = ''
1940
1987
has_from = len(from_path) > 0
1941
1988
has_to = len(to_path) > 0
1963
2010
class BzrRenameFailedError(BzrMoveFailedError):
1965
_fmt = "Could not rename %(from_path)s%(operator)s %(to_path)s%(extra)s"
2012
_fmt = ("Could not rename %(from_path)s%(operator)s %(to_path)s"
2013
"%(_has_extra)s%(extra)s")
1967
2015
def __init__(self, from_path, to_path, extra=None):
1968
2016
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
2019
class BzrBadParameterNotString(BzrBadParameter):
2619
2654
This is distinct from ErrorFromSmartServer so that it is possible to
2620
2655
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.
2657
- ErrorFromSmartServer was uncaught. This is logic error in the client
2658
and so should provoke a traceback to the user.
2659
- ErrorFromSmartServer was caught but its error_tuple could not be
2660
translated. This is probably because the server sent us garbage, and
2661
should not provoke a traceback.
2628
2664
_fmt = "Server sent an unexpected error: %(error_tuple)r"
2835
2871
more = ' ' + more
2836
2872
import bzrlib.urlutils as urlutils
2837
display_url = urlutils.unescape_for_display(
2838
tree.user_url, 'ascii')
2873
user_url = getattr(tree, "user_url", None)
2874
if user_url is None:
2875
display_url = str(tree)
2877
display_url = urlutils.unescape_for_display(user_url, 'ascii')
2839
2878
BzrError.__init__(self, tree=tree, display_url=display_url, more=more)
2881
class ShelvedChanges(UncommittedChanges):
2883
_fmt = ('Working tree "%(display_url)s" has shelved changes'
2884
' (See bzr shelve --list).%(more)s')
2842
2887
class MissingTemplateVariable(BzrError):
2844
2889
_fmt = 'Variable {%(name)s} is not available.'
2910
2955
from bzrlib.osutils import get_user_encoding
2911
2956
self.path = path
2912
2957
self.kind = kind
2913
self.user_encoding = osutils.get_user_encoding()
2958
self.user_encoding = get_user_encoding()
2961
class NoSuchConfig(BzrError):
2963
_fmt = ('The "%(config_id)s" configuration does not exist.')
2965
def __init__(self, config_id):
2966
BzrError.__init__(self, config_id=config_id)
2969
class NoSuchConfigOption(BzrError):
2971
_fmt = ('The "%(option_name)s" configuration option does not exist.')
2973
def __init__(self, option_name):
2974
BzrError.__init__(self, option_name=option_name)
2916
2977
class NoSuchAlias(BzrError):
2961
3022
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
3025
class TipChangeRejected(BzrError):
2990
3026
"""A pre_change_branch_tip hook function may raise this to cleanly and
2991
3027
explicitly abort a change to a branch tip.
3134
3182
def __init__(self, bzrdir):
3135
3183
self.bzrdir = bzrdir
3186
class NoWhoami(BzrError):
3188
_fmt = ('Unable to determine your name.\n'
3189
"Please, set your name with the 'whoami' command.\n"
3190
'E.g. bzr whoami "Your Name <name@example.com>"')
3193
class InvalidPattern(BzrError):
3195
_fmt = ('Invalid pattern(s) found. %(msg)s')
3197
def __init__(self, msg):
3201
class RecursiveBind(BzrError):
3203
_fmt = ('Branch "%(branch_url)s" appears to be bound to itself. '
3204
'Please use `bzr unbind` to fix.')
3206
def __init__(self, branch_url):
3207
self.branch_url = branch_url
3210
# FIXME: I would prefer to define the config related exception classes in
3211
# config.py but the lazy import mechanism proscribes this -- vila 20101222
3212
class OptionExpansionLoop(BzrError):
3214
_fmt = 'Loop involving %(refs)r while expanding "%(string)s".'
3216
def __init__(self, string, refs):
3217
self.string = string
3218
self.refs = '->'.join(refs)
3221
class ExpandingUnknownOption(BzrError):
3223
_fmt = 'Option %(name)s is not defined while expanding "%(string)s".'
3225
def __init__(self, name, string):
3227
self.string = string
3230
class NoCompatibleInter(BzrError):
3232
_fmt = ('No compatible object available for operations from %(source)r '
3235
def __init__(self, source, target):
3236
self.source = source
3237
self.target = target
3240
class HpssVfsRequestNotAllowed(BzrError):
3242
_fmt = ("VFS requests over the smart server are not allowed. Encountered: "
3243
"%(method)s, %(arguments)s.")
3245
def __init__(self, method, arguments):
3246
self.method = method
3247
self.arguments = arguments
3250
class UnsupportedKindChange(BzrError):
3252
_fmt = ("Kind change from %(from_kind)s to %(to_kind)s for "
3253
"%(path)s not supported by format %(format)r")
3255
def __init__(self, path, from_kind, to_kind, format):
3257
self.from_kind = from_kind
3258
self.to_kind = to_kind
3259
self.format = format
3262
class MissingFeature(BzrError):
3264
_fmt = ("Missing feature %(feature)s not provided by this "
3265
"version of Bazaar or any plugin.")
3267
def __init__(self, feature):
3268
self.feature = feature
3271
class PatchSyntax(BzrError):
3272
"""Base class for patch syntax errors."""
3275
class BinaryFiles(BzrError):
3277
_fmt = 'Binary files section encountered.'
3279
def __init__(self, orig_name, mod_name):
3280
self.orig_name = orig_name
3281
self.mod_name = mod_name
3284
class MalformedPatchHeader(PatchSyntax):
3286
_fmt = "Malformed patch header. %(desc)s\n%(line)r"
3288
def __init__(self, desc, line):
3293
class MalformedHunkHeader(PatchSyntax):
3295
_fmt = "Malformed hunk header. %(desc)s\n%(line)r"
3297
def __init__(self, desc, line):
3302
class MalformedLine(PatchSyntax):
3304
_fmt = "Malformed line. %(desc)s\n%(line)r"
3306
def __init__(self, desc, line):
3311
class PatchConflict(BzrError):
3313
_fmt = ('Text contents mismatch at line %(line_no)d. Original has '
3314
'"%(orig_line)s", but patch says it should be "%(patch_line)s"')
3316
def __init__(self, line_no, orig_line, patch_line):
3317
self.line_no = line_no
3318
self.orig_line = orig_line.rstrip('\n')
3319
self.patch_line = patch_line.rstrip('\n')
3322
class FeatureAlreadyRegistered(BzrError):
3324
_fmt = 'The feature %(feature)s has already been registered.'
3326
def __init__(self, feature):
3327
self.feature = feature