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()
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."
692
651
# TODO: Probably this behavior of should be a common superclass
693
652
class NotBranchError(PathError):
695
_fmt = 'Not a branch: "%(path)s".'
654
_fmt = 'Not a branch: "%(path)s"%(detail)s.'
697
def __init__(self, path):
656
def __init__(self, path, detail=None, bzrdir=None):
698
657
import bzrlib.urlutils as urlutils
699
self.path = urlutils.unescape_for_display(path, 'ascii')
658
path = urlutils.unescape_for_display(path, 'ascii')
659
if detail is not None:
660
detail = ': ' + detail
663
PathError.__init__(self, path=path)
666
return '<%s %r>' % (self.__class__.__name__, self.__dict__)
669
# XXX: Ideally self.detail would be a property, but Exceptions in
670
# Python 2.4 have to be old-style classes so properties don't work.
671
# Instead we override _format.
672
if self.detail is None:
673
if self.bzrdir is not None:
675
self.bzrdir.open_repository()
676
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
self.detail = ': location is a repository'
691
return PathError._format(self)
702
694
class NoSubmitBranch(PathError):
1703
1741
_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
1706
1753
class ParseConfigError(BzrError):
1755
_fmt = "Error(s) parsing config file %(filename)s:\n%(errors)s"
1708
1757
def __init__(self, errors, filename):
1709
if filename is None:
1711
message = "Error(s) parsing config file %s:\n%s" % \
1712
(filename, ('\n'.join(e.msg for e in errors)))
1713
BzrError.__init__(self, message)
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)
1716
1772
class NoEmailInUsername(BzrError):
1725
1781
class SigningFailed(BzrError):
1727
_fmt = 'Failed to gpg sign data with command "%(command_line)s"'
1783
_fmt = 'Failed to GPG sign data with command "%(command_line)s"'
1729
1785
def __init__(self, command_line):
1730
1786
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)
1733
1813
class WorkingTreeNotRevision(BzrError):
1735
1815
_fmt = ("The working tree for %(basedir)s has changed since"
1895
1975
_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
1898
1989
class BzrMoveFailedError(BzrError):
1900
_fmt = "Could not move %(from_path)s%(operator)s %(to_path)s%(extra)s"
1991
_fmt = ("Could not move %(from_path)s%(operator)s %(to_path)s"
1992
"%(_has_extra)s%(extra)s")
1902
1994
def __init__(self, from_path='', to_path='', extra=None):
1903
1995
from bzrlib.osutils import splitpath
1904
1996
BzrError.__init__(self)
1906
self.extra = ': ' + str(extra)
1998
self.extra, self._has_extra = extra, ': '
2000
self.extra = self._has_extra = ''
1910
2002
has_from = len(from_path) > 0
1911
2003
has_to = len(to_path) > 0
1933
2025
class BzrRenameFailedError(BzrMoveFailedError):
1935
_fmt = "Could not rename %(from_path)s%(operator)s %(to_path)s%(extra)s"
2027
_fmt = ("Could not rename %(from_path)s%(operator)s %(to_path)s"
2028
"%(_has_extra)s%(extra)s")
1937
2030
def __init__(self, from_path, to_path, extra=None):
1938
2031
BzrMoveFailedError.__init__(self, from_path, to_path, extra)
1940
class BzrRemoveChangedFilesError(BzrError):
1941
"""Used when user is trying to remove changed files."""
1943
_fmt = ("Can't safely remove modified or unknown files:\n"
1944
"%(changes_as_text)s"
1945
"Use --keep to not delete them, or --force to delete them regardless.")
1947
def __init__(self, tree_delta):
1948
BzrError.__init__(self)
1949
self.changes_as_text = tree_delta.get_changes_as_text()
1950
#self.paths_as_string = '\n'.join(changed_files)
1951
#self.paths_as_string = '\n'.join([quotefn(p) for p in changed_files])
1954
2034
class BzrBadParameterNotString(BzrBadParameter):
2780
2869
class UncommittedChanges(BzrError):
2782
_fmt = 'Working tree "%(display_url)s" has uncommitted changes.'
2784
def __init__(self, tree):
2785
import bzrlib.urlutils as urlutils
2786
display_url = urlutils.unescape_for_display(
2787
tree.bzrdir.root_transport.base, 'ascii')
2788
BzrError.__init__(self, tree=tree, display_url=display_url)
2871
_fmt = ('Working tree "%(display_url)s" has uncommitted changes'
2872
' (See bzr status).%(more)s')
2874
def __init__(self, tree, more=None):
2879
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')
2885
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')
2791
2909
class MissingTemplateVariable(BzrError):
2914
3044
BzrError.__init__(self, unknowns_str=", ".join(unknowns))
2917
class HookFailed(BzrError):
2918
"""Raised when a pre_change_branch_tip hook function fails anything other
2919
than TipChangeRejected.
2922
_fmt = ("Hook '%(hook_name)s' during %(hook_stage)s failed:\n"
2923
"%(traceback_text)s%(exc_value)s")
2925
def __init__(self, hook_stage, hook_name, exc_info):
2927
self.hook_stage = hook_stage
2928
self.hook_name = hook_name
2929
self.exc_info = exc_info
2930
self.exc_type = exc_info[0]
2931
self.exc_value = exc_info[1]
2932
self.exc_tb = exc_info[2]
2933
self.traceback_text = ''.join(traceback.format_tb(self.exc_tb))
2936
3047
class TipChangeRejected(BzrError):
2937
3048
"""A pre_change_branch_tip hook function may raise this to cleanly and
2938
3049
explicitly abort a change to a branch tip.
3031
3162
def __init__(self, repository):
3032
3163
self.repository = repository
3166
class LossyPushToSameVCS(BzrError):
3168
_fmt = ("Lossy push not possible between %(source_branch)r and "
3169
"%(target_branch)r that are in the same VCS.")
3171
internal_error = True
3173
def __init__(self, source_branch, target_branch):
3174
self.source_branch = source_branch
3175
self.target_branch = target_branch
3178
class NoRoundtrippingSupport(BzrError):
3180
_fmt = ("Roundtripping is not supported between %(source_branch)r and "
3181
"%(target_branch)r.")
3183
internal_error = True
3185
def __init__(self, source_branch, target_branch):
3186
self.source_branch = source_branch
3187
self.target_branch = target_branch
3190
class FileTimestampUnavailable(BzrError):
3192
_fmt = "The filestamp for %(path)s is not available."
3194
internal_error = True
3196
def __init__(self, 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.')