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."
675
723
self.bzrdir.open_repository()
676
724
except NoRepositoryPresent:
679
# Just ignore unexpected errors. Raising arbitrary errors
680
# during str(err) can provoke strange bugs. Concretely
681
# Launchpad's codehosting managed to raise NotBranchError
682
# here, and then get stuck in an infinite loop/recursion
683
# trying to str() that error. All this error really cares
684
# about that there's no working repository there, and if
685
# open_repository() fails, there probably isn't.
688
727
self.detail = ': location is a repository'
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 \
758
778
self.path = bzrdir.transport.clone('..').base
781
class FileInWrongBranch(BzrError):
783
_fmt = 'File "%(path)s" is not in branch %(branch_base)s.'
785
# use PathNotChild instead
786
@symbol_versioning.deprecated_method(symbol_versioning.deprecated_in((2, 3, 0)))
787
def __init__(self, branch, path):
788
BzrError.__init__(self)
790
self.branch_base = branch.base
761
794
class UnsupportedFormatError(BzrError):
763
796
_fmt = "Unsupported branch format: %(format)s\nPlease run 'bzr upgrade'"
1258
1263
not_ancestor_id=not_ancestor_id)
1266
class AmbiguousBase(BzrError):
1268
def __init__(self, bases):
1269
symbol_versioning.warn("BzrError AmbiguousBase has been deprecated "
1270
"as of bzrlib 0.8.", DeprecationWarning, stacklevel=2)
1271
msg = ("The correct base is unclear, because %s are all equally close"
1273
BzrError.__init__(self, msg)
1261
1277
class NoCommits(BranchError):
1263
1279
_fmt = "Branch %(branch)s has no commits."
1674
1683
class InvalidHttpResponse(TransportError):
1676
_fmt = "Invalid http response for %(path)s: %(msg)s%(orig_error)s"
1685
_fmt = "Invalid http response for %(path)s: %(msg)s"
1678
1687
def __init__(self, path, msg, orig_error=None):
1679
1688
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
1689
TransportError.__init__(self, msg, orig_error=orig_error)
1689
class CertificateError(TransportError):
1691
_fmt = "Certificate error: %(error)s"
1693
def __init__(self, error):
1697
1692
class InvalidHttpRange(InvalidHttpResponse):
1699
1694
_fmt = "Invalid http range %(range)r for %(path)s: %(msg)s"
1703
1698
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
1701
class InvalidHttpContentType(InvalidHttpResponse):
1721
1703
_fmt = 'Invalid http Content-type "%(ctype)s" for %(path)s: %(msg)s'
1749
1731
_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
1734
class ParseConfigError(BzrError):
1763
_fmt = "Error(s) parsing config file %(filename)s:\n%(errors)s"
1765
1736
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)
1737
if filename is None:
1739
message = "Error(s) parsing config file %s:\n%s" % \
1740
(filename, ('\n'.join(e.msg for e in errors)))
1741
BzrError.__init__(self, message)
1780
1744
class NoEmailInUsername(BzrError):
1789
1753
class SigningFailed(BzrError):
1791
_fmt = 'Failed to GPG sign data with command "%(command_line)s"'
1755
_fmt = 'Failed to gpg sign data with command "%(command_line)s"'
1793
1757
def __init__(self, command_line):
1794
1758
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
1761
class WorkingTreeNotRevision(BzrError):
1823
1763
_fmt = ("The working tree for %(basedir)s has changed since"
1997
1937
class BzrMoveFailedError(BzrError):
1999
_fmt = ("Could not move %(from_path)s%(operator)s %(to_path)s"
2000
"%(_has_extra)s%(extra)s")
1939
_fmt = "Could not move %(from_path)s%(operator)s %(to_path)s%(extra)s"
2002
1941
def __init__(self, from_path='', to_path='', extra=None):
2003
1942
from bzrlib.osutils import splitpath
2004
1943
BzrError.__init__(self)
2006
self.extra, self._has_extra = extra, ': '
1945
self.extra = ': ' + str(extra)
2008
self.extra = self._has_extra = ''
2010
1949
has_from = len(from_path) > 0
2011
1950
has_to = len(to_path) > 0
2033
1972
class BzrRenameFailedError(BzrMoveFailedError):
2035
_fmt = ("Could not rename %(from_path)s%(operator)s %(to_path)s"
2036
"%(_has_extra)s%(extra)s")
1974
_fmt = "Could not rename %(from_path)s%(operator)s %(to_path)s%(extra)s"
2038
1976
def __init__(self, from_path, to_path, extra=None):
2039
1977
BzrMoveFailedError.__init__(self, from_path, to_path, extra)
1979
class BzrRemoveChangedFilesError(BzrError):
1980
"""Used when user is trying to remove changed files."""
1982
_fmt = ("Can't safely remove modified or unknown files:\n"
1983
"%(changes_as_text)s"
1984
"Use --keep to not delete them, or --force to delete them regardless.")
1986
def __init__(self, tree_delta):
1987
symbol_versioning.warn(symbol_versioning.deprecated_in((2, 3, 0)) %
1988
"BzrRemoveChangedFilesError", DeprecationWarning, stacklevel=2)
1989
BzrError.__init__(self)
1990
self.changes_as_text = tree_delta.get_changes_as_text()
1991
#self.paths_as_string = '\n'.join(changed_files)
1992
#self.paths_as_string = '\n'.join([quotefn(p) for p in changed_files])
2042
1995
class BzrBadParameterNotString(BzrBadParameter):
2677
2630
This is distinct from ErrorFromSmartServer so that it is possible to
2678
2631
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.
2632
- ErrorFromSmartServer was uncaught. This is logic error in the client
2633
and so should provoke a traceback to the user.
2634
- ErrorFromSmartServer was caught but its error_tuple could not be
2635
translated. This is probably because the server sent us garbage, and
2636
should not provoke a traceback.
2687
2639
_fmt = "Server sent an unexpected error: %(error_tuple)r"
2893
2853
BzrError.__init__(self, tree=tree, display_url=display_url, more=more)
2896
class StoringUncommittedNotSupported(BzrError):
2898
_fmt = ('Branch "%(display_url)s" does not support storing uncommitted'
2901
def __init__(self, branch):
2902
import bzrlib.urlutils as urlutils
2903
user_url = getattr(branch, "user_url", None)
2904
if user_url is None:
2905
display_url = str(branch)
2907
display_url = urlutils.unescape_for_display(user_url, 'ascii')
2908
BzrError.__init__(self, branch=branch, display_url=display_url)
2911
2856
class ShelvedChanges(UncommittedChanges):
2913
2858
_fmt = ('Working tree "%(display_url)s" has shelved changes'
2985
2930
from bzrlib.osutils import get_user_encoding
2986
2931
self.path = path
2987
2932
self.kind = kind
2988
self.user_encoding = get_user_encoding()
2991
class NoSuchConfig(BzrError):
2993
_fmt = ('The "%(config_id)s" configuration does not exist.')
2995
def __init__(self, config_id):
2996
BzrError.__init__(self, config_id=config_id)
2999
class NoSuchConfigOption(BzrError):
3001
_fmt = ('The "%(option_name)s" configuration option does not exist.')
3003
def __init__(self, option_name):
3004
BzrError.__init__(self, option_name=option_name)
2933
self.user_encoding = osutils.get_user_encoding()
3007
2936
class NoSuchAlias(BzrError):
3052
2981
BzrError.__init__(self, unknowns_str=", ".join(unknowns))
2984
class HookFailed(BzrError):
2985
"""Raised when a pre_change_branch_tip hook function fails anything other
2986
than TipChangeRejected.
2988
Note that this exception is no longer raised, and the import is only left
2989
to be nice to code which might catch it in a plugin.
2992
_fmt = ("Hook '%(hook_name)s' during %(hook_stage)s failed:\n"
2993
"%(traceback_text)s%(exc_value)s")
2995
def __init__(self, hook_stage, hook_name, exc_info, warn=True):
2997
symbol_versioning.warn("BzrError HookFailed has been deprecated "
2998
"as of bzrlib 2.1.", DeprecationWarning, stacklevel=2)
3000
self.hook_stage = hook_stage
3001
self.hook_name = hook_name
3002
self.exc_info = exc_info
3003
self.exc_type = exc_info[0]
3004
self.exc_value = exc_info[1]
3005
self.exc_tb = exc_info[2]
3006
self.traceback_text = ''.join(traceback.format_tb(self.exc_tb))
3055
3009
class TipChangeRejected(BzrError):
3056
3010
"""A pre_change_branch_tip hook function may raise this to cleanly and
3057
3011
explicitly abort a change to a branch tip.
3236
3178
def __init__(self, branch_url):
3237
3179
self.branch_url = branch_url
3240
# FIXME: I would prefer to define the config related exception classes in
3241
# config.py but the lazy import mechanism proscribes this -- vila 20101222
3242
class OptionExpansionLoop(BzrError):
3244
_fmt = 'Loop involving %(refs)r while expanding "%(string)s".'
3246
def __init__(self, string, refs):
3247
self.string = string
3248
self.refs = '->'.join(refs)
3251
class ExpandingUnknownOption(BzrError):
3253
_fmt = 'Option "%(name)s" is not defined while expanding "%(string)s".'
3255
def __init__(self, name, string):
3257
self.string = string
3260
class IllegalOptionName(BzrError):
3262
_fmt = 'Option "%(name)s" is not allowed.'
3264
def __init__(self, name):
3268
class NoCompatibleInter(BzrError):
3270
_fmt = ('No compatible object available for operations from %(source)r '
3273
def __init__(self, source, target):
3274
self.source = source
3275
self.target = target
3278
class HpssVfsRequestNotAllowed(BzrError):
3280
_fmt = ("VFS requests over the smart server are not allowed. Encountered: "
3281
"%(method)s, %(arguments)s.")
3283
def __init__(self, method, arguments):
3284
self.method = method
3285
self.arguments = arguments
3288
class UnsupportedKindChange(BzrError):
3290
_fmt = ("Kind change from %(from_kind)s to %(to_kind)s for "
3291
"%(path)s not supported by format %(format)r")
3293
def __init__(self, path, from_kind, to_kind, format):
3295
self.from_kind = from_kind
3296
self.to_kind = to_kind
3297
self.format = format
3300
class MissingFeature(BzrError):
3302
_fmt = ("Missing feature %(feature)s not provided by this "
3303
"version of Bazaar or any plugin.")
3305
def __init__(self, feature):
3306
self.feature = feature
3309
class PatchSyntax(BzrError):
3310
"""Base class for patch syntax errors."""
3313
class BinaryFiles(BzrError):
3315
_fmt = 'Binary files section encountered.'
3317
def __init__(self, orig_name, mod_name):
3318
self.orig_name = orig_name
3319
self.mod_name = mod_name
3322
class MalformedPatchHeader(PatchSyntax):
3324
_fmt = "Malformed patch header. %(desc)s\n%(line)r"
3326
def __init__(self, desc, line):
3331
class MalformedHunkHeader(PatchSyntax):
3333
_fmt = "Malformed hunk header. %(desc)s\n%(line)r"
3335
def __init__(self, desc, line):
3340
class MalformedLine(PatchSyntax):
3342
_fmt = "Malformed line. %(desc)s\n%(line)r"
3344
def __init__(self, desc, line):
3349
class PatchConflict(BzrError):
3351
_fmt = ('Text contents mismatch at line %(line_no)d. Original has '
3352
'"%(orig_line)s", but patch says it should be "%(patch_line)s"')
3354
def __init__(self, line_no, orig_line, patch_line):
3355
self.line_no = line_no
3356
self.orig_line = orig_line.rstrip('\n')
3357
self.patch_line = patch_line.rstrip('\n')
3360
class FeatureAlreadyRegistered(BzrError):
3362
_fmt = 'The feature %(feature)s has already been registered.'
3364
def __init__(self, feature):
3365
self.feature = feature
3368
class ChangesAlreadyStored(BzrCommandError):
3370
_fmt = ('Cannot store uncommitted changes because this branch already'
3371
' stores uncommitted changes.')