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."
649
690
# TODO: This is given a URL; we try to unescape it but doing that from inside
650
691
# the exception object is a bit undesirable.
651
# TODO: Probably this behavior of should be a common superclass
692
# TODO: Probably this behavior of should be a common superclass
652
693
class NotBranchError(PathError):
654
_fmt = 'Not a branch: "%(path)s"%(detail)s.'
695
_fmt = 'Not a branch: "%(path)s".'
656
def __init__(self, path, detail=None, bzrdir=None):
697
def __init__(self, path):
657
698
import bzrlib.urlutils as urlutils
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)
699
self.path = urlutils.unescape_for_display(path, 'ascii')
694
702
class NoSubmitBranch(PathError):
1789
1722
class SigningFailed(BzrError):
1791
_fmt = 'Failed to GPG sign data with command "%(command_line)s"'
1724
_fmt = 'Failed to gpg sign data with command "%(command_line)s"'
1793
1726
def __init__(self, command_line):
1794
1727
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
1730
class WorkingTreeNotRevision(BzrError):
1823
_fmt = ("The working tree for %(basedir)s has changed since"
1732
_fmt = ("The working tree for %(basedir)s has changed since"
1824
1733
" the last commit, but weave merge requires that it be"
2877
2762
class UncommittedChanges(BzrError):
2879
_fmt = ('Working tree "%(display_url)s" has uncommitted changes'
2880
' (See bzr status).%(more)s')
2882
def __init__(self, tree, more=None):
2887
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')
2893
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
class ShelvedChanges(UncommittedChanges):
2913
_fmt = ('Working tree "%(display_url)s" has shelved changes'
2914
' (See bzr shelve --list).%(more)s')
2764
_fmt = 'Working tree "%(display_url)s" has uncommitted changes.'
2766
def __init__(self, tree):
2767
import bzrlib.urlutils as urlutils
2768
display_url = urlutils.unescape_for_display(
2769
tree.bzrdir.root_transport.base, 'ascii')
2770
BzrError.__init__(self, tree=tree, display_url=display_url)
2917
2773
class MissingTemplateVariable(BzrError):
3088
2939
BzrError.__init__(self, shelf_id=shelf_id)
3091
class InvalidShelfId(BzrError):
3093
_fmt = '"%(invalid_id)s" is not a valid shelf id, try a number instead.'
3095
def __init__(self, invalid_id):
3096
BzrError.__init__(self, invalid_id=invalid_id)
3099
class JailBreak(BzrError):
3101
_fmt = "An attempt to access a url outside the server jail was made: '%(url)s'."
3103
def __init__(self, url):
3104
BzrError.__init__(self, url=url)
3107
2942
class UserAbort(BzrError):
3109
2944
_fmt = 'The user aborted the operation.'
3112
class MustHaveWorkingTree(BzrError):
3114
_fmt = ("Branching '%(url)s'(%(format)s) must create a working tree.")
3116
def __init__(self, format, url):
3117
BzrError.__init__(self, format=format, url=url)
3120
class NoSuchView(BzrError):
3121
"""A view does not exist.
3124
_fmt = u"No such view: %(view_name)s."
3126
def __init__(self, view_name):
3127
self.view_name = view_name
3130
class ViewsNotSupported(BzrError):
3131
"""Views are not supported by a tree format.
3134
_fmt = ("Views are not supported by %(tree)s;"
3135
" use 'bzr upgrade' to change your tree to a later format.")
3137
def __init__(self, tree):
3141
class FileOutsideView(BzrError):
3143
_fmt = ('Specified file "%(file_name)s" is outside the current view: '
3146
def __init__(self, file_name, view_files):
3147
self.file_name = file_name
3148
self.view_str = ", ".join(view_files)
3151
class UnresumableWriteGroup(BzrError):
3153
_fmt = ("Repository %(repository)s cannot resume write group "
3154
"%(write_groups)r: %(reason)s")
3156
internal_error = True
3158
def __init__(self, repository, write_groups, reason):
3159
self.repository = repository
3160
self.write_groups = write_groups
3161
self.reason = reason
3164
class UnsuspendableWriteGroup(BzrError):
3166
_fmt = ("Repository %(repository)s cannot suspend a write group.")
3168
internal_error = True
3170
def __init__(self, repository):
3171
self.repository = repository
3174
class LossyPushToSameVCS(BzrError):
3176
_fmt = ("Lossy push not possible between %(source_branch)r and "
3177
"%(target_branch)r that are in the same VCS.")
3179
internal_error = True
3181
def __init__(self, source_branch, target_branch):
3182
self.source_branch = source_branch
3183
self.target_branch = target_branch
3186
class NoRoundtrippingSupport(BzrError):
3188
_fmt = ("Roundtripping is not supported between %(source_branch)r and "
3189
"%(target_branch)r.")
3191
internal_error = True
3193
def __init__(self, source_branch, target_branch):
3194
self.source_branch = source_branch
3195
self.target_branch = target_branch
3198
class FileTimestampUnavailable(BzrError):
3200
_fmt = "The filestamp for %(path)s is not available."
3202
internal_error = True
3204
def __init__(self, path):
3208
class NoColocatedBranchSupport(BzrError):
3210
_fmt = ("%(bzrdir)r does not support co-located branches.")
3212
def __init__(self, bzrdir):
3213
self.bzrdir = bzrdir
3216
class NoWhoami(BzrError):
3218
_fmt = ('Unable to determine your name.\n'
3219
"Please, set your name with the 'whoami' command.\n"
3220
'E.g. bzr whoami "Your Name <name@example.com>"')
3223
class InvalidPattern(BzrError):
3225
_fmt = ('Invalid pattern(s) found. %(msg)s')
3227
def __init__(self, msg):
3231
class RecursiveBind(BzrError):
3233
_fmt = ('Branch "%(branch_url)s" appears to be bound to itself. '
3234
'Please use `bzr unbind` to fix.')
3236
def __init__(self, branch_url):
3237
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 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.')