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."
622
571
_fmt = 'Unsupported protocol for url "%(path)s"%(extra)s'
624
def __init__(self, url, extra):
573
def __init__(self, url, extra=""):
625
574
PathError.__init__(self, url, extra=extra)
790
739
self.path = bzrdir.transport.clone('..').base
793
class FileInWrongBranch(BzrError):
795
_fmt = 'File "%(path)s" is not in branch %(branch_base)s.'
797
# use PathNotChild instead
798
@symbol_versioning.deprecated_method(symbol_versioning.deprecated_in((2, 3, 0)))
799
def __init__(self, branch, path):
800
BzrError.__init__(self)
802
self.branch_base = branch.base
806
742
class UnsupportedFormatError(BzrError):
808
744
_fmt = "Unsupported branch format: %(format)s\nPlease run 'bzr upgrade'"
827
763
self.bzrdir = bzrdir_format
766
class ParseFormatError(BzrError):
768
_fmt = "Parse error on line %(lineno)d of %(format)s format: %(line)s"
770
def __init__(self, format, lineno, line, text):
771
BzrError.__init__(self)
830
778
class IncompatibleRepositories(BzrError):
831
779
"""Report an error that two repositories are not compatible.
1296
1239
not_ancestor_id=not_ancestor_id)
1299
class AmbiguousBase(BzrError):
1301
def __init__(self, bases):
1302
symbol_versioning.warn("BzrError AmbiguousBase has been deprecated "
1303
"as of bzrlib 0.8.", DeprecationWarning, stacklevel=2)
1304
msg = ("The correct base is unclear, because %s are all equally close"
1306
BzrError.__init__(self, msg)
1310
1242
class NoCommits(BranchError):
1312
1244
_fmt = "Branch %(branch)s has no commits."
1737
1676
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)
1740
1692
class InvalidHttpContentType(InvalidHttpResponse):
1742
1694
_fmt = 'Invalid http Content-type "%(ctype)s" for %(path)s: %(msg)s'
1770
1722
_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
1773
1734
class ParseConfigError(BzrError):
1775
1736
_fmt = "Error(s) parsing config file %(filename)s:\n%(errors)s"
1780
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)
1783
1752
class NoEmailInUsername(BzrError):
1785
1754
_fmt = "%(username)r does not seem to contain a reasonable email address"
1792
1761
class SigningFailed(BzrError):
1794
_fmt = 'Failed to gpg sign data with command "%(command_line)s"'
1763
_fmt = 'Failed to GPG sign data with command "%(command_line)s"'
1796
1765
def __init__(self, command_line):
1797
1766
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)
1800
1793
class WorkingTreeNotRevision(BzrError):
1802
1795
_fmt = ("The working tree for %(basedir)s has changed since"
2018
2011
BzrMoveFailedError.__init__(self, from_path, to_path, extra)
2021
class BzrRemoveChangedFilesError(BzrError):
2022
"""Used when user is trying to remove changed files."""
2024
_fmt = ("Can't safely remove modified or unknown files:\n"
2025
"%(changes_as_text)s"
2026
"Use --keep to not delete them, or --force to delete them regardless.")
2028
def __init__(self, tree_delta):
2029
symbol_versioning.warn(symbol_versioning.deprecated_in((2, 3, 0)) %
2030
"BzrRemoveChangedFilesError", DeprecationWarning, stacklevel=2)
2031
BzrError.__init__(self)
2032
self.changes_as_text = tree_delta.get_changes_as_text()
2033
#self.paths_as_string = '\n'.join(changed_files)
2034
#self.paths_as_string = '\n'.join([quotefn(p) for p in changed_files])
2037
2014
class BzrBadParameterNotString(BzrBadParameter):
2039
2016
_fmt = "Parameter %(param)s is not a string or unicode string."
2055
2032
_fmt = "Parameter %(param)s contains a newline."
2058
class DependencyNotPresent(BzrError):
2060
_fmt = 'Unable to import library "%(library)s": %(error)s'
2062
def __init__(self, library, error):
2063
BzrError.__init__(self, library=library, error=error)
2066
2035
class ParamikoNotPresent(DependencyNotPresent):
2068
2037
_fmt = "Unable to import paramiko (required for sftp support): %(error)s"
3040
3017
BzrError.__init__(self, unknowns_str=", ".join(unknowns))
3043
class HookFailed(BzrError):
3044
"""Raised when a pre_change_branch_tip hook function fails anything other
3045
than TipChangeRejected.
3047
Note that this exception is no longer raised, and the import is only left
3048
to be nice to code which might catch it in a plugin.
3051
_fmt = ("Hook '%(hook_name)s' during %(hook_stage)s failed:\n"
3052
"%(traceback_text)s%(exc_value)s")
3054
def __init__(self, hook_stage, hook_name, exc_info, warn=True):
3056
symbol_versioning.warn("BzrError HookFailed has been deprecated "
3057
"as of bzrlib 2.1.", DeprecationWarning, stacklevel=2)
3059
self.hook_stage = hook_stage
3060
self.hook_name = hook_name
3061
self.exc_info = exc_info
3062
self.exc_type = exc_info[0]
3063
self.exc_value = exc_info[1]
3064
self.exc_tb = exc_info[2]
3065
self.traceback_text = ''.join(traceback.format_tb(self.exc_tb))
3068
3020
class TipChangeRejected(BzrError):
3069
3021
"""A pre_change_branch_tip hook function may raise this to cleanly and
3070
3022
explicitly abort a change to a branch tip.
3081
3033
_fmt = "Shelf corrupt."
3036
class DecompressCorruption(BzrError):
3038
_fmt = "Corruption while decompressing repository file%(orig_error)s"
3040
def __init__(self, orig_error=None):
3041
if orig_error is not None:
3042
self.orig_error = ", %s" % (orig_error,)
3044
self.orig_error = ""
3045
BzrError.__init__(self)
3084
3048
class NoSuchShelfId(BzrError):
3086
3050
_fmt = 'No changes are shelved with id "%(shelf_id)d".'
3266
3230
def __init__(self, source, target):
3267
3231
self.source = source
3268
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