33
33
# TODO: is there any value in providing the .args field used by standard
34
# python exceptions? A list of values with no names seems less useful
34
# python exceptions? A list of values with no names seems less useful
37
# TODO: Perhaps convert the exception to a string at the moment it's
37
# TODO: Perhaps convert the exception to a string at the moment it's
38
38
# constructed to make sure it will succeed. But that says nothing about
39
39
# exceptions that are never raised.
72
72
arguments can be given. The first is for generic "user" errors which
73
73
are not intended to be caught and so do not need a specific subclass.
74
74
The second case is for use with subclasses that provide a _fmt format
75
string to print the arguments.
75
string to print the arguments.
77
Keyword arguments are taken as parameters to the error, which can
78
be inserted into the format string template. It's recommended
79
that subclasses override the __init__ method to require specific
77
Keyword arguments are taken as parameters to the error, which can
78
be inserted into the format string template. It's recommended
79
that subclasses override the __init__ method to require specific
82
82
:param msg: If given, this is the literal complete text for the error,
477
477
def __init__(self, name, value):
478
478
BzrError.__init__(self, name=name, value=value)
481
481
class StrictCommitFailed(BzrError):
483
483
_fmt = "Commit refused because there are unknown files in the tree"
486
486
# XXX: Should be unified with TransportError; they seem to represent the
488
488
# RBC 20060929: I think that unifiying with TransportError would be a mistake
489
# - this is finer than a TransportError - and more useful as such. It
489
# - this is finer than a TransportError - and more useful as such. It
490
490
# differentiates between 'transport has failed' and 'operation on a transport
492
492
class PathError(BzrError):
494
494
_fmt = "Generic path error: %(path)r%(extra)s)"
496
496
def __init__(self, path, extra=None):
690
690
# TODO: This is given a URL; we try to unescape it but doing that from inside
691
691
# the exception object is a bit undesirable.
692
# TODO: Probably this behavior of should be a common superclass
692
# TODO: Probably this behavior of should be a common superclass
693
693
class NotBranchError(PathError):
695
695
_fmt = 'Not a branch: "%(path)s".'
1131
1131
class NoSuchRevisionInTree(NoSuchRevision):
1132
1132
"""When using Tree.revision_tree, and the revision is not accessible."""
1134
1134
_fmt = "The revision id {%(revision_id)s} is not present in the tree %(tree)s."
1136
1136
def __init__(self, tree, revision_id):
1384
1384
class VersionedFileError(BzrError):
1386
1386
_fmt = "Versioned file error"
1389
1389
class RevisionNotPresent(VersionedFileError):
1391
1391
_fmt = 'Revision {%(revision_id)s} not present in "%(file_id)s".'
1393
1393
def __init__(self, revision_id, file_id):
1450
1450
def __init__(self, stream_format, target_format):
1451
1451
self.stream_format = stream_format
1452
1452
self.target_format = target_format
1455
1455
class KnitDataStreamUnknown(KnitError):
1456
1456
# Indicates a data stream we don't know how to handle.
1634
1634
self.port = ':%s' % port
1637
# XXX: This is also used for unexpected end of file, which is different at the
1638
# TCP level from "connection reset".
1637
1639
class ConnectionReset(TransportError):
1639
1641
_fmt = "Connection closed: %(msg)s %(orig_error)s"
1730
1732
class WorkingTreeNotRevision(BzrError):
1732
_fmt = ("The working tree for %(basedir)s has changed since"
1734
_fmt = ("The working tree for %(basedir)s has changed since"
1733
1735
" the last commit, but weave merge requires that it be"
2049
2051
_fmt = """This tree contains left-over files from a failed operation.
2050
2052
Please examine %(limbo_dir)s to see if it contains any files you wish to
2051
2053
keep, and delete it when you are done."""
2053
2055
def __init__(self, limbo_dir):
2054
2056
BzrError.__init__(self)
2055
2057
self.limbo_dir = limbo_dir
2236
2238
self.text = text
2239
class BadBundle(BzrError):
2241
class BadBundle(BzrError):
2241
2243
_fmt = "Bad bzr revision-bundle: %(text)r"
2243
2245
def __init__(self, text):
2245
2247
self.text = text
2248
class MalformedHeader(BadBundle):
2250
class MalformedHeader(BadBundle):
2250
2252
_fmt = "Malformed bzr revision-bundle header: %(text)r"
2253
class MalformedPatches(BadBundle):
2255
class MalformedPatches(BadBundle):
2255
2257
_fmt = "Malformed patches in bzr revision-bundle: %(text)r"
2258
class MalformedFooter(BadBundle):
2260
class MalformedFooter(BadBundle):
2260
2262
_fmt = "Malformed footer in bzr revision-bundle: %(text)r"
2263
2265
class UnsupportedEOLMarker(BadBundle):
2265
_fmt = "End of line marker was not \\n in bzr revision-bundle"
2267
_fmt = "End of line marker was not \\n in bzr revision-bundle"
2267
2269
def __init__(self):
2268
# XXX: BadBundle's constructor assumes there's explanatory text,
2270
# XXX: BadBundle's constructor assumes there's explanatory text,
2269
2271
# but for this there is not
2270
2272
BzrError.__init__(self)
2273
2275
class IncompatibleBundleFormat(BzrError):
2275
2277
_fmt = "Bundle format %(bundle_format)s is incompatible with %(other)s"
2277
2279
def __init__(self, bundle_format, other):
2588
2590
class UnknownContainerFormatError(ContainerError):
2590
2592
_fmt = "Unrecognised container format: %(container_format)r"
2592
2594
def __init__(self, container_format):
2593
2595
self.container_format = container_format
2817
2819
class CommandAvailableInPlugin(StandardError):
2819
2821
internal_error = False
2821
2823
def __init__(self, cmd_name, plugin_metadata, provider):
2823
2825
self.plugin_metadata = plugin_metadata
2824
2826
self.cmd_name = cmd_name
2825
2827
self.provider = provider
2827
2829
def __str__(self):
2829
_fmt = ('"%s" is not a standard bzr command. \n'
2831
_fmt = ('"%s" is not a standard bzr command. \n'
2830
2832
'However, the following official plugin provides this command: %s\n'
2831
2833
'You can install it by going to: %s'
2832
% (self.cmd_name, self.plugin_metadata['name'],
2834
% (self.cmd_name, self.plugin_metadata['name'],
2833
2835
self.plugin_metadata['url']))
2838
2840
class NoPluginAvailable(BzrError):
2842
2844
class NotATerminal(BzrError):
2966
2968
def __init__(self, format, url):
2967
2969
BzrError.__init__(self, format=format, url=url)
2972
class NoSuchView(BzrError):
2973
"""A view does not exist.
2976
_fmt = u"No such view: %(view_name)s."
2978
def __init__(self, view_name):
2979
self.view_name = view_name
2982
class ViewsNotSupported(BzrError):
2983
"""Views are not supported by a tree format.
2986
_fmt = ("Views are not supported by %(tree)s;"
2987
" use 'bzr upgrade' to change your tree to a later format.")
2989
def __init__(self, tree):
2993
class FileOutsideView(BzrError):
2995
_fmt = ('Specified file "%(file_name)s" is outside the current view: '
2998
def __init__(self, file_name, view_files):
2999
self.file_name = file_name
3000
self.view_str = ", ".join(view_files)
3003
class UnresumableWriteGroup(BzrError):
3005
_fmt = ("Repository %(repository)s cannot resume write group "
3006
"%(write_groups)r: %(reason)s")
3008
internal_error = True
3010
def __init__(self, repository, write_groups, reason):
3011
self.repository = repository
3012
self.write_groups = write_groups
3013
self.reason = reason
3016
class UnsuspendableWriteGroup(BzrError):
3018
_fmt = ("Repository %(repository)s cannot suspend a write group.")
3020
internal_error = True
3022
def __init__(self, repository):
3023
self.repository = repository