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."
700
739
self.path = urlutils.unescape_for_display(branch.base, 'ascii')
703
class AlreadyControlDirError(PathError):
705
_fmt = 'A control directory already exists: "%(path)s".'
708
742
class AlreadyBranchError(PathError):
710
744
_fmt = 'Already a branch: "%(path)s".'
713
class InvalidBranchName(PathError):
715
_fmt = "Invalid branch name: %(name)s"
717
def __init__(self, name):
718
BzrError.__init__(self)
722
class ParentBranchExists(AlreadyBranchError):
724
_fmt = 'Parent branch already exists: "%(path)s".'
727
747
class BranchExistsWithoutWorkingTree(PathError):
729
749
_fmt = 'Directory contains a branch, but no working 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,'
1674
1684
class InvalidHttpResponse(TransportError):
1676
_fmt = "Invalid http response for %(path)s: %(msg)s%(orig_error)s"
1686
_fmt = "Invalid http response for %(path)s: %(msg)s"
1678
1688
def __init__(self, path, msg, orig_error=None):
1679
1689
self.path = path
1680
if orig_error is None:
1683
# This is reached for obscure and unusual errors so we want to
1684
# preserve as much info as possible to ease debug.
1685
orig_error = ': %r' % (orig_error,)
1686
1690
TransportError.__init__(self, msg, orig_error=orig_error)
1689
class CertificateError(TransportError):
1691
_fmt = "Certificate error: %(error)s"
1693
def __init__(self, error):
1697
1693
class InvalidHttpRange(InvalidHttpResponse):
1699
1695
_fmt = "Invalid http range %(range)r for %(path)s: %(msg)s"
1703
1699
InvalidHttpResponse.__init__(self, path, msg)
1706
class HttpBoundaryMissing(InvalidHttpResponse):
1707
"""A multipart response ends with no boundary marker.
1709
This is a special case caused by buggy proxies, described in
1710
<https://bugs.launchpad.net/bzr/+bug/198646>.
1713
_fmt = "HTTP MIME Boundary missing for %(path)s: %(msg)s"
1715
def __init__(self, path, msg):
1716
InvalidHttpResponse.__init__(self, path, msg)
1719
1702
class InvalidHttpContentType(InvalidHttpResponse):
1721
1704
_fmt = 'Invalid http Content-type "%(ctype)s" for %(path)s: %(msg)s'
1749
1732
_fmt = "Working tree has conflicts."
1752
class ConfigContentError(BzrError):
1754
_fmt = "Config file %(filename)s is not UTF-8 encoded\n"
1756
def __init__(self, filename):
1757
BzrError.__init__(self)
1758
self.filename = filename
1761
1735
class ParseConfigError(BzrError):
1763
_fmt = "Error(s) parsing config file %(filename)s:\n%(errors)s"
1765
1737
def __init__(self, errors, filename):
1766
BzrError.__init__(self)
1767
self.filename = filename
1768
self.errors = '\n'.join(e.msg for e in errors)
1771
class ConfigOptionValueError(BzrError):
1773
_fmt = ('Bad value "%(value)s" for option "%(name)s".\n'
1774
'See ``bzr help %(name)s``')
1776
def __init__(self, name, value):
1777
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)
1780
1745
class NoEmailInUsername(BzrError):
1789
1754
class SigningFailed(BzrError):
1791
_fmt = 'Failed to GPG sign data with command "%(command_line)s"'
1756
_fmt = 'Failed to gpg sign data with command "%(command_line)s"'
1793
1758
def __init__(self, command_line):
1794
1759
BzrError.__init__(self, command_line=command_line)
1797
class SignatureVerificationFailed(BzrError):
1799
_fmt = 'Failed to verify GPG signature data with error "%(error)s"'
1801
def __init__(self, error):
1802
BzrError.__init__(self, error=error)
1805
class DependencyNotPresent(BzrError):
1807
_fmt = 'Unable to import library "%(library)s": %(error)s'
1809
def __init__(self, library, error):
1810
BzrError.__init__(self, library=library, error=error)
1813
class GpgmeNotInstalled(DependencyNotPresent):
1815
_fmt = 'python-gpgme is not installed, it is needed to verify signatures'
1817
def __init__(self, error):
1818
DependencyNotPresent.__init__(self, 'gpgme', error)
1821
1762
class WorkingTreeNotRevision(BzrError):
1823
1764
_fmt = ("The working tree for %(basedir)s has changed since"
1983
1924
_fmt = "Moving the root directory is not supported at this time"
1986
class TransformRenameFailed(BzrError):
1988
_fmt = "Failed to rename %(from_path)s to %(to_path)s: %(why)s"
1990
def __init__(self, from_path, to_path, why, errno):
1991
self.from_path = from_path
1992
self.to_path = to_path
1997
1927
class BzrMoveFailedError(BzrError):
1999
_fmt = ("Could not move %(from_path)s%(operator)s %(to_path)s"
2000
"%(_has_extra)s%(extra)s")
1929
_fmt = "Could not move %(from_path)s%(operator)s %(to_path)s%(extra)s"
2002
1931
def __init__(self, from_path='', to_path='', extra=None):
2003
1932
from bzrlib.osutils import splitpath
2004
1933
BzrError.__init__(self)
2006
self.extra, self._has_extra = extra, ': '
1935
self.extra = ': ' + str(extra)
2008
self.extra = self._has_extra = ''
2010
1939
has_from = len(from_path) > 0
2011
1940
has_to = len(to_path) > 0
2033
1962
class BzrRenameFailedError(BzrMoveFailedError):
2035
_fmt = ("Could not rename %(from_path)s%(operator)s %(to_path)s"
2036
"%(_has_extra)s%(extra)s")
1964
_fmt = "Could not rename %(from_path)s%(operator)s %(to_path)s%(extra)s"
2038
1966
def __init__(self, from_path, to_path, extra=None):
2039
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])
2042
1983
class BzrBadParameterNotString(BzrBadParameter):
2677
2618
This is distinct from ErrorFromSmartServer so that it is possible to
2678
2619
distinguish between the following two cases:
2680
- ErrorFromSmartServer was uncaught. This is logic error in the client
2681
and so should provoke a traceback to the user.
2682
- ErrorFromSmartServer was caught but its error_tuple could not be
2683
translated. This is probably because the server sent us garbage, and
2684
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.
2687
2627
_fmt = "Server sent an unexpected error: %(error_tuple)r"
2886
2834
more = ' ' + more
2887
2835
import bzrlib.urlutils as urlutils
2888
user_url = getattr(tree, "user_url", None)
2889
if user_url is None:
2890
display_url = str(tree)
2892
display_url = urlutils.unescape_for_display(user_url, 'ascii')
2836
display_url = urlutils.unescape_for_display(
2837
tree.bzrdir.root_transport.base, 'ascii')
2893
2838
BzrError.__init__(self, tree=tree, display_url=display_url, more=more)
2896
class ShelvedChanges(UncommittedChanges):
2898
_fmt = ('Working tree "%(display_url)s" has shelved changes'
2899
' (See bzr shelve --list).%(more)s')
2902
2841
class MissingTemplateVariable(BzrError):
2904
2843
_fmt = 'Variable {%(name)s} is not available.'
2970
2909
from bzrlib.osutils import get_user_encoding
2971
2910
self.path = path
2972
2911
self.kind = kind
2973
self.user_encoding = get_user_encoding()
2976
class NoSuchConfig(BzrError):
2978
_fmt = ('The "%(config_id)s" configuration does not exist.')
2980
def __init__(self, config_id):
2981
BzrError.__init__(self, config_id=config_id)
2984
class NoSuchConfigOption(BzrError):
2986
_fmt = ('The "%(option_name)s" configuration option does not exist.')
2988
def __init__(self, option_name):
2989
BzrError.__init__(self, option_name=option_name)
2912
self.user_encoding = osutils.get_user_encoding()
2992
2915
class NoSuchAlias(BzrError):
3037
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))
3040
2988
class TipChangeRejected(BzrError):
3041
2989
"""A pre_change_branch_tip hook function may raise this to cleanly and
3042
2990
explicitly abort a change to a branch tip.
3189
3125
def __init__(self, path):
3190
3126
self.path = path
3193
class NoColocatedBranchSupport(BzrError):
3195
_fmt = ("%(bzrdir)r does not support co-located branches.")
3197
def __init__(self, bzrdir):
3198
self.bzrdir = bzrdir
3201
class NoWhoami(BzrError):
3203
_fmt = ('Unable to determine your name.\n'
3204
"Please, set your name with the 'whoami' command.\n"
3205
'E.g. bzr whoami "Your Name <name@example.com>"')
3208
class InvalidPattern(BzrError):
3210
_fmt = ('Invalid pattern(s) found. %(msg)s')
3212
def __init__(self, msg):
3216
class RecursiveBind(BzrError):
3218
_fmt = ('Branch "%(branch_url)s" appears to be bound to itself. '
3219
'Please use `bzr unbind` to fix.')
3221
def __init__(self, branch_url):
3222
self.branch_url = branch_url
3225
# FIXME: I would prefer to define the config related exception classes in
3226
# config.py but the lazy import mechanism proscribes this -- vila 20101222
3227
class OptionExpansionLoop(BzrError):
3229
_fmt = 'Loop involving %(refs)r while expanding "%(string)s".'
3231
def __init__(self, string, refs):
3232
self.string = string
3233
self.refs = '->'.join(refs)
3236
class ExpandingUnknownOption(BzrError):
3238
_fmt = 'Option %(name)s is not defined while expanding "%(string)s".'
3240
def __init__(self, name, string):
3242
self.string = string
3245
class NoCompatibleInter(BzrError):
3247
_fmt = ('No compatible object available for operations from %(source)r '
3250
def __init__(self, source, target):
3251
self.source = source
3252
self.target = target
3255
class HpssVfsRequestNotAllowed(BzrError):
3257
_fmt = ("VFS requests over the smart server are not allowed. Encountered: "
3258
"%(method)s, %(arguments)s.")
3260
def __init__(self, method, arguments):
3261
self.method = method
3262
self.arguments = arguments
3265
class UnsupportedKindChange(BzrError):
3267
_fmt = ("Kind change from %(from_kind)s to %(to_kind)s for "
3268
"%(path)s not supported by format %(format)r")
3270
def __init__(self, path, from_kind, to_kind, format):
3272
self.from_kind = from_kind
3273
self.to_kind = to_kind
3274
self.format = format
3277
class MissingFeature(BzrError):
3279
_fmt = ("Missing feature %(feature)s not provided by this "
3280
"version of Bazaar or any plugin.")
3282
def __init__(self, feature):
3283
self.feature = feature
3286
class PatchSyntax(BzrError):
3287
"""Base class for patch syntax errors."""
3290
class BinaryFiles(BzrError):
3292
_fmt = 'Binary files section encountered.'
3294
def __init__(self, orig_name, mod_name):
3295
self.orig_name = orig_name
3296
self.mod_name = mod_name
3299
class MalformedPatchHeader(PatchSyntax):
3301
_fmt = "Malformed patch header. %(desc)s\n%(line)r"
3303
def __init__(self, desc, line):
3308
class MalformedHunkHeader(PatchSyntax):
3310
_fmt = "Malformed hunk header. %(desc)s\n%(line)r"
3312
def __init__(self, desc, line):
3317
class MalformedLine(PatchSyntax):
3319
_fmt = "Malformed line. %(desc)s\n%(line)r"
3321
def __init__(self, desc, line):
3326
class PatchConflict(BzrError):
3328
_fmt = ('Text contents mismatch at line %(line_no)d. Original has '
3329
'"%(orig_line)s", but patch says it should be "%(patch_line)s"')
3331
def __init__(self, line_no, orig_line, patch_line):
3332
self.line_no = line_no
3333
self.orig_line = orig_line.rstrip('\n')
3334
self.patch_line = patch_line.rstrip('\n')
3337
class FeatureAlreadyRegistered(BzrError):
3339
_fmt = 'The feature %(feature)s has already been registered.'
3341
def __init__(self, feature):
3342
self.feature = feature