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."
1177
1180
class InvalidRevisionSpec(BzrError):
1179
_fmt = ("Requested revision: '%(spec)s' does not exist in branch:"
1180
" %(branch_url)s%(extra)s")
1182
_fmt = ("Requested revision: %(spec)r does not exist in branch:"
1183
" %(branch)s%(extra)s")
1182
1185
def __init__(self, spec, branch, extra=None):
1183
1186
BzrError.__init__(self, branch=branch, spec=spec)
1184
self.branch_url = getattr(branch, 'user_url', str(branch))
1186
1188
self.extra = '\n' + str(extra)
1188
1190
self.extra = ''
1193
class HistoryMissing(BzrError):
1195
_fmt = "%(branch)s is missing %(object_type)s {%(object_id)s}"
1191
1198
class AppendRevisionsOnlyViolation(BzrError):
1193
1200
_fmt = ('Operation denied because it would change the main history,'
1741
1732
_fmt = "Working tree has conflicts."
1744
class ConfigContentError(BzrError):
1746
_fmt = "Config file %(filename)s is not UTF-8 encoded\n"
1748
def __init__(self, filename):
1749
BzrError.__init__(self)
1750
self.filename = filename
1753
1735
class ParseConfigError(BzrError):
1755
_fmt = "Error(s) parsing config file %(filename)s:\n%(errors)s"
1757
1737
def __init__(self, errors, filename):
1758
BzrError.__init__(self)
1759
self.filename = filename
1760
self.errors = '\n'.join(e.msg for e in errors)
1763
class ConfigOptionValueError(BzrError):
1765
_fmt = ('Bad value "%(value)s" for option "%(name)s".\n'
1766
'See ``bzr help %(name)s``')
1768
def __init__(self, name, value):
1769
BzrError.__init__(self, name=name, value=value)
1738
if filename is None:
1740
message = "Error(s) parsing config file %s:\n%s" % \
1741
(filename, ('\n'.join(e.msg for e in errors)))
1742
BzrError.__init__(self, message)
1772
1745
class NoEmailInUsername(BzrError):
1781
1754
class SigningFailed(BzrError):
1783
_fmt = 'Failed to GPG sign data with command "%(command_line)s"'
1756
_fmt = 'Failed to gpg sign data with command "%(command_line)s"'
1785
1758
def __init__(self, command_line):
1786
1759
BzrError.__init__(self, command_line=command_line)
1789
class SignatureVerificationFailed(BzrError):
1791
_fmt = 'Failed to verify GPG signature data with error "%(error)s"'
1793
def __init__(self, error):
1794
BzrError.__init__(self, error=error)
1797
class DependencyNotPresent(BzrError):
1799
_fmt = 'Unable to import library "%(library)s": %(error)s'
1801
def __init__(self, library, error):
1802
BzrError.__init__(self, library=library, error=error)
1805
class GpgmeNotInstalled(DependencyNotPresent):
1807
_fmt = 'python-gpgme is not installed, it is needed to verify signatures'
1809
def __init__(self, error):
1810
DependencyNotPresent.__init__(self, 'gpgme', error)
1813
1762
class WorkingTreeNotRevision(BzrError):
1815
1764
_fmt = ("The working tree for %(basedir)s has changed since"
1975
1924
_fmt = "Moving the root directory is not supported at this time"
1978
class TransformRenameFailed(BzrError):
1980
_fmt = "Failed to rename %(from_path)s to %(to_path)s: %(why)s"
1982
def __init__(self, from_path, to_path, why, errno):
1983
self.from_path = from_path
1984
self.to_path = to_path
1989
1927
class BzrMoveFailedError(BzrError):
1991
_fmt = ("Could not move %(from_path)s%(operator)s %(to_path)s"
1992
"%(_has_extra)s%(extra)s")
1929
_fmt = "Could not move %(from_path)s%(operator)s %(to_path)s%(extra)s"
1994
1931
def __init__(self, from_path='', to_path='', extra=None):
1995
1932
from bzrlib.osutils import splitpath
1996
1933
BzrError.__init__(self)
1998
self.extra, self._has_extra = extra, ': '
1935
self.extra = ': ' + str(extra)
2000
self.extra = self._has_extra = ''
2002
1939
has_from = len(from_path) > 0
2003
1940
has_to = len(to_path) > 0
2025
1962
class BzrRenameFailedError(BzrMoveFailedError):
2027
_fmt = ("Could not rename %(from_path)s%(operator)s %(to_path)s"
2028
"%(_has_extra)s%(extra)s")
1964
_fmt = "Could not rename %(from_path)s%(operator)s %(to_path)s%(extra)s"
2030
1966
def __init__(self, from_path, to_path, extra=None):
2031
1967
BzrMoveFailedError.__init__(self, from_path, to_path, extra)
1969
class BzrRemoveChangedFilesError(BzrError):
1970
"""Used when user is trying to remove changed files."""
1972
_fmt = ("Can't safely remove modified or unknown files:\n"
1973
"%(changes_as_text)s"
1974
"Use --keep to not delete them, or --force to delete them regardless.")
1976
def __init__(self, tree_delta):
1977
BzrError.__init__(self)
1978
self.changes_as_text = tree_delta.get_changes_as_text()
1979
#self.paths_as_string = '\n'.join(changed_files)
1980
#self.paths_as_string = '\n'.join([quotefn(p) for p in changed_files])
2034
1983
class BzrBadParameterNotString(BzrBadParameter):
2669
2618
This is distinct from ErrorFromSmartServer so that it is possible to
2670
2619
distinguish between the following two cases:
2672
- ErrorFromSmartServer was uncaught. This is logic error in the client
2673
and so should provoke a traceback to the user.
2674
- ErrorFromSmartServer was caught but its error_tuple could not be
2675
translated. This is probably because the server sent us garbage, and
2676
should not provoke a traceback.
2620
- ErrorFromSmartServer was uncaught. This is logic error in the client
2621
and so should provoke a traceback to the user.
2622
- ErrorFromSmartServer was caught but its error_tuple could not be
2623
translated. This is probably because the server sent us garbage, and
2624
should not provoke a traceback.
2679
2627
_fmt = "Server sent an unexpected error: %(error_tuple)r"
2878
2834
more = ' ' + more
2879
2835
import bzrlib.urlutils as urlutils
2880
user_url = getattr(tree, "user_url", None)
2881
if user_url is None:
2882
display_url = str(tree)
2884
display_url = urlutils.unescape_for_display(user_url, 'ascii')
2836
display_url = urlutils.unescape_for_display(
2837
tree.bzrdir.root_transport.base, 'ascii')
2885
2838
BzrError.__init__(self, tree=tree, display_url=display_url, more=more)
2888
class StoringUncommittedNotSupported(BzrError):
2890
_fmt = ('Branch "%(display_url)s" does not support storing uncommitted'
2893
def __init__(self, branch):
2894
import bzrlib.urlutils as urlutils
2895
user_url = getattr(branch, "user_url", None)
2896
if user_url is None:
2897
display_url = str(branch)
2899
display_url = urlutils.unescape_for_display(user_url, 'ascii')
2900
BzrError.__init__(self, branch=branch, display_url=display_url)
2903
class ShelvedChanges(UncommittedChanges):
2905
_fmt = ('Working tree "%(display_url)s" has shelved changes'
2906
' (See bzr shelve --list).%(more)s')
2909
2841
class MissingTemplateVariable(BzrError):
2911
2843
_fmt = 'Variable {%(name)s} is not available.'
2977
2909
from bzrlib.osutils import get_user_encoding
2978
2910
self.path = path
2979
2911
self.kind = kind
2980
self.user_encoding = get_user_encoding()
2983
class NoSuchConfig(BzrError):
2985
_fmt = ('The "%(config_id)s" configuration does not exist.')
2987
def __init__(self, config_id):
2988
BzrError.__init__(self, config_id=config_id)
2991
class NoSuchConfigOption(BzrError):
2993
_fmt = ('The "%(option_name)s" configuration option does not exist.')
2995
def __init__(self, option_name):
2996
BzrError.__init__(self, option_name=option_name)
2912
self.user_encoding = osutils.get_user_encoding()
2999
2915
class NoSuchAlias(BzrError):
3044
2960
BzrError.__init__(self, unknowns_str=", ".join(unknowns))
2963
class HookFailed(BzrError):
2964
"""Raised when a pre_change_branch_tip hook function fails anything other
2965
than TipChangeRejected.
2967
Note that this exception is no longer raised, and the import is only left
2968
to be nice to code which might catch it in a plugin.
2971
_fmt = ("Hook '%(hook_name)s' during %(hook_stage)s failed:\n"
2972
"%(traceback_text)s%(exc_value)s")
2974
def __init__(self, hook_stage, hook_name, exc_info, warn=True):
2976
symbol_versioning.warn("BzrError HookFailed has been deprecated "
2977
"as of bzrlib 2.1.", DeprecationWarning, stacklevel=2)
2979
self.hook_stage = hook_stage
2980
self.hook_name = hook_name
2981
self.exc_info = exc_info
2982
self.exc_type = exc_info[0]
2983
self.exc_value = exc_info[1]
2984
self.exc_tb = exc_info[2]
2985
self.traceback_text = ''.join(traceback.format_tb(self.exc_tb))
3047
2988
class TipChangeRejected(BzrError):
3048
2989
"""A pre_change_branch_tip hook function may raise this to cleanly and
3049
2990
explicitly abort a change to a branch tip.
3196
3125
def __init__(self, path):
3197
3126
self.path = path
3200
class NoColocatedBranchSupport(BzrError):
3202
_fmt = ("%(bzrdir)r does not support co-located branches.")
3204
def __init__(self, bzrdir):
3205
self.bzrdir = bzrdir
3208
class NoWhoami(BzrError):
3210
_fmt = ('Unable to determine your name.\n'
3211
"Please, set your name with the 'whoami' command.\n"
3212
'E.g. bzr whoami "Your Name <name@example.com>"')
3215
class InvalidPattern(BzrError):
3217
_fmt = ('Invalid pattern(s) found. %(msg)s')
3219
def __init__(self, msg):
3223
class RecursiveBind(BzrError):
3225
_fmt = ('Branch "%(branch_url)s" appears to be bound to itself. '
3226
'Please use `bzr unbind` to fix.')
3228
def __init__(self, branch_url):
3229
self.branch_url = branch_url
3232
# FIXME: I would prefer to define the config related exception classes in
3233
# config.py but the lazy import mechanism proscribes this -- vila 20101222
3234
class OptionExpansionLoop(BzrError):
3236
_fmt = 'Loop involving %(refs)r while expanding "%(string)s".'
3238
def __init__(self, string, refs):
3239
self.string = string
3240
self.refs = '->'.join(refs)
3243
class ExpandingUnknownOption(BzrError):
3245
_fmt = 'Option "%(name)s" is not defined while expanding "%(string)s".'
3247
def __init__(self, name, string):
3249
self.string = string
3252
class IllegalOptionName(BzrError):
3254
_fmt = 'Option "%(name)s" is not allowed.'
3256
def __init__(self, name):
3260
class NoCompatibleInter(BzrError):
3262
_fmt = ('No compatible object available for operations from %(source)r '
3265
def __init__(self, source, target):
3266
self.source = source
3267
self.target = target
3270
class HpssVfsRequestNotAllowed(BzrError):
3272
_fmt = ("VFS requests over the smart server are not allowed. Encountered: "
3273
"%(method)s, %(arguments)s.")
3275
def __init__(self, method, arguments):
3276
self.method = method
3277
self.arguments = arguments
3280
class UnsupportedKindChange(BzrError):
3282
_fmt = ("Kind change from %(from_kind)s to %(to_kind)s for "
3283
"%(path)s not supported by format %(format)r")
3285
def __init__(self, path, from_kind, to_kind, format):
3287
self.from_kind = from_kind
3288
self.to_kind = to_kind
3289
self.format = format
3292
class MissingFeature(BzrError):
3294
_fmt = ("Missing feature %(feature)s not provided by this "
3295
"version of Bazaar or any plugin.")
3297
def __init__(self, feature):
3298
self.feature = feature
3301
class PatchSyntax(BzrError):
3302
"""Base class for patch syntax errors."""
3305
class BinaryFiles(BzrError):
3307
_fmt = 'Binary files section encountered.'
3309
def __init__(self, orig_name, mod_name):
3310
self.orig_name = orig_name
3311
self.mod_name = mod_name
3314
class MalformedPatchHeader(PatchSyntax):
3316
_fmt = "Malformed patch header. %(desc)s\n%(line)r"
3318
def __init__(self, desc, line):
3323
class MalformedHunkHeader(PatchSyntax):
3325
_fmt = "Malformed hunk header. %(desc)s\n%(line)r"
3327
def __init__(self, desc, line):
3332
class MalformedLine(PatchSyntax):
3334
_fmt = "Malformed line. %(desc)s\n%(line)r"
3336
def __init__(self, desc, line):
3341
class PatchConflict(BzrError):
3343
_fmt = ('Text contents mismatch at line %(line_no)d. Original has '
3344
'"%(orig_line)s", but patch says it should be "%(patch_line)s"')
3346
def __init__(self, line_no, orig_line, patch_line):
3347
self.line_no = line_no
3348
self.orig_line = orig_line.rstrip('\n')
3349
self.patch_line = patch_line.rstrip('\n')
3352
class FeatureAlreadyRegistered(BzrError):
3354
_fmt = 'The feature %(feature)s has already been registered.'
3356
def __init__(self, feature):
3357
self.feature = feature
3360
class ChangesAlreadyStored(BzrCommandError):
3362
_fmt = ('Cannot store uncommitted changes because this branch already'
3363
' stores uncommitted changes.')