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."
1158
1180
class InvalidRevisionSpec(BzrError):
1160
1182
_fmt = ("Requested revision: '%(spec)s' does not exist in branch:"
1161
" %(branch_url)s%(extra)s")
1183
" %(branch)s%(extra)s")
1163
1185
def __init__(self, spec, branch, extra=None):
1164
1186
BzrError.__init__(self, branch=branch, spec=spec)
1165
self.branch_url = getattr(branch, 'user_url', str(branch))
1167
1188
self.extra = '\n' + str(extra)
1169
1190
self.extra = ''
1193
class HistoryMissing(BzrError):
1195
_fmt = "%(branch)s is missing %(object_type)s {%(object_id)s}"
1172
1198
class AppendRevisionsOnlyViolation(BzrError):
1174
1200
_fmt = ('Operation denied because it would change the main history,'
1676
1700
InvalidHttpResponse.__init__(self, path, msg)
1679
class HttpBoundaryMissing(InvalidHttpResponse):
1680
"""A multipart response ends with no boundary marker.
1682
This is a special case caused by buggy proxies, described in
1683
<https://bugs.launchpad.net/bzr/+bug/198646>.
1686
_fmt = "HTTP MIME Boundary missing for %(path)s: %(msg)s"
1688
def __init__(self, path, msg):
1689
InvalidHttpResponse.__init__(self, path, msg)
1692
1703
class InvalidHttpContentType(InvalidHttpResponse):
1694
1705
_fmt = 'Invalid http Content-type "%(ctype)s" for %(path)s: %(msg)s'
1722
1733
_fmt = "Working tree has conflicts."
1725
class ConfigContentError(BzrError):
1727
_fmt = "Config file %(filename)s is not UTF-8 encoded\n"
1729
def __init__(self, filename):
1730
BzrError.__init__(self)
1731
self.filename = filename
1734
1736
class ParseConfigError(BzrError):
1736
_fmt = "Error(s) parsing config file %(filename)s:\n%(errors)s"
1738
1738
def __init__(self, errors, filename):
1739
BzrError.__init__(self)
1740
self.filename = filename
1741
self.errors = '\n'.join(e.msg for e in errors)
1744
class ConfigOptionValueError(BzrError):
1746
_fmt = """Bad value "%(value)s" for option "%(name)s"."""
1748
def __init__(self, name, value):
1749
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)
1752
1746
class NoEmailInUsername(BzrError):
1761
1755
class SigningFailed(BzrError):
1763
_fmt = 'Failed to GPG sign data with command "%(command_line)s"'
1757
_fmt = 'Failed to gpg sign data with command "%(command_line)s"'
1765
1759
def __init__(self, command_line):
1766
1760
BzrError.__init__(self, command_line=command_line)
1769
class SignatureVerificationFailed(BzrError):
1771
_fmt = 'Failed to verify GPG signature data with error "%(error)s"'
1773
def __init__(self, error):
1774
BzrError.__init__(self, error=error)
1777
class DependencyNotPresent(BzrError):
1779
_fmt = 'Unable to import library "%(library)s": %(error)s'
1781
def __init__(self, library, error):
1782
BzrError.__init__(self, library=library, error=error)
1785
class GpgmeNotInstalled(DependencyNotPresent):
1787
_fmt = 'python-gpgme is not installed, it is needed to verify signatures'
1789
def __init__(self, error):
1790
DependencyNotPresent.__init__(self, 'gpgme', error)
1793
1763
class WorkingTreeNotRevision(BzrError):
1795
1765
_fmt = ("The working tree for %(basedir)s has changed since"
1955
1925
_fmt = "Moving the root directory is not supported at this time"
1958
class TransformRenameFailed(BzrError):
1960
_fmt = "Failed to rename %(from_path)s to %(to_path)s: %(why)s"
1962
def __init__(self, from_path, to_path, why, errno):
1963
self.from_path = from_path
1964
self.to_path = to_path
1969
1928
class BzrMoveFailedError(BzrError):
1971
_fmt = ("Could not move %(from_path)s%(operator)s %(to_path)s"
1972
"%(_has_extra)s%(extra)s")
1930
_fmt = "Could not move %(from_path)s%(operator)s %(to_path)s%(extra)s"
1974
1932
def __init__(self, from_path='', to_path='', extra=None):
1975
1933
from bzrlib.osutils import splitpath
1976
1934
BzrError.__init__(self)
1978
self.extra, self._has_extra = extra, ': '
1936
self.extra = ': ' + str(extra)
1980
self.extra = self._has_extra = ''
1982
1940
has_from = len(from_path) > 0
1983
1941
has_to = len(to_path) > 0
2005
1963
class BzrRenameFailedError(BzrMoveFailedError):
2007
_fmt = ("Could not rename %(from_path)s%(operator)s %(to_path)s"
2008
"%(_has_extra)s%(extra)s")
1965
_fmt = "Could not rename %(from_path)s%(operator)s %(to_path)s%(extra)s"
2010
1967
def __init__(self, from_path, to_path, extra=None):
2011
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])
2014
1984
class BzrBadParameterNotString(BzrBadParameter):
2649
2619
This is distinct from ErrorFromSmartServer so that it is possible to
2650
2620
distinguish between the following two cases:
2652
- ErrorFromSmartServer was uncaught. This is logic error in the client
2653
and so should provoke a traceback to the user.
2654
- ErrorFromSmartServer was caught but its error_tuple could not be
2655
translated. This is probably because the server sent us garbage, and
2656
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.
2659
2628
_fmt = "Server sent an unexpected error: %(error_tuple)r"
2866
2835
more = ' ' + more
2867
2836
import bzrlib.urlutils as urlutils
2868
user_url = getattr(tree, "user_url", None)
2869
if user_url is None:
2870
display_url = str(tree)
2872
display_url = urlutils.unescape_for_display(user_url, 'ascii')
2837
display_url = urlutils.unescape_for_display(
2838
tree.user_url, 'ascii')
2873
2839
BzrError.__init__(self, tree=tree, display_url=display_url, more=more)
2876
class ShelvedChanges(UncommittedChanges):
2878
_fmt = ('Working tree "%(display_url)s" has shelved changes'
2879
' (See bzr shelve --list).%(more)s')
2882
2842
class MissingTemplateVariable(BzrError):
2884
2844
_fmt = 'Variable {%(name)s} is not available.'
2950
2910
from bzrlib.osutils import get_user_encoding
2951
2911
self.path = path
2952
2912
self.kind = kind
2953
self.user_encoding = get_user_encoding()
2956
class NoSuchConfig(BzrError):
2958
_fmt = ('The "%(config_id)s" configuration does not exist.')
2960
def __init__(self, config_id):
2961
BzrError.__init__(self, config_id=config_id)
2964
class NoSuchConfigOption(BzrError):
2966
_fmt = ('The "%(option_name)s" configuration option does not exist.')
2968
def __init__(self, option_name):
2969
BzrError.__init__(self, option_name=option_name)
2913
self.user_encoding = osutils.get_user_encoding()
2972
2916
class NoSuchAlias(BzrError):
3017
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))
3020
2989
class TipChangeRejected(BzrError):
3021
2990
"""A pre_change_branch_tip hook function may raise this to cleanly and
3022
2991
explicitly abort a change to a branch tip.
3177
3134
def __init__(self, bzrdir):
3178
3135
self.bzrdir = bzrdir
3181
class NoWhoami(BzrError):
3183
_fmt = ('Unable to determine your name.\n'
3184
"Please, set your name with the 'whoami' command.\n"
3185
'E.g. bzr whoami "Your Name <name@example.com>"')
3188
class InvalidPattern(BzrError):
3190
_fmt = ('Invalid pattern(s) found. %(msg)s')
3192
def __init__(self, msg):
3196
class RecursiveBind(BzrError):
3198
_fmt = ('Branch "%(branch_url)s" appears to be bound to itself. '
3199
'Please use `bzr unbind` to fix.')
3201
def __init__(self, branch_url):
3202
self.branch_url = branch_url
3205
# FIXME: I would prefer to define the config related exception classes in
3206
# config.py but the lazy import mechanism proscribes this -- vila 20101222
3207
class OptionExpansionLoop(BzrError):
3209
_fmt = 'Loop involving %(refs)r while expanding "%(string)s".'
3211
def __init__(self, string, refs):
3212
self.string = string
3213
self.refs = '->'.join(refs)
3216
class ExpandingUnknownOption(BzrError):
3218
_fmt = 'Option %(name)s is not defined while expanding "%(string)s".'
3220
def __init__(self, name, string):
3222
self.string = string
3225
class NoCompatibleInter(BzrError):
3227
_fmt = ('No compatible object available for operations from %(source)r '
3230
def __init__(self, source, target):
3231
self.source = source
3232
self.target = target
3235
class HpssVfsRequestNotAllowed(BzrError):
3237
_fmt = ("VFS requests over the smart server are not allowed. Encountered: "
3238
"%(method)s, %(arguments)s.")
3240
def __init__(self, method, arguments):
3241
self.method = method
3242
self.arguments = arguments
3245
class UnsupportedKindChange(BzrError):
3247
_fmt = ("Kind change from %(from_kind)s to %(to_kind)s for "
3248
"%(path)s not supported by format %(format)r")
3250
def __init__(self, path, from_kind, to_kind, format):
3252
self.from_kind = from_kind
3253
self.to_kind = to_kind
3254
self.format = format
3257
class MissingFeature(BzrError):
3259
_fmt = ("Missing feature %(feature)s not provided by this "
3260
"version of Bazaar or any plugin.")
3262
def __init__(self, feature):
3263
self.feature = feature
3266
class PatchSyntax(BzrError):
3267
"""Base class for patch syntax errors."""
3270
class BinaryFiles(BzrError):
3272
_fmt = 'Binary files section encountered.'
3274
def __init__(self, orig_name, mod_name):
3275
self.orig_name = orig_name
3276
self.mod_name = mod_name
3279
class MalformedPatchHeader(PatchSyntax):
3281
_fmt = "Malformed patch header. %(desc)s\n%(line)r"
3283
def __init__(self, desc, line):
3288
class MalformedHunkHeader(PatchSyntax):
3290
_fmt = "Malformed hunk header. %(desc)s\n%(line)r"
3292
def __init__(self, desc, line):
3297
class MalformedLine(PatchSyntax):
3299
_fmt = "Malformed line. %(desc)s\n%(line)r"
3301
def __init__(self, desc, line):
3306
class PatchConflict(BzrError):
3308
_fmt = ('Text contents mismatch at line %(line_no)d. Original has '
3309
'"%(orig_line)s", but patch says it should be "%(patch_line)s"')
3311
def __init__(self, line_no, orig_line, patch_line):
3312
self.line_no = line_no
3313
self.orig_line = orig_line.rstrip('\n')
3314
self.patch_line = patch_line.rstrip('\n')
3317
class FeatureAlreadyRegistered(BzrError):
3319
_fmt = 'The feature %(feature)s has already been registered.'
3321
def __init__(self, feature):
3322
self.feature = feature