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.
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
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):
2744
2746
_fmt = "'%(display_url)s' is already standalone."
2749
class AlreadyWithTrees(BzrDirError):
2751
_fmt = ("Shared repository '%(display_url)s' already creates "
2755
class AlreadyWithNoTrees(BzrDirError):
2757
_fmt = ("Shared repository '%(display_url)s' already doesn't create "
2747
2761
class ReconfigurationNotSupported(BzrDirError):
2749
2763
_fmt = "Requested reconfiguration of '%(display_url)s' is not supported."
2805
2819
class CommandAvailableInPlugin(StandardError):
2807
2821
internal_error = False
2809
2823
def __init__(self, cmd_name, plugin_metadata, provider):
2811
2825
self.plugin_metadata = plugin_metadata
2812
2826
self.cmd_name = cmd_name
2813
2827
self.provider = provider
2815
2829
def __str__(self):
2817
_fmt = ('"%s" is not a standard bzr command. \n'
2831
_fmt = ('"%s" is not a standard bzr command. \n'
2818
2832
'However, the following official plugin provides this command: %s\n'
2819
2833
'You can install it by going to: %s'
2820
% (self.cmd_name, self.plugin_metadata['name'],
2834
% (self.cmd_name, self.plugin_metadata['name'],
2821
2835
self.plugin_metadata['url']))
2826
2840
class NoPluginAvailable(BzrError):
2830
2844
class NotATerminal(BzrError):
2934
2948
BzrError.__init__(self, shelf_id=shelf_id)
2951
class InvalidShelfId(BzrError):
2953
_fmt = '"%(invalid_id)s" is not a valid shelf id, try a number instead.'
2955
def __init__(self, invalid_id):
2956
BzrError.__init__(self, invalid_id=invalid_id)
2937
2959
class UserAbort(BzrError):
2939
2961
_fmt = 'The user aborted the operation.'
2964
class MustHaveWorkingTree(BzrError):
2966
_fmt = ("Branching '%(url)s'(%(format)s) must create a working tree.")
2968
def __init__(self, format, url):
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