65
39
# constructed to make sure it will succeed. But that says nothing about
66
40
# exceptions that are never raised.
68
# TODO: Convert all the other error classes here to BzrNewError, and eliminate
71
# TODO: The pattern (from hct) of using classes docstrings as message
72
# templates is cute but maybe not such a great idea - perhaps should have a
73
# separate static message_template.
42
# TODO: selftest assertRaises should probably also check that every error
43
# raised can be formatted as a string successfully, and without giving
47
# return codes from the bzr program
50
EXIT_INTERNAL_ERROR = 4
76
53
class BzrError(StandardError):
55
Base class for errors raised by bzrlib.
57
:cvar internal_error: if True this was probably caused by a bzr bug and
58
should be displayed with a traceback; if False (or absent) this was
59
probably a user or environment error and they don't need the gory details.
60
(That can be overridden by -Derror on the command line.)
62
:cvar _fmt: Format string to display the error; this is expanded
63
by the instance's dict.
66
internal_error = False
68
def __init__(self, msg=None, **kwds):
69
"""Construct a new BzrError.
71
There are two alternative forms for constructing these objects.
72
Either a preformatted string may be passed, or a set of named
73
arguments can be given. The first is for generic "user" errors which
74
are not intended to be caught and so do not need a specific subclass.
75
The second case is for use with subclasses that provide a _fmt format
76
string to print the arguments.
78
Keyword arguments are taken as parameters to the error, which can
79
be inserted into the format string template. It's recommended
80
that subclasses override the __init__ method to require specific
83
:param msg: If given, this is the literal complete text for the error,
84
not subject to expansion.
86
StandardError.__init__(self)
88
# I was going to deprecate this, but it actually turns out to be
89
# quite handy - mbp 20061103.
90
self._preformatted_string = msg
92
self._preformatted_string = None
93
for key, value in kwds.items():
94
setattr(self, key, value)
78
# XXX: Should we show the exception class in
79
# exceptions that don't provide their own message?
80
# maybe it should be done at a higher level
81
## n = self.__class__.__name__ + ': '
83
if len(self.args) == 1:
84
return str(self.args[0])
85
elif len(self.args) == 2:
86
# further explanation or suggestions
88
return n + '\n '.join([self.args[0]] + self.args[1])
90
return n + "%r" % self
92
return n + `self.args`
97
s = getattr(self, '_preformatted_string', None)
99
# contains a preformatted message; must be cast to plain str
102
fmt = self._get_format_string()
104
d = dict(self.__dict__)
105
# special case: python2.5 puts the 'message' attribute in a
106
# slot, so it isn't seen in __dict__
107
d['message'] = getattr(self, 'message', 'no message')
109
# __str__() should always return a 'str' object
110
# never a 'unicode' object.
111
if isinstance(s, unicode):
112
return s.encode('utf8')
114
except (AttributeError, TypeError, NameError, ValueError, KeyError), e:
115
return 'Unprintable exception %s: dict=%r, fmt=%r, error=%r' \
116
% (self.__class__.__name__,
118
getattr(self, '_fmt', None),
121
def _get_format_string(self):
122
"""Return format string for this exception or None"""
123
fmt = getattr(self, '_fmt', None)
126
fmt = getattr(self, '__doc__', None)
128
symbol_versioning.warn("%s uses its docstring as a format, "
129
"it should use _fmt instead" % self.__class__.__name__,
132
return 'Unprintable exception %s: dict=%r, fmt=%r' \
133
% (self.__class__.__name__,
135
getattr(self, '_fmt', None),
139
class InternalBzrError(BzrError):
140
"""Base class for errors that are internal in nature.
142
This is a convenience class for errors that are internal. The
143
internal_error attribute can still be altered in subclasses, if needed.
144
Using this class is simply an easy way to get internal errors.
147
internal_error = True
95
150
class BzrNewError(BzrError):
151
"""Deprecated error base class."""
97
152
# base classes should override the docstring with their human-
98
153
# readable explanation
100
def __init__(self, **kwds):
155
def __init__(self, *args, **kwds):
156
# XXX: Use the underlying BzrError to always generate the args
157
# attribute if it doesn't exist. We can't use super here, because
158
# exceptions are old-style classes in python2.4 (but new in 2.5).
160
symbol_versioning.warn('BzrNewError was deprecated in bzr 0.13; '
161
'please convert %s to use BzrError instead'
162
% self.__class__.__name__,
165
BzrError.__init__(self, *args)
101
166
for key, value in kwds.items():
102
167
setattr(self, key, value)
104
169
def __str__(self):
106
return self.__doc__ % self.__dict__
107
except (NameError, ValueError, KeyError), e:
108
return 'Unprintable exception %s: %s' \
109
% (self.__class__.__name__, str(e))
112
class BzrCheckError(BzrNewError):
113
"""Internal check failed: %(message)s"""
171
# __str__() should always return a 'str' object
172
# never a 'unicode' object.
173
s = self.__doc__ % self.__dict__
174
if isinstance(s, unicode):
175
return s.encode('utf8')
177
except (TypeError, NameError, ValueError, KeyError), e:
178
return 'Unprintable exception %s(%r): %r' \
179
% (self.__class__.__name__,
183
class AlreadyBuilding(BzrError):
185
_fmt = "The tree builder is already building a tree."
188
class BzrCheckError(InternalBzrError):
190
_fmt = "Internal check failed: %(message)s"
115
192
def __init__(self, message):
116
BzrNewError.__init__(self)
193
BzrError.__init__(self)
117
194
self.message = message
120
class InvalidEntryName(BzrNewError):
121
"""Invalid entry name: %(name)s"""
197
class DisabledMethod(InternalBzrError):
199
_fmt = "The smart server method '%(class_name)s' is disabled."
201
def __init__(self, class_name):
202
BzrError.__init__(self)
203
self.class_name = class_name
206
class IncompatibleAPI(BzrError):
208
_fmt = 'The API for "%(api)s" is not compatible with "%(wanted)s". '\
209
'It supports versions "%(minimum)s" to "%(current)s".'
211
def __init__(self, api, wanted, minimum, current):
214
self.minimum = minimum
215
self.current = current
218
class InProcessTransport(BzrError):
220
_fmt = "The transport '%(transport)s' is only accessible within this " \
223
def __init__(self, transport):
224
self.transport = transport
227
class InvalidEntryName(InternalBzrError):
229
_fmt = "Invalid entry name: %(name)s"
122
231
def __init__(self, name):
123
BzrNewError.__init__(self)
232
BzrError.__init__(self)
127
class InvalidRevisionNumber(BzrNewError):
128
"""Invalid revision number %(revno)d"""
236
class InvalidRevisionNumber(BzrError):
238
_fmt = "Invalid revision number %(revno)s"
129
240
def __init__(self, revno):
130
BzrNewError.__init__(self)
241
BzrError.__init__(self)
131
242
self.revno = revno
134
class InvalidRevisionId(BzrNewError):
135
"""Invalid revision-id {%(revision_id)s} in %(branch)s"""
245
class InvalidRevisionId(BzrError):
247
_fmt = "Invalid revision-id {%(revision_id)s} in %(branch)s"
136
249
def __init__(self, revision_id, branch):
137
250
# branch can be any string or object with __str__ defined
138
BzrNewError.__init__(self)
251
BzrError.__init__(self)
139
252
self.revision_id = revision_id
140
253
self.branch = branch
143
class NoWorkingTree(BzrNewError):
144
"""No WorkingTree exists for %(base)s."""
256
class ReservedId(BzrError):
258
_fmt = "Reserved revision-id {%(revision_id)s}"
260
def __init__(self, revision_id):
261
self.revision_id = revision_id
264
class RootMissing(InternalBzrError):
266
_fmt = ("The root entry of a tree must be the first entry supplied to "
267
"record_entry_contents.")
270
class NoHelpTopic(BzrError):
272
_fmt = ("No help could be found for '%(topic)s'. "
273
"Please use 'bzr help topics' to obtain a list of topics.")
275
def __init__(self, topic):
279
class NoSuchId(BzrError):
281
_fmt = 'The file id "%(file_id)s" is not present in the tree %(tree)s.'
283
def __init__(self, tree, file_id):
284
BzrError.__init__(self)
285
self.file_id = file_id
289
class NoSuchIdInRepository(NoSuchId):
291
_fmt = ('The file id "%(file_id)s" is not present in the repository'
294
def __init__(self, repository, file_id):
295
BzrError.__init__(self, repository=repository, file_id=file_id)
298
class InventoryModified(InternalBzrError):
300
_fmt = ("The current inventory for the tree %(tree)r has been modified,"
301
" so a clean inventory cannot be read without data loss.")
303
def __init__(self, tree):
307
class NoWorkingTree(BzrError):
309
_fmt = 'No WorkingTree exists for "%(base)s".'
146
311
def __init__(self, base):
147
BzrNewError.__init__(self)
312
BzrError.__init__(self)
151
class NotLocalUrl(BzrNewError):
152
"""%(url)s is not a local path."""
316
class NotBuilding(BzrError):
318
_fmt = "Not currently building a tree."
321
class NotLocalUrl(BzrError):
323
_fmt = "%(url)s is not a local path."
154
325
def __init__(self, url):
155
BzrNewError.__init__(self)
329
class WorkingTreeAlreadyPopulated(InternalBzrError):
331
_fmt = 'Working tree already populated in "%(base)s"'
333
def __init__(self, base):
159
337
class BzrCommandError(BzrError):
160
# Error from malformed user command
161
# This is being misused as a generic exception
162
# pleae subclass. RBC 20051030
338
"""Error from user command"""
340
# Error from malformed user command; please avoid raising this as a
341
# generic exception not caused by user input.
164
343
# I think it's a waste of effort to differentiate between errors that
165
344
# are not intended to be caught anyway. UI code need not subclass
166
345
# BzrCommandError, and non-UI code should not throw a subclass of
167
346
# BzrCommandError. ADHB 20051211
347
def __init__(self, msg):
348
# Object.__str__() must return a real string
349
# returning a Unicode string is a python error.
350
if isinstance(msg, unicode):
351
self.msg = msg.encode('utf8')
168
355
def __str__(self):
359
class NotWriteLocked(BzrError):
361
_fmt = """%(not_locked)r is not write locked but needs to be."""
363
def __init__(self, not_locked):
364
self.not_locked = not_locked
172
367
class BzrOptionError(BzrCommandError):
173
"""Some missing or otherwise incorrect option was supplied."""
369
_fmt = "Error in command line options"
372
class BadIndexFormatSignature(BzrError):
374
_fmt = "%(value)s is not an index of type %(_type)s."
376
def __init__(self, value, _type):
377
BzrError.__init__(self)
382
class BadIndexData(BzrError):
384
_fmt = "Error in data for index %(value)s."
386
def __init__(self, value):
387
BzrError.__init__(self)
391
class BadIndexDuplicateKey(BzrError):
393
_fmt = "The key '%(key)s' is already in index '%(index)s'."
395
def __init__(self, key, index):
396
BzrError.__init__(self)
401
class BadIndexKey(BzrError):
403
_fmt = "The key '%(key)s' is not a valid key."
405
def __init__(self, key):
406
BzrError.__init__(self)
410
class BadIndexOptions(BzrError):
412
_fmt = "Could not parse options for index %(value)s."
414
def __init__(self, value):
415
BzrError.__init__(self)
419
class BadIndexValue(BzrError):
421
_fmt = "The value '%(value)s' is not a valid value."
423
def __init__(self, value):
424
BzrError.__init__(self)
428
class BadOptionValue(BzrError):
430
_fmt = """Bad value "%(value)s" for option "%(name)s"."""
432
def __init__(self, name, value):
433
BzrError.__init__(self, name=name, value=value)
176
class StrictCommitFailed(Exception):
177
"""Commit refused because there are unknowns in the tree."""
436
class StrictCommitFailed(BzrError):
438
_fmt = "Commit refused because there are unknown files in the tree"
180
441
# XXX: Should be unified with TransportError; they seem to represent the
182
class PathError(BzrNewError):
183
"""Generic path error: %(path)r%(extra)s)"""
443
# RBC 20060929: I think that unifiying with TransportError would be a mistake
444
# - this is finer than a TransportError - and more useful as such. It
445
# differentiates between 'transport has failed' and 'operation on a transport
447
class PathError(BzrError):
449
_fmt = "Generic path error: %(path)r%(extra)s)"
185
451
def __init__(self, path, extra=None):
186
BzrNewError.__init__(self)
452
BzrError.__init__(self)
189
455
self.extra = ': ' + str(extra)
589
class InvalidNormalization(PathError):
591
_fmt = 'Path "%(path)s" is not unicode normalized'
594
# TODO: This is given a URL; we try to unescape it but doing that from inside
595
# the exception object is a bit undesirable.
596
# TODO: Probably this behavior of should be a common superclass
226
597
class NotBranchError(PathError):
227
"""Not a branch: %(path)s"""
599
_fmt = 'Not a branch: "%(path)s".'
601
def __init__(self, path):
602
import bzrlib.urlutils as urlutils
603
self.path = urlutils.unescape_for_display(path, 'ascii')
606
class NoSubmitBranch(PathError):
608
_fmt = 'No submit branch available for branch "%(path)s"'
610
def __init__(self, branch):
611
import bzrlib.urlutils as urlutils
612
self.path = urlutils.unescape_for_display(branch.base, 'ascii')
230
615
class AlreadyBranchError(PathError):
231
"""Already a branch: %(path)s."""
617
_fmt = 'Already a branch: "%(path)s".'
234
620
class BranchExistsWithoutWorkingTree(PathError):
235
"""Directory contains a branch, but no working tree \
236
(use bzr checkout if you wish to build a working tree): %(path)s"""
239
class NoRepositoryPresent(BzrNewError):
240
"""No repository present: %(path)r"""
622
_fmt = 'Directory contains a branch, but no working tree \
623
(use bzr checkout if you wish to build a working tree): "%(path)s"'
626
class AtomicFileAlreadyClosed(PathError):
628
_fmt = ('"%(function)s" called on an AtomicFile after it was closed:'
631
def __init__(self, path, function):
632
PathError.__init__(self, path=path, extra=None)
633
self.function = function
636
class InaccessibleParent(PathError):
638
_fmt = ('Parent not accessible given base "%(base)s" and'
639
' relative path "%(path)s"')
641
def __init__(self, path, base):
642
PathError.__init__(self, path)
646
class NoRepositoryPresent(BzrError):
648
_fmt = 'No repository present: "%(path)s"'
241
649
def __init__(self, bzrdir):
242
BzrNewError.__init__(self)
650
BzrError.__init__(self)
243
651
self.path = bzrdir.transport.clone('..').base
246
class FileInWrongBranch(BzrNewError):
247
"""File %(path)s in not in branch %(branch_base)s."""
654
class FileInWrongBranch(BzrError):
656
_fmt = 'File "%(path)s" is not in branch %(branch_base)s.'
249
658
def __init__(self, branch, path):
250
BzrNewError.__init__(self)
659
BzrError.__init__(self)
251
660
self.branch = branch
252
661
self.branch_base = branch.base
256
665
class UnsupportedFormatError(BzrError):
257
"""Specified path is a bzr branch that we recognize but cannot read."""
259
return 'unsupported branch format: %s' % self.args[0]
667
_fmt = "Unsupported branch format: %(format)s\nPlease run 'bzr upgrade'"
262
670
class UnknownFormatError(BzrError):
263
"""Specified path is a bzr branch whose format we do not recognize."""
265
return 'unknown branch format: %s' % self.args[0]
268
class IncompatibleFormat(BzrNewError):
269
"""Format %(format)s is not compatible with .bzr version %(bzrdir)s."""
672
_fmt = "Unknown branch format: %(format)r"
675
class IncompatibleFormat(BzrError):
677
_fmt = "Format %(format)s is not compatible with .bzr version %(bzrdir)s."
271
679
def __init__(self, format, bzrdir_format):
272
BzrNewError.__init__(self)
680
BzrError.__init__(self)
273
681
self.format = format
274
682
self.bzrdir = bzrdir_format
277
class NotVersionedError(BzrNewError):
278
"""%(path)s is not versioned"""
279
def __init__(self, path):
280
BzrNewError.__init__(self)
284
class PathsNotVersionedError(BzrNewError):
285
# used when reporting several paths are not versioned
286
"""Path(s) are not versioned: %(paths_as_string)s"""
685
class IncompatibleRepositories(BzrError):
687
_fmt = "Repository %(target)s is not compatible with repository"\
690
def __init__(self, source, target):
691
BzrError.__init__(self, target=target, source=source)
694
class IncompatibleRevision(BzrError):
696
_fmt = "Revision is not compatible with %(repo_format)s"
698
def __init__(self, repo_format):
699
BzrError.__init__(self)
700
self.repo_format = repo_format
703
class AlreadyVersionedError(BzrError):
704
"""Used when a path is expected not to be versioned, but it is."""
706
_fmt = "%(context_info)s%(path)s is already versioned."
708
def __init__(self, path, context_info=None):
709
"""Construct a new AlreadyVersionedError.
711
:param path: This is the path which is versioned,
712
which should be in a user friendly form.
713
:param context_info: If given, this is information about the context,
714
which could explain why this is expected to not be versioned.
716
BzrError.__init__(self)
718
if context_info is None:
719
self.context_info = ''
721
self.context_info = context_info + ". "
724
class NotVersionedError(BzrError):
725
"""Used when a path is expected to be versioned, but it is not."""
727
_fmt = "%(context_info)s%(path)s is not versioned."
729
def __init__(self, path, context_info=None):
730
"""Construct a new NotVersionedError.
732
:param path: This is the path which is not versioned,
733
which should be in a user friendly form.
734
:param context_info: If given, this is information about the context,
735
which could explain why this is expected to be versioned.
737
BzrError.__init__(self)
739
if context_info is None:
740
self.context_info = ''
742
self.context_info = context_info + ". "
745
class PathsNotVersionedError(BzrError):
746
"""Used when reporting several paths which are not versioned"""
748
_fmt = "Path(s) are not versioned: %(paths_as_string)s"
288
750
def __init__(self, paths):
289
751
from bzrlib.osutils import quotefn
290
BzrNewError.__init__(self)
752
BzrError.__init__(self)
291
753
self.paths = paths
292
754
self.paths_as_string = ' '.join([quotefn(p) for p in paths])
295
class PathsDoNotExist(BzrNewError):
296
"""Path(s) do not exist: %(paths_as_string)s"""
757
class PathsDoNotExist(BzrError):
759
_fmt = "Path(s) do not exist: %(paths_as_string)s%(extra)s"
298
761
# used when reporting that paths are neither versioned nor in the working
301
def __init__(self, paths):
764
def __init__(self, paths, extra=None):
302
765
# circular import
303
766
from bzrlib.osutils import quotefn
304
BzrNewError.__init__(self)
767
BzrError.__init__(self)
305
768
self.paths = paths
306
769
self.paths_as_string = ' '.join([quotefn(p) for p in paths])
771
self.extra = ': ' + str(extra)
309
776
class BadFileKindError(BzrError):
310
"""Specified file is of a kind that cannot be added.
312
(For example a symlink or device file.)"""
315
class ForbiddenFileError(BzrError):
316
"""Cannot operate on a file because it is a control file."""
319
class LockError(BzrNewError):
320
"""Lock error: %(message)s"""
778
_fmt = 'Cannot operate on "%(filename)s" of unsupported kind "%(kind)s"'
780
def __init__(self, filename, kind):
781
BzrError.__init__(self, filename=filename, kind=kind)
784
class ForbiddenControlFileError(BzrError):
786
_fmt = 'Cannot operate on "%(filename)s" because it is a control file'
789
class LockError(InternalBzrError):
791
_fmt = "Lock error: %(msg)s"
321
793
# All exceptions from the lock/unlock functions should be from
322
794
# this exception class. They will be translated as necessary. The
323
795
# original exception is available as e.original_error
325
797
# New code should prefer to raise specific subclasses
326
798
def __init__(self, message):
327
self.message = message
799
# Python 2.5 uses a slot for StandardError.message,
800
# so use a different variable name. We now work around this in
801
# BzrError.__str__, but this member name is kept for compatability.
805
class LockActive(LockError):
807
_fmt = "The lock for '%(lock_description)s' is in use and cannot be broken."
809
internal_error = False
811
def __init__(self, lock_description):
812
self.lock_description = lock_description
330
815
class CommitNotPossible(LockError):
331
"""A commit was attempted but we do not have a write lock open."""
817
_fmt = "A commit was attempted but we do not have a write lock open."
332
819
def __init__(self):
336
823
class AlreadyCommitted(LockError):
337
"""A rollback was requested, but is not able to be accomplished."""
825
_fmt = "A rollback was requested, but is not able to be accomplished."
338
827
def __init__(self):
342
831
class ReadOnlyError(LockError):
343
"""A write attempt was made in a read only transaction on %(obj)s"""
833
_fmt = "A write attempt was made in a read only transaction on %(obj)s"
835
# TODO: There should also be an error indicating that you need a write
836
# lock and don't have any lock at all... mbp 20070226
344
838
def __init__(self, obj):
348
class OutSideTransaction(BzrNewError):
349
"""A transaction related operation was attempted after the transaction finished."""
842
class ReadOnlyLockError(LockError):
844
_fmt = "Cannot acquire write lock on %(fname)s. %(msg)s"
846
@symbol_versioning.deprecated_method(symbol_versioning.zero_ninetytwo)
847
def __init__(self, fname, msg):
848
LockError.__init__(self, '')
853
class LockFailed(LockError):
855
internal_error = False
857
_fmt = "Cannot lock %(lock)s: %(why)s"
859
def __init__(self, lock, why):
860
LockError.__init__(self, '')
865
class OutSideTransaction(BzrError):
867
_fmt = ("A transaction related operation was attempted after"
868
" the transaction finished.")
352
871
class ObjectNotLocked(LockError):
353
"""%(obj)r is not locked"""
873
_fmt = "%(obj)r is not locked"
354
875
# this can indicate that any particular object is not locked; see also
355
876
# LockNotHeld which means that a particular *lock* object is not held by
356
877
# the caller -- perhaps they should be unified.
394
936
class LockNotHeld(LockError):
395
"""Lock not held: %(lock)s"""
938
_fmt = "Lock not held: %(lock)s"
940
internal_error = False
396
942
def __init__(self, lock):
400
class PointlessCommit(BzrNewError):
401
"""No changes to commit"""
404
class UpgradeReadonly(BzrNewError):
405
"""Upgrade URL cannot work with readonly URL's."""
408
class UpToDateFormat(BzrNewError):
409
"""The branch format %(format)s is already at the most recent format."""
946
class TokenLockingNotSupported(LockError):
948
_fmt = "The object %(obj)s does not support token specifying a token when locking."
950
def __init__(self, obj):
954
class TokenMismatch(LockBroken):
956
_fmt = "The lock token %(given_token)r does not match lock token %(lock_token)r."
958
internal_error = True
960
def __init__(self, given_token, lock_token):
961
self.given_token = given_token
962
self.lock_token = lock_token
965
class PointlessCommit(BzrError):
967
_fmt = "No changes to commit"
970
class CannotCommitSelectedFileMerge(BzrError):
972
_fmt = 'Selected-file commit of merges is not supported yet:'\
973
' files %(files_str)s'
975
def __init__(self, files):
976
files_str = ', '.join(files)
977
BzrError.__init__(self, files=files, files_str=files_str)
980
class BadCommitMessageEncoding(BzrError):
982
_fmt = 'The specified commit message contains characters unsupported by '\
983
'the current encoding.'
986
class UpgradeReadonly(BzrError):
988
_fmt = "Upgrade URL cannot work with readonly URLs."
991
class UpToDateFormat(BzrError):
993
_fmt = "The branch format %(format)s is already at the most recent format."
411
995
def __init__(self, format):
412
BzrNewError.__init__(self)
996
BzrError.__init__(self)
413
997
self.format = format
417
1000
class StrictCommitFailed(Exception):
418
"""Commit refused because there are unknowns in the tree."""
421
class NoSuchRevision(BzrError):
1002
_fmt = "Commit refused because there are unknowns in the tree."
1005
class NoSuchRevision(InternalBzrError):
1007
_fmt = "%(branch)s has no revision %(revision)s"
422
1009
def __init__(self, branch, revision):
424
self.revision = revision
425
msg = "Branch %s has no revision %s" % (branch, revision)
426
BzrError.__init__(self, msg)
1010
# 'branch' may sometimes be an internal object like a KnitRevisionStore
1011
BzrError.__init__(self, branch=branch, revision=revision)
1014
# zero_ninetyone: this exception is no longer raised and should be removed
1015
class NotLeftParentDescendant(InternalBzrError):
1017
_fmt = ("Revision %(old_revision)s is not the left parent of"
1018
" %(new_revision)s, but branch %(branch_location)s expects this")
1020
def __init__(self, branch, old_revision, new_revision):
1021
BzrError.__init__(self, branch_location=branch.base,
1022
old_revision=old_revision,
1023
new_revision=new_revision)
1026
class RangeInChangeOption(BzrError):
1028
_fmt = "Option --change does not accept revision ranges"
1031
class NoSuchRevisionSpec(BzrError):
1033
_fmt = "No namespace registered for string: %(spec)r"
1035
def __init__(self, spec):
1036
BzrError.__init__(self, spec=spec)
1039
class NoSuchRevisionInTree(NoSuchRevision):
1040
"""When using Tree.revision_tree, and the revision is not accessible."""
1042
_fmt = "The revision id {%(revision_id)s} is not present in the tree %(tree)s."
1044
def __init__(self, tree, revision_id):
1045
BzrError.__init__(self)
1047
self.revision_id = revision_id
1050
class InvalidRevisionSpec(BzrError):
1052
_fmt = ("Requested revision: %(spec)r does not exist in branch:"
1053
" %(branch)s%(extra)s")
1055
def __init__(self, spec, branch, extra=None):
1056
BzrError.__init__(self, branch=branch, spec=spec)
1058
self.extra = '\n' + str(extra)
429
1063
class HistoryMissing(BzrError):
430
def __init__(self, branch, object_type, object_id):
432
BzrError.__init__(self,
433
'%s is missing %s {%s}'
434
% (branch, object_type, object_id))
1065
_fmt = "%(branch)s is missing %(object_type)s {%(object_id)s}"
1068
class AppendRevisionsOnlyViolation(BzrError):
1070
_fmt = ('Operation denied because it would change the main history,'
1071
' which is not permitted by the append_revisions_only setting on'
1072
' branch "%(location)s".')
1074
def __init__(self, location):
1075
import bzrlib.urlutils as urlutils
1076
location = urlutils.unescape_for_display(location, 'ascii')
1077
BzrError.__init__(self, location=location)
437
1080
class DivergedBranches(BzrError):
1082
_fmt = ("These branches have diverged."
1083
" Use the merge command to reconcile them.")
439
1085
def __init__(self, branch1, branch2):
440
BzrError.__init__(self, "These branches have diverged. Try merge.")
441
1086
self.branch1 = branch1
442
1087
self.branch2 = branch2
445
class UnrelatedBranches(BzrCommandError):
447
msg = "Branches have no common ancestor, and no base revision"\
449
BzrCommandError.__init__(self, msg)
1090
class NotLefthandHistory(InternalBzrError):
1092
_fmt = "Supplied history does not follow left-hand parents"
1094
def __init__(self, history):
1095
BzrError.__init__(self, history=history)
1098
class UnrelatedBranches(BzrError):
1100
_fmt = ("Branches have no common ancestor, and"
1101
" no merge base revision was specified.")
1104
class CannotReverseCherrypick(BzrError):
1106
_fmt = ('Selected merge cannot perform reverse cherrypicks. Try merge3'
452
1110
class NoCommonAncestor(BzrError):
1112
_fmt = "Revisions have no common ancestor: %(revision_a)s %(revision_b)s"
453
1114
def __init__(self, revision_a, revision_b):
454
msg = "Revisions have no common ancestor: %s %s." \
455
% (revision_a, revision_b)
456
BzrError.__init__(self, msg)
1115
self.revision_a = revision_a
1116
self.revision_b = revision_b
459
1119
class NoCommonRoot(BzrError):
1121
_fmt = ("Revisions are not derived from the same root: "
1122
"%(revision_a)s %(revision_b)s.")
460
1124
def __init__(self, revision_a, revision_b):
461
msg = "Revisions are not derived from the same root: %s %s." \
462
% (revision_a, revision_b)
463
BzrError.__init__(self, msg)
1125
BzrError.__init__(self, revision_a=revision_a, revision_b=revision_b)
467
1128
class NotAncestor(BzrError):
1130
_fmt = "Revision %(rev_id)s is not an ancestor of %(not_ancestor_id)s"
468
1132
def __init__(self, rev_id, not_ancestor_id):
469
msg = "Revision %s is not an ancestor of %s" % (not_ancestor_id,
471
BzrError.__init__(self, msg)
473
self.not_ancestor_id = not_ancestor_id
1133
BzrError.__init__(self, rev_id=rev_id,
1134
not_ancestor_id=not_ancestor_id)
476
1137
class InstallFailed(BzrError):
477
1139
def __init__(self, revisions):
478
msg = "Could not install revisions:\n%s" % " ,".join(revisions)
1140
revision_str = ", ".join(str(r) for r in revisions)
1141
msg = "Could not install revisions:\n%s" % revision_str
479
1142
BzrError.__init__(self, msg)
480
1143
self.revisions = revisions
483
1146
class AmbiguousBase(BzrError):
484
1148
def __init__(self, bases):
485
1149
warn("BzrError AmbiguousBase has been deprecated as of bzrlib 0.8.",
486
1150
DeprecationWarning)
487
msg = "The correct base is unclear, becase %s are all equally close" %\
1151
msg = ("The correct base is unclear, because %s are all equally close"
489
1153
BzrError.__init__(self, msg)
490
1154
self.bases = bases
493
1157
class NoCommits(BzrError):
1159
_fmt = "Branch %(branch)s has no commits."
494
1161
def __init__(self, branch):
495
msg = "Branch %s has no commits." % branch
496
BzrError.__init__(self, msg)
1162
BzrError.__init__(self, branch=branch)
499
1165
class UnlistableStore(BzrError):
500
1167
def __init__(self, store):
501
1168
BzrError.__init__(self, "Store %s is not listable" % store)
505
1172
class UnlistableBranch(BzrError):
506
1174
def __init__(self, br):
507
1175
BzrError.__init__(self, "Stores for branch %s are not listable" % br)
510
class BoundBranchOutOfDate(BzrNewError):
511
"""Bound branch %(branch)s is out of date with master branch %(master)s."""
1178
class BoundBranchOutOfDate(BzrError):
1180
_fmt = ("Bound branch %(branch)s is out of date with master branch"
512
1183
def __init__(self, branch, master):
513
BzrNewError.__init__(self)
1184
BzrError.__init__(self)
514
1185
self.branch = branch
515
1186
self.master = master
518
class CommitToDoubleBoundBranch(BzrNewError):
519
"""Cannot commit to branch %(branch)s. It is bound to %(master)s, which is bound to %(remote)s."""
1189
class CommitToDoubleBoundBranch(BzrError):
1191
_fmt = ("Cannot commit to branch %(branch)s."
1192
" It is bound to %(master)s, which is bound to %(remote)s.")
520
1194
def __init__(self, branch, master, remote):
521
BzrNewError.__init__(self)
1195
BzrError.__init__(self)
522
1196
self.branch = branch
523
1197
self.master = master
524
1198
self.remote = remote
527
class OverwriteBoundBranch(BzrNewError):
528
"""Cannot pull --overwrite to a branch which is bound %(branch)s"""
1201
class OverwriteBoundBranch(BzrError):
1203
_fmt = "Cannot pull --overwrite to a branch which is bound %(branch)s"
529
1205
def __init__(self, branch):
530
BzrNewError.__init__(self)
1206
BzrError.__init__(self)
531
1207
self.branch = branch
534
class BoundBranchConnectionFailure(BzrNewError):
535
"""Unable to connect to target of bound branch %(branch)s => %(target)s: %(error)s"""
1210
class BoundBranchConnectionFailure(BzrError):
1212
_fmt = ("Unable to connect to target of bound branch %(branch)s"
1213
" => %(target)s: %(error)s")
536
1215
def __init__(self, branch, target, error):
537
BzrNewError.__init__(self)
1216
BzrError.__init__(self)
538
1217
self.branch = branch
539
1218
self.target = target
540
1219
self.error = error
543
class WeaveError(BzrNewError):
544
"""Error in processing weave: %(message)s"""
1222
class WeaveError(BzrError):
1224
_fmt = "Error in processing weave: %(message)s"
546
1226
def __init__(self, message=None):
547
BzrNewError.__init__(self)
1227
BzrError.__init__(self)
548
1228
self.message = message
551
1231
class WeaveRevisionAlreadyPresent(WeaveError):
552
"""Revision {%(revision_id)s} already present in %(weave)s"""
1233
_fmt = "Revision {%(revision_id)s} already present in %(weave)s"
553
1235
def __init__(self, revision_id, weave):
555
1237
WeaveError.__init__(self)
648
class NoSuchExportFormat(BzrNewError):
649
"""Export format %(format)r not supported"""
1340
class KnitDataStreamIncompatible(KnitError):
1341
# Not raised anymore, as we can convert data streams. In future we may
1342
# need it again for more exotic cases, so we're keeping it around for now.
1344
_fmt = "Cannot insert knit data stream of format \"%(stream_format)s\" into knit of format \"%(target_format)s\"."
1346
def __init__(self, stream_format, target_format):
1347
self.stream_format = stream_format
1348
self.target_format = target_format
1351
class KnitDataStreamUnknown(KnitError):
1352
# Indicates a data stream we don't know how to handle.
1354
_fmt = "Cannot parse knit data stream of format \"%(stream_format)s\"."
1356
def __init__(self, stream_format):
1357
self.stream_format = stream_format
1360
class KnitHeaderError(KnitError):
1362
_fmt = 'Knit header error: %(badline)r unexpected for file "%(filename)s".'
1364
def __init__(self, badline, filename):
1365
KnitError.__init__(self)
1366
self.badline = badline
1367
self.filename = filename
1369
class KnitIndexUnknownMethod(KnitError):
1370
"""Raised when we don't understand the storage method.
1372
Currently only 'fulltext' and 'line-delta' are supported.
1375
_fmt = ("Knit index %(filename)s does not have a known method"
1376
" in options: %(options)r")
1378
def __init__(self, filename, options):
1379
KnitError.__init__(self)
1380
self.filename = filename
1381
self.options = options
1384
class NoSuchExportFormat(BzrError):
1386
_fmt = "Export format %(format)r not supported"
650
1388
def __init__(self, format):
651
BzrNewError.__init__(self)
1389
BzrError.__init__(self)
652
1390
self.format = format
655
1393
class TransportError(BzrError):
656
"""All errors thrown by Transport implementations should derive
1395
_fmt = "Transport error: %(msg)s %(orig_error)s"
659
1397
def __init__(self, msg=None, orig_error=None):
660
1398
if msg is None and orig_error is not None:
661
1399
msg = str(orig_error)
662
BzrError.__init__(self, msg)
1400
if orig_error is None:
664
1405
self.orig_error = orig_error
1406
BzrError.__init__(self)
1409
class TooManyConcurrentRequests(InternalBzrError):
1411
_fmt = ("The medium '%(medium)s' has reached its concurrent request limit."
1412
" Be sure to finish_writing and finish_reading on the"
1413
" currently open request.")
1415
def __init__(self, medium):
1416
self.medium = medium
1419
class SmartProtocolError(TransportError):
1421
_fmt = "Generic bzr smart protocol error: %(details)s"
1423
def __init__(self, details):
1424
self.details = details
667
1427
# A set of semi-meaningful errors which can be thrown
668
1428
class TransportNotPossible(TransportError):
669
"""This is for transports where a specific function is explicitly not
670
possible. Such as pushing files to an HTTP server.
1430
_fmt = "Transport operation not possible: %(msg)s %(orig_error)s"
675
1433
class ConnectionError(TransportError):
676
"""A connection problem prevents file retrieval.
677
This does not indicate whether the file exists or not; it indicates that a
678
precondition for requesting the file was not met.
680
def __init__(self, msg=None, orig_error=None):
681
TransportError.__init__(self, msg=msg, orig_error=orig_error)
1435
_fmt = "Connection error: %(msg)s %(orig_error)s"
1438
class SocketConnectionError(ConnectionError):
1440
_fmt = "%(msg)s %(host)s%(port)s%(orig_error)s"
1442
def __init__(self, host, port=None, msg=None, orig_error=None):
1444
msg = 'Failed to connect to'
1445
if orig_error is None:
1448
orig_error = '; ' + str(orig_error)
1449
ConnectionError.__init__(self, msg=msg, orig_error=orig_error)
1454
self.port = ':%s' % port
684
1457
class ConnectionReset(TransportError):
685
"""The connection has been closed."""
1459
_fmt = "Connection closed: %(msg)s %(orig_error)s"
1462
class InvalidRange(TransportError):
1464
_fmt = "Invalid range access in %(path)s at %(offset)s: %(msg)s"
1466
def __init__(self, path, offset, msg=None):
1467
TransportError.__init__(self, msg)
1469
self.offset = offset
1472
class InvalidHttpResponse(TransportError):
1474
_fmt = "Invalid http response for %(path)s: %(msg)s"
1476
def __init__(self, path, msg, orig_error=None):
1478
TransportError.__init__(self, msg, orig_error=orig_error)
1481
class InvalidHttpRange(InvalidHttpResponse):
1483
_fmt = "Invalid http range %(range)r for %(path)s: %(msg)s"
1485
def __init__(self, path, range, msg):
1487
InvalidHttpResponse.__init__(self, path, msg)
1490
class InvalidHttpContentType(InvalidHttpResponse):
1492
_fmt = 'Invalid http Content-type "%(ctype)s" for %(path)s: %(msg)s'
1494
def __init__(self, path, ctype, msg):
1496
InvalidHttpResponse.__init__(self, path, msg)
1499
class RedirectRequested(TransportError):
1501
_fmt = '%(source)s is%(permanently)s redirected to %(target)s'
1503
def __init__(self, source, target, is_permanent=False, qual_proto=None):
1504
self.source = source
1505
self.target = target
1507
self.permanently = ' permanently'
1509
self.permanently = ''
1510
self._qualified_proto = qual_proto
1511
TransportError.__init__(self)
1513
def _requalify_url(self, url):
1514
"""Restore the qualified proto in front of the url"""
1515
# When this exception is raised, source and target are in
1516
# user readable format. But some transports may use a
1517
# different proto (http+urllib:// will present http:// to
1518
# the user. If a qualified proto is specified, the code
1519
# trapping the exception can get the qualified urls to
1520
# properly handle the redirection themself (creating a
1521
# new transport object from the target url for example).
1522
# But checking that the scheme of the original and
1523
# redirected urls are the same can be tricky. (see the
1524
# FIXME in BzrDir.open_from_transport for the unique use
1526
if self._qualified_proto is None:
1529
# The TODO related to NotBranchError mention that doing
1530
# that kind of manipulation on the urls may not be the
1531
# exception object job. On the other hand, this object is
1532
# the interface between the code and the user so
1533
# presenting the urls in different ways is indeed its
1536
proto, netloc, path, query, fragment = urlparse.urlsplit(url)
1537
return urlparse.urlunsplit((self._qualified_proto, netloc, path,
1540
def get_source_url(self):
1541
return self._requalify_url(self.source)
1543
def get_target_url(self):
1544
return self._requalify_url(self.target)
1547
class TooManyRedirections(TransportError):
1549
_fmt = "Too many redirections"
689
1552
class ConflictsInTree(BzrError):
691
BzrError.__init__(self, "Working tree has conflicts.")
1554
_fmt = "Working tree has conflicts."
694
1557
class ParseConfigError(BzrError):
695
1559
def __init__(self, errors, filename):
696
1560
if filename is None:
700
1564
BzrError.__init__(self, message)
1567
class NoEmailInUsername(BzrError):
1569
_fmt = "%(username)r does not seem to contain a reasonable email address"
1571
def __init__(self, username):
1572
BzrError.__init__(self)
1573
self.username = username
703
1576
class SigningFailed(BzrError):
1578
_fmt = 'Failed to gpg sign data with command "%(command_line)s"'
704
1580
def __init__(self, command_line):
705
BzrError.__init__(self, "Failed to gpg sign data with command '%s'"
1581
BzrError.__init__(self, command_line=command_line)
709
1584
class WorkingTreeNotRevision(BzrError):
1586
_fmt = ("The working tree for %(basedir)s has changed since"
1587
" the last commit, but weave merge requires that it be"
710
1590
def __init__(self, tree):
711
BzrError.__init__(self, "The working tree for %s has changed since"
712
" last commit, but weave merge requires that it be"
713
" unchanged." % tree.basedir)
716
class CantReprocessAndShowBase(BzrNewError):
717
"""Can't reprocess and show base.
718
Reprocessing obscures relationship of conflicting lines to base."""
721
class GraphCycleError(BzrNewError):
722
"""Cycle in graph %(graph)r"""
1591
BzrError.__init__(self, basedir=tree.basedir)
1594
class CantReprocessAndShowBase(BzrError):
1596
_fmt = ("Can't reprocess and show base, because reprocessing obscures "
1597
"the relationship of conflicting lines to the base")
1600
class GraphCycleError(BzrError):
1602
_fmt = "Cycle in graph %(graph)r"
723
1604
def __init__(self, graph):
724
BzrNewError.__init__(self)
1605
BzrError.__init__(self)
725
1606
self.graph = graph
728
class NotConflicted(BzrNewError):
729
"""File %(filename)s is not conflicted."""
1609
class WritingCompleted(InternalBzrError):
1611
_fmt = ("The MediumRequest '%(request)s' has already had finish_writing "
1612
"called upon it - accept bytes may not be called anymore.")
1614
def __init__(self, request):
1615
self.request = request
1618
class WritingNotComplete(InternalBzrError):
1620
_fmt = ("The MediumRequest '%(request)s' has not has finish_writing "
1621
"called upon it - until the write phase is complete no "
1622
"data may be read.")
1624
def __init__(self, request):
1625
self.request = request
1628
class NotConflicted(BzrError):
1630
_fmt = "File %(filename)s is not conflicted."
731
1632
def __init__(self, filename):
732
BzrNewError.__init__(self)
1633
BzrError.__init__(self)
733
1634
self.filename = filename
1637
class MediumNotConnected(InternalBzrError):
1639
_fmt = """The medium '%(medium)s' is not connected."""
1641
def __init__(self, medium):
1642
self.medium = medium
736
1645
class MustUseDecorated(Exception):
737
"""A decorating function has requested its original command be used.
739
This should never escape bzr, so does not need to be printable.
743
class MissingText(BzrNewError):
744
"""Branch %(base)s is missing revision %(text_revision)s of %(file_id)s"""
1647
_fmt = "A decorating function has requested its original command be used."
1650
class NoBundleFound(BzrError):
1652
_fmt = 'No bundle was found in "%(filename)s".'
1654
def __init__(self, filename):
1655
BzrError.__init__(self)
1656
self.filename = filename
1659
class BundleNotSupported(BzrError):
1661
_fmt = "Unable to handle bundle version %(version)s: %(msg)s"
1663
def __init__(self, version, msg):
1664
BzrError.__init__(self)
1665
self.version = version
1669
class MissingText(BzrError):
1671
_fmt = ("Branch %(base)s is missing revision"
1672
" %(text_revision)s of %(file_id)s")
746
1674
def __init__(self, branch, text_revision, file_id):
747
BzrNewError.__init__(self)
1675
BzrError.__init__(self)
748
1676
self.branch = branch
749
1677
self.base = branch.base
750
1678
self.text_revision = text_revision
751
1679
self.file_id = file_id
754
class DuplicateKey(BzrNewError):
755
"""Key %(key)s is already present in map"""
758
class MalformedTransform(BzrNewError):
759
"""Tree transform is malformed %(conflicts)r"""
762
class BzrBadParameter(BzrNewError):
763
"""A bad parameter : %(param)s is not usable.
765
This exception should never be thrown, but it is a base class for all
766
parameter-to-function errors.
1682
class DuplicateFileId(BzrError):
1684
_fmt = "File id {%(file_id)s} already exists in inventory as %(entry)s"
1686
def __init__(self, file_id, entry):
1687
BzrError.__init__(self)
1688
self.file_id = file_id
1692
class DuplicateKey(BzrError):
1694
_fmt = "Key %(key)s is already present in map"
1697
class DuplicateHelpPrefix(BzrError):
1699
_fmt = "The prefix %(prefix)s is in the help search path twice."
1701
def __init__(self, prefix):
1702
self.prefix = prefix
1705
class MalformedTransform(BzrError):
1707
_fmt = "Tree transform is malformed %(conflicts)r"
1710
class NoFinalPath(BzrError):
1712
_fmt = ("No final name for trans_id %(trans_id)r\n"
1713
"file-id: %(file_id)r\n"
1714
"root trans-id: %(root_trans_id)r\n")
1716
def __init__(self, trans_id, transform):
1717
self.trans_id = trans_id
1718
self.file_id = transform.final_file_id(trans_id)
1719
self.root_trans_id = transform.root
1722
class BzrBadParameter(InternalBzrError):
1724
_fmt = "Bad parameter: %(param)r"
1726
# This exception should never be thrown, but it is a base class for all
1727
# parameter-to-function errors.
768
1729
def __init__(self, param):
769
BzrNewError.__init__(self)
1730
BzrError.__init__(self)
770
1731
self.param = param
773
1734
class BzrBadParameterNotUnicode(BzrBadParameter):
774
"""Parameter %(param)s is neither unicode nor utf8."""
777
class ReusingTransform(BzrNewError):
778
"""Attempt to reuse a transform that has already been applied."""
781
class CantMoveRoot(BzrNewError):
782
"""Moving the root directory is not supported at this time"""
1736
_fmt = "Parameter %(param)s is neither unicode nor utf8."
1739
class ReusingTransform(BzrError):
1741
_fmt = "Attempt to reuse a transform that has already been applied."
1744
class CantMoveRoot(BzrError):
1746
_fmt = "Moving the root directory is not supported at this time"
1749
class BzrMoveFailedError(BzrError):
1751
_fmt = "Could not move %(from_path)s%(operator)s %(to_path)s%(extra)s"
1753
def __init__(self, from_path='', to_path='', extra=None):
1754
BzrError.__init__(self)
1756
self.extra = ': ' + str(extra)
1760
has_from = len(from_path) > 0
1761
has_to = len(to_path) > 0
1763
self.from_path = osutils.splitpath(from_path)[-1]
1768
self.to_path = osutils.splitpath(to_path)[-1]
1773
if has_from and has_to:
1774
self.operator = " =>"
1776
self.from_path = "from " + from_path
1778
self.operator = "to"
1780
self.operator = "file"
1783
class BzrRenameFailedError(BzrMoveFailedError):
1785
_fmt = "Could not rename %(from_path)s%(operator)s %(to_path)s%(extra)s"
1787
def __init__(self, from_path, to_path, extra=None):
1788
BzrMoveFailedError.__init__(self, from_path, to_path, extra)
1790
class BzrRemoveChangedFilesError(BzrError):
1791
"""Used when user is trying to remove changed files."""
1793
_fmt = ("Can't safely remove modified or unknown files:\n"
1794
"%(changes_as_text)s"
1795
"Use --keep to not delete them, or --force to delete them regardless.")
1797
def __init__(self, tree_delta):
1798
BzrError.__init__(self)
1799
self.changes_as_text = tree_delta.get_changes_as_text()
1800
#self.paths_as_string = '\n'.join(changed_files)
1801
#self.paths_as_string = '\n'.join([quotefn(p) for p in changed_files])
785
1804
class BzrBadParameterNotString(BzrBadParameter):
786
"""Parameter %(param)s is not a string or unicode string."""
1806
_fmt = "Parameter %(param)s is not a string or unicode string."
789
1809
class BzrBadParameterMissing(BzrBadParameter):
790
"""Parameter $(param)s is required but not present."""
1811
_fmt = "Parameter $(param)s is required but not present."
793
1814
class BzrBadParameterUnicode(BzrBadParameter):
794
"""Parameter %(param)s is unicode but only byte-strings are permitted."""
1816
_fmt = ("Parameter %(param)s is unicode but"
1817
" only byte-strings are permitted.")
797
1820
class BzrBadParameterContainsNewline(BzrBadParameter):
798
"""Parameter %(param)s contains a newline."""
801
class DependencyNotPresent(BzrNewError):
802
"""Unable to import library "%(library)s": %(error)s"""
1822
_fmt = "Parameter %(param)s contains a newline."
1825
class DependencyNotPresent(BzrError):
1827
_fmt = 'Unable to import library "%(library)s": %(error)s'
804
1829
def __init__(self, library, error):
805
BzrNewError.__init__(self, library=library, error=error)
1830
BzrError.__init__(self, library=library, error=error)
808
1833
class ParamikoNotPresent(DependencyNotPresent):
809
"""Unable to import paramiko (required for sftp support): %(error)s"""
1835
_fmt = "Unable to import paramiko (required for sftp support): %(error)s"
811
1837
def __init__(self, error):
812
1838
DependencyNotPresent.__init__(self, 'paramiko', error)
815
class UninitializableFormat(BzrNewError):
816
"""Format %(format)s cannot be initialised by this version of bzr."""
1841
class PointlessMerge(BzrError):
1843
_fmt = "Nothing to merge."
1846
class UninitializableFormat(BzrError):
1848
_fmt = "Format %(format)s cannot be initialised by this version of bzr."
818
1850
def __init__(self, format):
819
BzrNewError.__init__(self)
823
class NoDiff3(BzrNewError):
824
"""Diff3 is not installed on this machine."""
827
class ExistingLimbo(BzrNewError):
828
"""This tree contains left-over files from a failed operation.
829
Please examine %(limbo_dir)s to see if it contains any files you wish to
830
keep, and delete it when you are done.
832
def __init__(self, limbo_dir):
833
BzrNewError.__init__(self)
834
self.limbo_dir = limbo_dir
837
class ImmortalLimbo(BzrNewError):
838
"""Unable to delete transform temporary directory $(limbo_dir)s.
839
Please examine %(limbo_dir)s to see if it contains any files you wish to
840
keep, and delete it when you are done.
842
def __init__(self, limbo_dir):
843
BzrNewError.__init__(self)
844
self.limbo_dir = limbo_dir
847
class OutOfDateTree(BzrNewError):
848
"""Working tree is out of date, please run 'bzr update'."""
1851
BzrError.__init__(self)
1852
self.format = format
1855
class BadConversionTarget(BzrError):
1857
_fmt = "Cannot convert to format %(format)s. %(problem)s"
1859
def __init__(self, problem, format):
1860
BzrError.__init__(self)
1861
self.problem = problem
1862
self.format = format
1865
class NoDiffFound(BzrError):
1867
_fmt = 'Could not find an appropriate Differ for file "%(path)s"'
1869
def __init__(self, path):
1870
BzrError.__init__(self, path)
1873
class ExecutableMissing(BzrError):
1875
_fmt = "%(exe_name)s could not be found on this machine"
1877
def __init__(self, exe_name):
1878
BzrError.__init__(self, exe_name=exe_name)
1881
class NoDiff(BzrError):
1883
_fmt = "Diff is not installed on this machine: %(msg)s"
1885
def __init__(self, msg):
1886
BzrError.__init__(self, msg=msg)
1889
class NoDiff3(BzrError):
1891
_fmt = "Diff3 is not installed on this machine."
1894
class ExistingContent(BzrError):
1895
# Added in bzrlib 0.92, used by VersionedFile.add_lines.
1897
_fmt = "The content being inserted is already present."
1900
class ExistingLimbo(BzrError):
1902
_fmt = """This tree contains left-over files from a failed operation.
1903
Please examine %(limbo_dir)s to see if it contains any files you wish to
1904
keep, and delete it when you are done."""
1906
def __init__(self, limbo_dir):
1907
BzrError.__init__(self)
1908
self.limbo_dir = limbo_dir
1911
class ExistingPendingDeletion(BzrError):
1913
_fmt = """This tree contains left-over files from a failed operation.
1914
Please examine %(pending_deletion)s to see if it contains any files you
1915
wish to keep, and delete it when you are done."""
1917
def __init__(self, pending_deletion):
1918
BzrError.__init__(self, pending_deletion=pending_deletion)
1921
class ImmortalLimbo(BzrError):
1923
_fmt = """Unable to delete transform temporary directory %(limbo_dir)s.
1924
Please examine %(limbo_dir)s to see if it contains any files you wish to
1925
keep, and delete it when you are done."""
1927
def __init__(self, limbo_dir):
1928
BzrError.__init__(self)
1929
self.limbo_dir = limbo_dir
1932
class ImmortalPendingDeletion(BzrError):
1934
_fmt = ("Unable to delete transform temporary directory "
1935
"%(pending_deletion)s. Please examine %(pending_deletion)s to see if it "
1936
"contains any files you wish to keep, and delete it when you are done.")
1938
def __init__(self, pending_deletion):
1939
BzrError.__init__(self, pending_deletion=pending_deletion)
1942
class OutOfDateTree(BzrError):
1944
_fmt = "Working tree is out of date, please run 'bzr update'."
850
1946
def __init__(self, tree):
851
BzrNewError.__init__(self)
1947
BzrError.__init__(self)
852
1948
self.tree = tree
855
class MergeModifiedFormatError(BzrNewError):
856
"""Error in merge modified format"""
859
class ConflictFormatError(BzrNewError):
860
"""Format error in conflict listings"""
863
class CorruptRepository(BzrNewError):
864
"""An error has been detected in the repository %(repo_path)s.
865
Please run bzr reconcile on this repository."""
1951
class PublicBranchOutOfDate(BzrError):
1953
_fmt = 'Public branch "%(public_location)s" lacks revision '\
1956
def __init__(self, public_location, revstring):
1957
import bzrlib.urlutils as urlutils
1958
public_location = urlutils.unescape_for_display(public_location,
1960
BzrError.__init__(self, public_location=public_location,
1961
revstring=revstring)
1964
class MergeModifiedFormatError(BzrError):
1966
_fmt = "Error in merge modified format"
1969
class ConflictFormatError(BzrError):
1971
_fmt = "Format error in conflict listings"
1974
class CorruptRepository(BzrError):
1976
_fmt = ("An error has been detected in the repository %(repo_path)s.\n"
1977
"Please run bzr reconcile on this repository.")
867
1979
def __init__(self, repo):
868
BzrNewError.__init__(self)
1980
BzrError.__init__(self)
869
1981
self.repo_path = repo.bzrdir.root_transport.base
872
class UpgradeRequired(BzrNewError):
873
"""To use this feature you must upgrade your branch at %(path)s."""
1984
class UpgradeRequired(BzrError):
1986
_fmt = "To use this feature you must upgrade your branch at %(path)s."
875
1988
def __init__(self, path):
876
BzrNewError.__init__(self)
1989
BzrError.__init__(self)
877
1990
self.path = path
880
class LocalRequiresBoundBranch(BzrNewError):
881
"""Cannot perform local-only commits on unbound branches."""
884
class MissingProgressBarFinish(BzrNewError):
885
"""A nested progress bar was not 'finished' correctly."""
888
class UnsupportedOperation(BzrNewError):
889
"""The method %(mname)s is not supported on objects of type %(tname)s."""
1993
class LocalRequiresBoundBranch(BzrError):
1995
_fmt = "Cannot perform local-only commits on unbound branches."
1998
class MissingProgressBarFinish(BzrError):
2000
_fmt = "A nested progress bar was not 'finished' correctly."
2003
class InvalidProgressBarType(BzrError):
2005
_fmt = ("Environment variable BZR_PROGRESS_BAR='%(bar_type)s"
2006
" is not a supported type Select one of: %(valid_types)s")
2008
def __init__(self, bar_type, valid_types):
2009
BzrError.__init__(self, bar_type=bar_type, valid_types=valid_types)
2012
class UnsupportedOperation(BzrError):
2014
_fmt = ("The method %(mname)s is not supported on"
2015
" objects of type %(tname)s.")
890
2017
def __init__(self, method, method_self):
891
2018
self.method = method
892
2019
self.mname = method.__name__
893
2020
self.tname = type(method_self).__name__
896
class BinaryFile(BzrNewError):
897
"""File is binary but should be text."""
900
class IllegalPath(BzrNewError):
901
"""The path %(path)s is not permitted on this platform"""
2023
class CannotSetRevisionId(UnsupportedOperation):
2024
"""Raised when a commit is attempting to set a revision id but cant."""
2027
class NonAsciiRevisionId(UnsupportedOperation):
2028
"""Raised when a commit is attempting to set a non-ascii revision id
2033
class BinaryFile(BzrError):
2035
_fmt = "File is binary but should be text."
2038
class IllegalPath(BzrError):
2040
_fmt = "The path %(path)s is not permitted on this platform"
903
2042
def __init__(self, path):
904
BzrNewError.__init__(self)
2043
BzrError.__init__(self)
905
2044
self.path = path
2047
class TestamentMismatch(BzrError):
2049
_fmt = """Testament did not match expected value.
2050
For revision_id {%(revision_id)s}, expected {%(expected)s}, measured
2053
def __init__(self, revision_id, expected, measured):
2054
self.revision_id = revision_id
2055
self.expected = expected
2056
self.measured = measured
2059
class NotABundle(BzrError):
2061
_fmt = "Not a bzr revision-bundle: %(text)r"
2063
def __init__(self, text):
2064
BzrError.__init__(self)
2068
class BadBundle(BzrError):
2070
_fmt = "Bad bzr revision-bundle: %(text)r"
2072
def __init__(self, text):
2073
BzrError.__init__(self)
2077
class MalformedHeader(BadBundle):
2079
_fmt = "Malformed bzr revision-bundle header: %(text)r"
2082
class MalformedPatches(BadBundle):
2084
_fmt = "Malformed patches in bzr revision-bundle: %(text)r"
2087
class MalformedFooter(BadBundle):
2089
_fmt = "Malformed footer in bzr revision-bundle: %(text)r"
2092
class UnsupportedEOLMarker(BadBundle):
2094
_fmt = "End of line marker was not \\n in bzr revision-bundle"
2097
# XXX: BadBundle's constructor assumes there's explanatory text,
2098
# but for this there is not
2099
BzrError.__init__(self)
2102
class IncompatibleBundleFormat(BzrError):
2104
_fmt = "Bundle format %(bundle_format)s is incompatible with %(other)s"
2106
def __init__(self, bundle_format, other):
2107
BzrError.__init__(self)
2108
self.bundle_format = bundle_format
2112
class BadInventoryFormat(BzrError):
2114
_fmt = "Root class for inventory serialization errors"
2117
class UnexpectedInventoryFormat(BadInventoryFormat):
2119
_fmt = "The inventory was not in the expected format:\n %(msg)s"
2121
def __init__(self, msg):
2122
BadInventoryFormat.__init__(self, msg=msg)
2125
class RootNotRich(BzrError):
2127
_fmt = """This operation requires rich root data storage"""
2130
class NoSmartMedium(InternalBzrError):
2132
_fmt = "The transport '%(transport)s' cannot tunnel the smart protocol."
2134
def __init__(self, transport):
2135
self.transport = transport
2138
class NoSmartServer(NotBranchError):
2140
_fmt = "No smart server available at %(url)s"
2142
def __init__(self, url):
2146
class UnknownSSH(BzrError):
2148
_fmt = "Unrecognised value for BZR_SSH environment variable: %(vendor)s"
2150
def __init__(self, vendor):
2151
BzrError.__init__(self)
2152
self.vendor = vendor
2155
class SSHVendorNotFound(BzrError):
2157
_fmt = ("Don't know how to handle SSH connections."
2158
" Please set BZR_SSH environment variable.")
2161
class GhostRevisionUnusableHere(BzrError):
2163
_fmt = "Ghost revision {%(revision_id)s} cannot be used here."
2165
def __init__(self, revision_id):
2166
BzrError.__init__(self)
2167
self.revision_id = revision_id
2170
class IllegalUseOfScopeReplacer(InternalBzrError):
2172
_fmt = ("ScopeReplacer object %(name)r was used incorrectly:"
2173
" %(msg)s%(extra)s")
2175
def __init__(self, name, msg, extra=None):
2176
BzrError.__init__(self)
2180
self.extra = ': ' + str(extra)
2185
class InvalidImportLine(InternalBzrError):
2187
_fmt = "Not a valid import statement: %(msg)\n%(text)s"
2189
def __init__(self, text, msg):
2190
BzrError.__init__(self)
2195
class ImportNameCollision(InternalBzrError):
2197
_fmt = ("Tried to import an object to the same name as"
2198
" an existing object. %(name)s")
2200
def __init__(self, name):
2201
BzrError.__init__(self)
2205
class NotAMergeDirective(BzrError):
2206
"""File starting with %(firstline)r is not a merge directive"""
2207
def __init__(self, firstline):
2208
BzrError.__init__(self, firstline=firstline)
2211
class NoMergeSource(BzrError):
2212
"""Raise if no merge source was specified for a merge directive"""
2214
_fmt = "A merge directive must provide either a bundle or a public"\
2218
class IllegalMergeDirectivePayload(BzrError):
2219
"""A merge directive contained something other than a patch or bundle"""
2221
_fmt = "Bad merge directive payload %(start)r"
2223
def __init__(self, start):
2228
class PatchVerificationFailed(BzrError):
2229
"""A patch from a merge directive could not be verified"""
2231
_fmt = "Preview patch does not match requested changes."
2234
class PatchMissing(BzrError):
2235
"""Raise a patch type was specified but no patch supplied"""
2237
_fmt = "Patch_type was %(patch_type)s, but no patch was supplied."
2239
def __init__(self, patch_type):
2240
BzrError.__init__(self)
2241
self.patch_type = patch_type
2244
class UnsupportedInventoryKind(BzrError):
2246
_fmt = """Unsupported entry kind %(kind)s"""
2248
def __init__(self, kind):
2252
class BadSubsumeSource(BzrError):
2254
_fmt = "Can't subsume %(other_tree)s into %(tree)s. %(reason)s"
2256
def __init__(self, tree, other_tree, reason):
2258
self.other_tree = other_tree
2259
self.reason = reason
2262
class SubsumeTargetNeedsUpgrade(BzrError):
2264
_fmt = """Subsume target %(other_tree)s needs to be upgraded."""
2266
def __init__(self, other_tree):
2267
self.other_tree = other_tree
2270
class BadReferenceTarget(InternalBzrError):
2272
_fmt = "Can't add reference to %(other_tree)s into %(tree)s." \
2275
def __init__(self, tree, other_tree, reason):
2277
self.other_tree = other_tree
2278
self.reason = reason
2281
class NoSuchTag(BzrError):
2283
_fmt = "No such tag: %(tag_name)s"
2285
def __init__(self, tag_name):
2286
self.tag_name = tag_name
2289
class TagsNotSupported(BzrError):
2291
_fmt = ("Tags not supported by %(branch)s;"
2292
" you may be able to use bzr upgrade --dirstate-tags.")
2294
def __init__(self, branch):
2295
self.branch = branch
2298
class TagAlreadyExists(BzrError):
2300
_fmt = "Tag %(tag_name)s already exists."
2302
def __init__(self, tag_name):
2303
self.tag_name = tag_name
2306
class MalformedBugIdentifier(BzrError):
2308
_fmt = "Did not understand bug identifier %(bug_id)s: %(reason)s"
2310
def __init__(self, bug_id, reason):
2311
self.bug_id = bug_id
2312
self.reason = reason
2315
class InvalidBugTrackerURL(BzrError):
2317
_fmt = ("The URL for bug tracker \"%(abbreviation)s\" doesn't "
2318
"contain {id}: %(url)s")
2320
def __init__(self, abbreviation, url):
2321
self.abbreviation = abbreviation
2325
class UnknownBugTrackerAbbreviation(BzrError):
2327
_fmt = ("Cannot find registered bug tracker called %(abbreviation)s "
2330
def __init__(self, abbreviation, branch):
2331
self.abbreviation = abbreviation
2332
self.branch = branch
2335
class UnexpectedSmartServerResponse(BzrError):
2337
_fmt = "Could not understand response from smart server: %(response_tuple)r"
2339
def __init__(self, response_tuple):
2340
self.response_tuple = response_tuple
2343
class ContainerError(BzrError):
2344
"""Base class of container errors."""
2347
class UnknownContainerFormatError(ContainerError):
2349
_fmt = "Unrecognised container format: %(container_format)r"
2351
def __init__(self, container_format):
2352
self.container_format = container_format
2355
class UnexpectedEndOfContainerError(ContainerError):
2357
_fmt = "Unexpected end of container stream"
2360
class UnknownRecordTypeError(ContainerError):
2362
_fmt = "Unknown record type: %(record_type)r"
2364
def __init__(self, record_type):
2365
self.record_type = record_type
2368
class InvalidRecordError(ContainerError):
2370
_fmt = "Invalid record: %(reason)s"
2372
def __init__(self, reason):
2373
self.reason = reason
2376
class ContainerHasExcessDataError(ContainerError):
2378
_fmt = "Container has data after end marker: %(excess)r"
2380
def __init__(self, excess):
2381
self.excess = excess
2384
class DuplicateRecordNameError(ContainerError):
2386
_fmt = "Container has multiple records with the same name: %(name)s"
2388
def __init__(self, name):
2392
class NoDestinationAddress(InternalBzrError):
2394
_fmt = "Message does not have a destination address."
2397
class RepositoryDataStreamError(BzrError):
2399
_fmt = "Corrupt or incompatible data stream: %(reason)s"
2401
def __init__(self, reason):
2402
self.reason = reason
2405
class SMTPError(BzrError):
2407
_fmt = "SMTP error: %(error)s"
2409
def __init__(self, error):
2413
class NoMessageSupplied(BzrError):
2415
_fmt = "No message supplied."
2418
class NoMailAddressSpecified(BzrError):
2420
_fmt = "No mail-to address specified."
2423
class UnknownMailClient(BzrError):
2425
_fmt = "Unknown mail client: %(mail_client)s"
2427
def __init__(self, mail_client):
2428
BzrError.__init__(self, mail_client=mail_client)
2431
class MailClientNotFound(BzrError):
2433
_fmt = "Unable to find mail client with the following names:"\
2434
" %(mail_command_list_string)s"
2436
def __init__(self, mail_command_list):
2437
mail_command_list_string = ', '.join(mail_command_list)
2438
BzrError.__init__(self, mail_command_list=mail_command_list,
2439
mail_command_list_string=mail_command_list_string)
2441
class SMTPConnectionRefused(SMTPError):
2443
_fmt = "SMTP connection to %(host)s refused"
2445
def __init__(self, error, host):
2450
class DefaultSMTPConnectionRefused(SMTPConnectionRefused):
2452
_fmt = "Please specify smtp_server. No server at default %(host)s."
2455
class BzrDirError(BzrError):
2457
def __init__(self, bzrdir):
2458
import bzrlib.urlutils as urlutils
2459
display_url = urlutils.unescape_for_display(bzrdir.root_transport.base,
2461
BzrError.__init__(self, bzrdir=bzrdir, display_url=display_url)
2464
class AlreadyBranch(BzrDirError):
2466
_fmt = "'%(display_url)s' is already a branch."
2469
class AlreadyTree(BzrDirError):
2471
_fmt = "'%(display_url)s' is already a tree."
2474
class AlreadyCheckout(BzrDirError):
2476
_fmt = "'%(display_url)s' is already a checkout."
2479
class AlreadyLightweightCheckout(BzrDirError):
2481
_fmt = "'%(display_url)s' is already a lightweight checkout."
2484
class ReconfigurationNotSupported(BzrDirError):
2486
_fmt = "Requested reconfiguration of '%(display_url)s' is not supported."
2489
class NoBindLocation(BzrDirError):
2491
_fmt = "No location could be found to bind to at %(display_url)s."
2494
class UncommittedChanges(BzrError):
2496
_fmt = 'Working tree "%(display_url)s" has uncommitted changes.'
2498
def __init__(self, tree):
2499
import bzrlib.urlutils as urlutils
2500
display_url = urlutils.unescape_for_display(
2501
tree.bzrdir.root_transport.base, 'ascii')
2502
BzrError.__init__(self, tree=tree, display_url=display_url)
2505
class MissingTemplateVariable(BzrError):
2507
_fmt = 'Variable {%(name)s} is not available.'
2509
def __init__(self, name):
2513
class UnableCreateSymlink(BzrError):
2515
_fmt = 'Unable to create symlink %(path_str)son this platform'
2517
def __init__(self, path=None):
2521
path_str = repr(str(path))
2522
except UnicodeEncodeError:
2523
path_str = repr(path)
2525
self.path_str = path_str
2528
class UnsupportedTimezoneFormat(BzrError):
2530
_fmt = ('Unsupported timezone format "%(timezone)s", '
2531
'options are "utc", "original", "local".')
2533
def __init__(self, timezone):
2534
self.timezone = timezone