1
# Copyright (C) 2005, 2006, 2007, 2008 Canonical Ltd
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
# GNU General Public License for more details.
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
"""Exceptions for bzr, and reporting of them.
25
from bzrlib.patches import (
34
# TODO: is there any value in providing the .args field used by standard
35
# python exceptions? A list of values with no names seems less useful
38
# TODO: Perhaps convert the exception to a string at the moment it's
39
# constructed to make sure it will succeed. But that says nothing about
40
# exceptions that are never raised.
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
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)
97
s = getattr(self, '_preformatted_string', None)
99
# contains a preformatted message
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.
112
except (AttributeError, TypeError, NameError, ValueError, KeyError), e:
113
return 'Unprintable exception %s: dict=%r, fmt=%r, error=%r' \
114
% (self.__class__.__name__,
116
getattr(self, '_fmt', None),
119
def __unicode__(self):
121
if isinstance(u, str):
122
# Try decoding the str using the default encoding.
124
elif not isinstance(u, unicode):
125
# Try to make a unicode object from it, because __unicode__ must
126
# return a unicode object.
132
if isinstance(s, unicode):
135
# __str__ must return a str.
139
def _get_format_string(self):
140
"""Return format string for this exception or None"""
141
fmt = getattr(self, '_fmt', None)
144
fmt = getattr(self, '__doc__', None)
146
symbol_versioning.warn("%s uses its docstring as a format, "
147
"it should use _fmt instead" % self.__class__.__name__,
150
return 'Unprintable exception %s: dict=%r, fmt=%r' \
151
% (self.__class__.__name__,
153
getattr(self, '_fmt', None),
156
def __eq__(self, other):
157
if self.__class__ != other.__class__:
158
return NotImplemented
159
return self.__dict__ == other.__dict__
162
class InternalBzrError(BzrError):
163
"""Base class for errors that are internal in nature.
165
This is a convenience class for errors that are internal. The
166
internal_error attribute can still be altered in subclasses, if needed.
167
Using this class is simply an easy way to get internal errors.
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__,
206
class AlreadyBuilding(BzrError):
208
_fmt = "The tree builder is already building a tree."
211
class BranchError(BzrError):
212
"""Base class for concrete 'errors about a branch'."""
214
def __init__(self, branch):
215
BzrError.__init__(self, branch=branch)
218
class BzrCheckError(InternalBzrError):
220
_fmt = "Internal check failed: %(message)s"
222
def __init__(self, message):
223
BzrError.__init__(self)
224
self.message = message
227
class DisabledMethod(InternalBzrError):
229
_fmt = "The smart server method '%(class_name)s' is disabled."
231
def __init__(self, class_name):
232
BzrError.__init__(self)
233
self.class_name = class_name
236
class IncompatibleAPI(BzrError):
238
_fmt = 'The API for "%(api)s" is not compatible with "%(wanted)s". '\
239
'It supports versions "%(minimum)s" to "%(current)s".'
241
def __init__(self, api, wanted, minimum, current):
244
self.minimum = minimum
245
self.current = current
248
class InProcessTransport(BzrError):
250
_fmt = "The transport '%(transport)s' is only accessible within this " \
253
def __init__(self, transport):
254
self.transport = transport
257
class InvalidEntryName(InternalBzrError):
259
_fmt = "Invalid entry name: %(name)s"
261
def __init__(self, name):
262
BzrError.__init__(self)
266
class InvalidRevisionNumber(BzrError):
268
_fmt = "Invalid revision number %(revno)s"
270
def __init__(self, revno):
271
BzrError.__init__(self)
275
class InvalidRevisionId(BzrError):
277
_fmt = "Invalid revision-id {%(revision_id)s} in %(branch)s"
279
def __init__(self, revision_id, branch):
280
# branch can be any string or object with __str__ defined
281
BzrError.__init__(self)
282
self.revision_id = revision_id
286
class ReservedId(BzrError):
288
_fmt = "Reserved revision-id {%(revision_id)s}"
290
def __init__(self, revision_id):
291
self.revision_id = revision_id
294
class RootMissing(InternalBzrError):
296
_fmt = ("The root entry of a tree must be the first entry supplied to "
297
"record_entry_contents.")
300
class NoPublicBranch(BzrError):
302
_fmt = 'There is no public branch set for "%(branch_url)s".'
304
def __init__(self, branch):
305
import bzrlib.urlutils as urlutils
306
public_location = urlutils.unescape_for_display(branch.base, 'ascii')
307
BzrError.__init__(self, branch_url=public_location)
310
class NoHelpTopic(BzrError):
312
_fmt = ("No help could be found for '%(topic)s'. "
313
"Please use 'bzr help topics' to obtain a list of topics.")
315
def __init__(self, topic):
319
class NoSuchId(BzrError):
321
_fmt = 'The file id "%(file_id)s" is not present in the tree %(tree)s.'
323
def __init__(self, tree, file_id):
324
BzrError.__init__(self)
325
self.file_id = file_id
329
class NoSuchIdInRepository(NoSuchId):
331
_fmt = ('The file id "%(file_id)s" is not present in the repository'
334
def __init__(self, repository, file_id):
335
BzrError.__init__(self, repository=repository, file_id=file_id)
338
class NotStacked(BranchError):
340
_fmt = "The branch '%(branch)s' is not stacked."
343
class InventoryModified(InternalBzrError):
345
_fmt = ("The current inventory for the tree %(tree)r has been modified,"
346
" so a clean inventory cannot be read without data loss.")
348
def __init__(self, tree):
352
class NoWorkingTree(BzrError):
354
_fmt = 'No WorkingTree exists for "%(base)s".'
356
def __init__(self, base):
357
BzrError.__init__(self)
361
class NotBuilding(BzrError):
363
_fmt = "Not currently building a tree."
366
class NotLocalUrl(BzrError):
368
_fmt = "%(url)s is not a local path."
370
def __init__(self, url):
374
class WorkingTreeAlreadyPopulated(InternalBzrError):
376
_fmt = 'Working tree already populated in "%(base)s"'
378
def __init__(self, base):
382
class BzrCommandError(BzrError):
383
"""Error from user command"""
385
# Error from malformed user command; please avoid raising this as a
386
# generic exception not caused by user input.
388
# I think it's a waste of effort to differentiate between errors that
389
# are not intended to be caught anyway. UI code need not subclass
390
# BzrCommandError, and non-UI code should not throw a subclass of
391
# BzrCommandError. ADHB 20051211
394
class NotWriteLocked(BzrError):
396
_fmt = """%(not_locked)r is not write locked but needs to be."""
398
def __init__(self, not_locked):
399
self.not_locked = not_locked
402
class BzrOptionError(BzrCommandError):
404
_fmt = "Error in command line options"
407
class BadIndexFormatSignature(BzrError):
409
_fmt = "%(value)s is not an index of type %(_type)s."
411
def __init__(self, value, _type):
412
BzrError.__init__(self)
417
class BadIndexData(BzrError):
419
_fmt = "Error in data for index %(value)s."
421
def __init__(self, value):
422
BzrError.__init__(self)
426
class BadIndexDuplicateKey(BzrError):
428
_fmt = "The key '%(key)s' is already in index '%(index)s'."
430
def __init__(self, key, index):
431
BzrError.__init__(self)
436
class BadIndexKey(BzrError):
438
_fmt = "The key '%(key)s' is not a valid key."
440
def __init__(self, key):
441
BzrError.__init__(self)
445
class BadIndexOptions(BzrError):
447
_fmt = "Could not parse options for index %(value)s."
449
def __init__(self, value):
450
BzrError.__init__(self)
454
class BadIndexValue(BzrError):
456
_fmt = "The value '%(value)s' is not a valid value."
458
def __init__(self, value):
459
BzrError.__init__(self)
463
class BadOptionValue(BzrError):
465
_fmt = """Bad value "%(value)s" for option "%(name)s"."""
467
def __init__(self, name, value):
468
BzrError.__init__(self, name=name, value=value)
471
class StrictCommitFailed(BzrError):
473
_fmt = "Commit refused because there are unknown files in the tree"
476
# XXX: Should be unified with TransportError; they seem to represent the
478
# RBC 20060929: I think that unifiying with TransportError would be a mistake
479
# - this is finer than a TransportError - and more useful as such. It
480
# differentiates between 'transport has failed' and 'operation on a transport
482
class PathError(BzrError):
484
_fmt = "Generic path error: %(path)r%(extra)s)"
486
def __init__(self, path, extra=None):
487
BzrError.__init__(self)
490
self.extra = ': ' + str(extra)
495
class NoSuchFile(PathError):
497
_fmt = "No such file: %(path)r%(extra)s"
500
class FileExists(PathError):
502
_fmt = "File exists: %(path)r%(extra)s"
505
class RenameFailedFilesExist(BzrError):
506
"""Used when renaming and both source and dest exist."""
508
_fmt = ("Could not rename %(source)s => %(dest)s because both files exist."
509
" (Use --after to tell bzr about a rename that has already"
510
" happened)%(extra)s")
512
def __init__(self, source, dest, extra=None):
513
BzrError.__init__(self)
514
self.source = str(source)
515
self.dest = str(dest)
517
self.extra = ' ' + str(extra)
522
class NotADirectory(PathError):
524
_fmt = '"%(path)s" is not a directory %(extra)s'
527
class NotInWorkingDirectory(PathError):
529
_fmt = '"%(path)s" is not in the working directory %(extra)s'
532
class DirectoryNotEmpty(PathError):
534
_fmt = 'Directory not empty: "%(path)s"%(extra)s'
537
class HardLinkNotSupported(PathError):
539
_fmt = 'Hard-linking "%(path)s" is not supported'
542
class ReadingCompleted(InternalBzrError):
544
_fmt = ("The MediumRequest '%(request)s' has already had finish_reading "
545
"called upon it - the request has been completed and no more "
548
def __init__(self, request):
549
self.request = request
552
class ResourceBusy(PathError):
554
_fmt = 'Device or resource busy: "%(path)s"%(extra)s'
557
class PermissionDenied(PathError):
559
_fmt = 'Permission denied: "%(path)s"%(extra)s'
562
class InvalidURL(PathError):
564
_fmt = 'Invalid url supplied to transport: "%(path)s"%(extra)s'
567
class InvalidURLJoin(PathError):
569
_fmt = "Invalid URL join request: %(reason)s: %(base)r + %(join_args)r"
571
def __init__(self, reason, base, join_args):
574
self.join_args = join_args
575
PathError.__init__(self, base, reason)
578
class InvalidRebaseURLs(PathError):
580
_fmt = "URLs differ by more than path: %(from_)r and %(to)r"
582
def __init__(self, from_, to):
585
PathError.__init__(self, from_, 'URLs differ by more than path.')
588
class UnavailableRepresentation(InternalBzrError):
590
_fmt = ("The encoding '%(wanted)s' is not available for key %(key)s which "
591
"is encoded as '%(native)s'.")
593
def __init__(self, key, wanted, native):
594
InternalBzrError.__init__(self)
600
class UnknownHook(BzrError):
602
_fmt = "The %(type)s hook '%(hook)s' is unknown in this version of bzrlib."
604
def __init__(self, hook_type, hook_name):
605
BzrError.__init__(self)
606
self.type = hook_type
607
self.hook = hook_name
610
class UnsupportedProtocol(PathError):
612
_fmt = 'Unsupported protocol for url "%(path)s"%(extra)s'
614
def __init__(self, url, extra):
615
PathError.__init__(self, url, extra=extra)
618
class UnstackableBranchFormat(BzrError):
620
_fmt = ("The branch '%(url)s'(%(format)s) is not a stackable format. "
621
"You will need to upgrade the branch to permit branch stacking.")
623
def __init__(self, format, url):
624
BzrError.__init__(self)
629
class UnstackableRepositoryFormat(BzrError):
631
_fmt = ("The repository '%(url)s'(%(format)s) is not a stackable format. "
632
"You will need to upgrade the repository to permit branch stacking.")
634
def __init__(self, format, url):
635
BzrError.__init__(self)
640
class ReadError(PathError):
642
_fmt = """Error reading from %(path)r."""
645
class ShortReadvError(PathError):
647
_fmt = ('readv() read %(actual)s bytes rather than %(length)s bytes'
648
' at %(offset)s for "%(path)s"%(extra)s')
650
internal_error = True
652
def __init__(self, path, offset, length, actual, extra=None):
653
PathError.__init__(self, path, extra=extra)
659
class PathNotChild(PathError):
661
_fmt = 'Path "%(path)s" is not a child of path "%(base)s"%(extra)s'
663
internal_error = True
665
def __init__(self, path, base, extra=None):
666
BzrError.__init__(self)
670
self.extra = ': ' + str(extra)
675
class InvalidNormalization(PathError):
677
_fmt = 'Path "%(path)s" is not unicode normalized'
680
# TODO: This is given a URL; we try to unescape it but doing that from inside
681
# the exception object is a bit undesirable.
682
# TODO: Probably this behavior of should be a common superclass
683
class NotBranchError(PathError):
685
_fmt = 'Not a branch: "%(path)s".'
687
def __init__(self, path):
688
import bzrlib.urlutils as urlutils
689
self.path = urlutils.unescape_for_display(path, 'ascii')
692
class NoSubmitBranch(PathError):
694
_fmt = 'No submit branch available for branch "%(path)s"'
696
def __init__(self, branch):
697
import bzrlib.urlutils as urlutils
698
self.path = urlutils.unescape_for_display(branch.base, 'ascii')
701
class AlreadyBranchError(PathError):
703
_fmt = 'Already a branch: "%(path)s".'
706
class BranchExistsWithoutWorkingTree(PathError):
708
_fmt = 'Directory contains a branch, but no working tree \
709
(use bzr checkout if you wish to build a working tree): "%(path)s"'
712
class AtomicFileAlreadyClosed(PathError):
714
_fmt = ('"%(function)s" called on an AtomicFile after it was closed:'
717
def __init__(self, path, function):
718
PathError.__init__(self, path=path, extra=None)
719
self.function = function
722
class InaccessibleParent(PathError):
724
_fmt = ('Parent not accessible given base "%(base)s" and'
725
' relative path "%(path)s"')
727
def __init__(self, path, base):
728
PathError.__init__(self, path)
732
class NoRepositoryPresent(BzrError):
734
_fmt = 'No repository present: "%(path)s"'
735
def __init__(self, bzrdir):
736
BzrError.__init__(self)
737
self.path = bzrdir.transport.clone('..').base
740
class FileInWrongBranch(BzrError):
742
_fmt = 'File "%(path)s" is not in branch %(branch_base)s.'
744
def __init__(self, branch, path):
745
BzrError.__init__(self)
747
self.branch_base = branch.base
751
class UnsupportedFormatError(BzrError):
753
_fmt = "Unsupported branch format: %(format)s\nPlease run 'bzr upgrade'"
756
class UnknownFormatError(BzrError):
758
_fmt = "Unknown %(kind)s format: %(format)r"
760
def __init__(self, format, kind='branch'):
765
class IncompatibleFormat(BzrError):
767
_fmt = "Format %(format)s is not compatible with .bzr version %(bzrdir)s."
769
def __init__(self, format, bzrdir_format):
770
BzrError.__init__(self)
772
self.bzrdir = bzrdir_format
775
class IncompatibleRepositories(BzrError):
777
_fmt = "Repository %(target)s is not compatible with repository"\
780
def __init__(self, source, target):
781
BzrError.__init__(self, target=target, source=source)
784
class IncompatibleRevision(BzrError):
786
_fmt = "Revision is not compatible with %(repo_format)s"
788
def __init__(self, repo_format):
789
BzrError.__init__(self)
790
self.repo_format = repo_format
793
class AlreadyVersionedError(BzrError):
794
"""Used when a path is expected not to be versioned, but it is."""
796
_fmt = "%(context_info)s%(path)s is already versioned."
798
def __init__(self, path, context_info=None):
799
"""Construct a new AlreadyVersionedError.
801
:param path: This is the path which is versioned,
802
which should be in a user friendly form.
803
:param context_info: If given, this is information about the context,
804
which could explain why this is expected to not be versioned.
806
BzrError.__init__(self)
808
if context_info is None:
809
self.context_info = ''
811
self.context_info = context_info + ". "
814
class NotVersionedError(BzrError):
815
"""Used when a path is expected to be versioned, but it is not."""
817
_fmt = "%(context_info)s%(path)s is not versioned."
819
def __init__(self, path, context_info=None):
820
"""Construct a new NotVersionedError.
822
:param path: This is the path which is not versioned,
823
which should be in a user friendly form.
824
:param context_info: If given, this is information about the context,
825
which could explain why this is expected to be versioned.
827
BzrError.__init__(self)
829
if context_info is None:
830
self.context_info = ''
832
self.context_info = context_info + ". "
835
class PathsNotVersionedError(BzrError):
836
"""Used when reporting several paths which are not versioned"""
838
_fmt = "Path(s) are not versioned: %(paths_as_string)s"
840
def __init__(self, paths):
841
from bzrlib.osutils import quotefn
842
BzrError.__init__(self)
844
self.paths_as_string = ' '.join([quotefn(p) for p in paths])
847
class PathsDoNotExist(BzrError):
849
_fmt = "Path(s) do not exist: %(paths_as_string)s%(extra)s"
851
# used when reporting that paths are neither versioned nor in the working
854
def __init__(self, paths, extra=None):
856
from bzrlib.osutils import quotefn
857
BzrError.__init__(self)
859
self.paths_as_string = ' '.join([quotefn(p) for p in paths])
861
self.extra = ': ' + str(extra)
866
class BadFileKindError(BzrError):
868
_fmt = 'Cannot operate on "%(filename)s" of unsupported kind "%(kind)s"'
870
def __init__(self, filename, kind):
871
BzrError.__init__(self, filename=filename, kind=kind)
874
class BadFilenameEncoding(BzrError):
876
_fmt = ('Filename %(filename)r is not valid in your current filesystem'
877
' encoding %(fs_encoding)s')
879
def __init__(self, filename, fs_encoding):
880
BzrError.__init__(self)
881
self.filename = filename
882
self.fs_encoding = fs_encoding
885
class ForbiddenControlFileError(BzrError):
887
_fmt = 'Cannot operate on "%(filename)s" because it is a control file'
890
class LockError(InternalBzrError):
892
_fmt = "Lock error: %(msg)s"
894
# All exceptions from the lock/unlock functions should be from
895
# this exception class. They will be translated as necessary. The
896
# original exception is available as e.original_error
898
# New code should prefer to raise specific subclasses
899
def __init__(self, message):
900
# Python 2.5 uses a slot for StandardError.message,
901
# so use a different variable name. We now work around this in
902
# BzrError.__str__, but this member name is kept for compatability.
906
class LockActive(LockError):
908
_fmt = "The lock for '%(lock_description)s' is in use and cannot be broken."
910
internal_error = False
912
def __init__(self, lock_description):
913
self.lock_description = lock_description
916
class CommitNotPossible(LockError):
918
_fmt = "A commit was attempted but we do not have a write lock open."
924
class AlreadyCommitted(LockError):
926
_fmt = "A rollback was requested, but is not able to be accomplished."
932
class ReadOnlyError(LockError):
934
_fmt = "A write attempt was made in a read only transaction on %(obj)s"
936
# TODO: There should also be an error indicating that you need a write
937
# lock and don't have any lock at all... mbp 20070226
939
def __init__(self, obj):
943
class LockFailed(LockError):
945
internal_error = False
947
_fmt = "Cannot lock %(lock)s: %(why)s"
949
def __init__(self, lock, why):
950
LockError.__init__(self, '')
955
class OutSideTransaction(BzrError):
957
_fmt = ("A transaction related operation was attempted after"
958
" the transaction finished.")
961
class ObjectNotLocked(LockError):
963
_fmt = "%(obj)r is not locked"
965
# this can indicate that any particular object is not locked; see also
966
# LockNotHeld which means that a particular *lock* object is not held by
967
# the caller -- perhaps they should be unified.
968
def __init__(self, obj):
972
class ReadOnlyObjectDirtiedError(ReadOnlyError):
974
_fmt = "Cannot change object %(obj)r in read only transaction"
976
def __init__(self, obj):
980
class UnlockableTransport(LockError):
982
internal_error = False
984
_fmt = "Cannot lock: transport is read only: %(transport)s"
986
def __init__(self, transport):
987
self.transport = transport
990
class LockContention(LockError):
992
_fmt = 'Could not acquire lock "%(lock)s"'
993
# TODO: show full url for lock, combining the transport and relative
996
internal_error = False
998
def __init__(self, lock):
1002
class LockBroken(LockError):
1004
_fmt = ("Lock was broken while still open: %(lock)s"
1005
" - check storage consistency!")
1007
internal_error = False
1009
def __init__(self, lock):
1013
class LockBreakMismatch(LockError):
1015
_fmt = ("Lock was released and re-acquired before being broken:"
1016
" %(lock)s: held by %(holder)r, wanted to break %(target)r")
1018
internal_error = False
1020
def __init__(self, lock, holder, target):
1022
self.holder = holder
1023
self.target = target
1026
class LockNotHeld(LockError):
1028
_fmt = "Lock not held: %(lock)s"
1030
internal_error = False
1032
def __init__(self, lock):
1036
class TokenLockingNotSupported(LockError):
1038
_fmt = "The object %(obj)s does not support token specifying a token when locking."
1040
def __init__(self, obj):
1044
class TokenMismatch(LockBroken):
1046
_fmt = "The lock token %(given_token)r does not match lock token %(lock_token)r."
1048
internal_error = True
1050
def __init__(self, given_token, lock_token):
1051
self.given_token = given_token
1052
self.lock_token = lock_token
1055
class PointlessCommit(BzrError):
1057
_fmt = "No changes to commit"
1060
class CannotCommitSelectedFileMerge(BzrError):
1062
_fmt = 'Selected-file commit of merges is not supported yet:'\
1063
' files %(files_str)s'
1065
def __init__(self, files):
1066
files_str = ', '.join(files)
1067
BzrError.__init__(self, files=files, files_str=files_str)
1070
class BadCommitMessageEncoding(BzrError):
1072
_fmt = 'The specified commit message contains characters unsupported by '\
1073
'the current encoding.'
1076
class UpgradeReadonly(BzrError):
1078
_fmt = "Upgrade URL cannot work with readonly URLs."
1081
class UpToDateFormat(BzrError):
1083
_fmt = "The branch format %(format)s is already at the most recent format."
1085
def __init__(self, format):
1086
BzrError.__init__(self)
1087
self.format = format
1090
class StrictCommitFailed(Exception):
1092
_fmt = "Commit refused because there are unknowns in the tree."
1095
class NoSuchRevision(InternalBzrError):
1097
_fmt = "%(branch)s has no revision %(revision)s"
1099
def __init__(self, branch, revision):
1100
# 'branch' may sometimes be an internal object like a KnitRevisionStore
1101
BzrError.__init__(self, branch=branch, revision=revision)
1104
class RangeInChangeOption(BzrError):
1106
_fmt = "Option --change does not accept revision ranges"
1109
class NoSuchRevisionSpec(BzrError):
1111
_fmt = "No namespace registered for string: %(spec)r"
1113
def __init__(self, spec):
1114
BzrError.__init__(self, spec=spec)
1117
class NoSuchRevisionInTree(NoSuchRevision):
1118
"""When using Tree.revision_tree, and the revision is not accessible."""
1120
_fmt = "The revision id {%(revision_id)s} is not present in the tree %(tree)s."
1122
def __init__(self, tree, revision_id):
1123
BzrError.__init__(self)
1125
self.revision_id = revision_id
1128
class InvalidRevisionSpec(BzrError):
1130
_fmt = ("Requested revision: %(spec)r does not exist in branch:"
1131
" %(branch)s%(extra)s")
1133
def __init__(self, spec, branch, extra=None):
1134
BzrError.__init__(self, branch=branch, spec=spec)
1136
self.extra = '\n' + str(extra)
1141
class HistoryMissing(BzrError):
1143
_fmt = "%(branch)s is missing %(object_type)s {%(object_id)s}"
1146
class AppendRevisionsOnlyViolation(BzrError):
1148
_fmt = ('Operation denied because it would change the main history,'
1149
' which is not permitted by the append_revisions_only setting on'
1150
' branch "%(location)s".')
1152
def __init__(self, location):
1153
import bzrlib.urlutils as urlutils
1154
location = urlutils.unescape_for_display(location, 'ascii')
1155
BzrError.__init__(self, location=location)
1158
class DivergedBranches(BzrError):
1160
_fmt = ("These branches have diverged."
1161
" Use the merge command to reconcile them.")
1163
def __init__(self, branch1, branch2):
1164
self.branch1 = branch1
1165
self.branch2 = branch2
1168
class NotLefthandHistory(InternalBzrError):
1170
_fmt = "Supplied history does not follow left-hand parents"
1172
def __init__(self, history):
1173
BzrError.__init__(self, history=history)
1176
class UnrelatedBranches(BzrError):
1178
_fmt = ("Branches have no common ancestor, and"
1179
" no merge base revision was specified.")
1182
class CannotReverseCherrypick(BzrError):
1184
_fmt = ('Selected merge cannot perform reverse cherrypicks. Try merge3'
1188
class NoCommonAncestor(BzrError):
1190
_fmt = "Revisions have no common ancestor: %(revision_a)s %(revision_b)s"
1192
def __init__(self, revision_a, revision_b):
1193
self.revision_a = revision_a
1194
self.revision_b = revision_b
1197
class NoCommonRoot(BzrError):
1199
_fmt = ("Revisions are not derived from the same root: "
1200
"%(revision_a)s %(revision_b)s.")
1202
def __init__(self, revision_a, revision_b):
1203
BzrError.__init__(self, revision_a=revision_a, revision_b=revision_b)
1206
class NotAncestor(BzrError):
1208
_fmt = "Revision %(rev_id)s is not an ancestor of %(not_ancestor_id)s"
1210
def __init__(self, rev_id, not_ancestor_id):
1211
BzrError.__init__(self, rev_id=rev_id,
1212
not_ancestor_id=not_ancestor_id)
1215
class InstallFailed(BzrError):
1217
def __init__(self, revisions):
1218
revision_str = ", ".join(str(r) for r in revisions)
1219
msg = "Could not install revisions:\n%s" % revision_str
1220
BzrError.__init__(self, msg)
1221
self.revisions = revisions
1224
class AmbiguousBase(BzrError):
1226
def __init__(self, bases):
1227
warn("BzrError AmbiguousBase has been deprecated as of bzrlib 0.8.",
1229
msg = ("The correct base is unclear, because %s are all equally close"
1231
BzrError.__init__(self, msg)
1235
class NoCommits(BranchError):
1237
_fmt = "Branch %(branch)s has no commits."
1240
class UnlistableStore(BzrError):
1242
def __init__(self, store):
1243
BzrError.__init__(self, "Store %s is not listable" % store)
1247
class UnlistableBranch(BzrError):
1249
def __init__(self, br):
1250
BzrError.__init__(self, "Stores for branch %s are not listable" % br)
1253
class BoundBranchOutOfDate(BzrError):
1255
_fmt = ("Bound branch %(branch)s is out of date with master branch"
1258
def __init__(self, branch, master):
1259
BzrError.__init__(self)
1260
self.branch = branch
1261
self.master = master
1264
class CommitToDoubleBoundBranch(BzrError):
1266
_fmt = ("Cannot commit to branch %(branch)s."
1267
" It is bound to %(master)s, which is bound to %(remote)s.")
1269
def __init__(self, branch, master, remote):
1270
BzrError.__init__(self)
1271
self.branch = branch
1272
self.master = master
1273
self.remote = remote
1276
class OverwriteBoundBranch(BzrError):
1278
_fmt = "Cannot pull --overwrite to a branch which is bound %(branch)s"
1280
def __init__(self, branch):
1281
BzrError.__init__(self)
1282
self.branch = branch
1285
class BoundBranchConnectionFailure(BzrError):
1287
_fmt = ("Unable to connect to target of bound branch %(branch)s"
1288
" => %(target)s: %(error)s")
1290
def __init__(self, branch, target, error):
1291
BzrError.__init__(self)
1292
self.branch = branch
1293
self.target = target
1297
class WeaveError(BzrError):
1299
_fmt = "Error in processing weave: %(message)s"
1301
def __init__(self, message=None):
1302
BzrError.__init__(self)
1303
self.message = message
1306
class WeaveRevisionAlreadyPresent(WeaveError):
1308
_fmt = "Revision {%(revision_id)s} already present in %(weave)s"
1310
def __init__(self, revision_id, weave):
1312
WeaveError.__init__(self)
1313
self.revision_id = revision_id
1317
class WeaveRevisionNotPresent(WeaveError):
1319
_fmt = "Revision {%(revision_id)s} not present in %(weave)s"
1321
def __init__(self, revision_id, weave):
1322
WeaveError.__init__(self)
1323
self.revision_id = revision_id
1327
class WeaveFormatError(WeaveError):
1329
_fmt = "Weave invariant violated: %(what)s"
1331
def __init__(self, what):
1332
WeaveError.__init__(self)
1336
class WeaveParentMismatch(WeaveError):
1338
_fmt = "Parents are mismatched between two revisions. %(message)s"
1341
class WeaveInvalidChecksum(WeaveError):
1343
_fmt = "Text did not match it's checksum: %(message)s"
1346
class WeaveTextDiffers(WeaveError):
1348
_fmt = ("Weaves differ on text content. Revision:"
1349
" {%(revision_id)s}, %(weave_a)s, %(weave_b)s")
1351
def __init__(self, revision_id, weave_a, weave_b):
1352
WeaveError.__init__(self)
1353
self.revision_id = revision_id
1354
self.weave_a = weave_a
1355
self.weave_b = weave_b
1358
class WeaveTextDiffers(WeaveError):
1360
_fmt = ("Weaves differ on text content. Revision:"
1361
" {%(revision_id)s}, %(weave_a)s, %(weave_b)s")
1363
def __init__(self, revision_id, weave_a, weave_b):
1364
WeaveError.__init__(self)
1365
self.revision_id = revision_id
1366
self.weave_a = weave_a
1367
self.weave_b = weave_b
1370
class VersionedFileError(BzrError):
1372
_fmt = "Versioned file error"
1375
class RevisionNotPresent(VersionedFileError):
1377
_fmt = 'Revision {%(revision_id)s} not present in "%(file_id)s".'
1379
def __init__(self, revision_id, file_id):
1380
VersionedFileError.__init__(self)
1381
self.revision_id = revision_id
1382
self.file_id = file_id
1385
class RevisionAlreadyPresent(VersionedFileError):
1387
_fmt = 'Revision {%(revision_id)s} already present in "%(file_id)s".'
1389
def __init__(self, revision_id, file_id):
1390
VersionedFileError.__init__(self)
1391
self.revision_id = revision_id
1392
self.file_id = file_id
1395
class VersionedFileInvalidChecksum(VersionedFileError):
1397
_fmt = "Text did not match its checksum: %(message)s"
1400
class KnitError(InternalBzrError):
1405
class KnitCorrupt(KnitError):
1407
_fmt = "Knit %(filename)s corrupt: %(how)s"
1409
def __init__(self, filename, how):
1410
KnitError.__init__(self)
1411
self.filename = filename
1415
class KnitDataStreamIncompatible(KnitError):
1416
# Not raised anymore, as we can convert data streams. In future we may
1417
# need it again for more exotic cases, so we're keeping it around for now.
1419
_fmt = "Cannot insert knit data stream of format \"%(stream_format)s\" into knit of format \"%(target_format)s\"."
1421
def __init__(self, stream_format, target_format):
1422
self.stream_format = stream_format
1423
self.target_format = target_format
1426
class KnitDataStreamUnknown(KnitError):
1427
# Indicates a data stream we don't know how to handle.
1429
_fmt = "Cannot parse knit data stream of format \"%(stream_format)s\"."
1431
def __init__(self, stream_format):
1432
self.stream_format = stream_format
1435
class KnitHeaderError(KnitError):
1437
_fmt = 'Knit header error: %(badline)r unexpected for file "%(filename)s".'
1439
def __init__(self, badline, filename):
1440
KnitError.__init__(self)
1441
self.badline = badline
1442
self.filename = filename
1444
class KnitIndexUnknownMethod(KnitError):
1445
"""Raised when we don't understand the storage method.
1447
Currently only 'fulltext' and 'line-delta' are supported.
1450
_fmt = ("Knit index %(filename)s does not have a known method"
1451
" in options: %(options)r")
1453
def __init__(self, filename, options):
1454
KnitError.__init__(self)
1455
self.filename = filename
1456
self.options = options
1459
class NoSuchExportFormat(BzrError):
1461
_fmt = "Export format %(format)r not supported"
1463
def __init__(self, format):
1464
BzrError.__init__(self)
1465
self.format = format
1468
class TransportError(BzrError):
1470
_fmt = "Transport error: %(msg)s %(orig_error)s"
1472
def __init__(self, msg=None, orig_error=None):
1473
if msg is None and orig_error is not None:
1474
msg = str(orig_error)
1475
if orig_error is None:
1480
self.orig_error = orig_error
1481
BzrError.__init__(self)
1484
class TooManyConcurrentRequests(InternalBzrError):
1486
_fmt = ("The medium '%(medium)s' has reached its concurrent request limit."
1487
" Be sure to finish_writing and finish_reading on the"
1488
" currently open request.")
1490
def __init__(self, medium):
1491
self.medium = medium
1494
class SmartProtocolError(TransportError):
1496
_fmt = "Generic bzr smart protocol error: %(details)s"
1498
def __init__(self, details):
1499
self.details = details
1502
class UnexpectedProtocolVersionMarker(TransportError):
1504
_fmt = "Received bad protocol version marker: %(marker)r"
1506
def __init__(self, marker):
1507
self.marker = marker
1510
class UnknownSmartMethod(InternalBzrError):
1512
_fmt = "The server does not recognise the '%(verb)s' request."
1514
def __init__(self, verb):
1518
class SmartMessageHandlerError(InternalBzrError):
1520
_fmt = "The message handler raised an exception: %(exc_value)s."
1522
def __init__(self, exc_info):
1523
self.exc_type, self.exc_value, self.tb = exc_info
1526
# A set of semi-meaningful errors which can be thrown
1527
class TransportNotPossible(TransportError):
1529
_fmt = "Transport operation not possible: %(msg)s %(orig_error)s"
1532
class ConnectionError(TransportError):
1534
_fmt = "Connection error: %(msg)s %(orig_error)s"
1537
class SocketConnectionError(ConnectionError):
1539
_fmt = "%(msg)s %(host)s%(port)s%(orig_error)s"
1541
def __init__(self, host, port=None, msg=None, orig_error=None):
1543
msg = 'Failed to connect to'
1544
if orig_error is None:
1547
orig_error = '; ' + str(orig_error)
1548
ConnectionError.__init__(self, msg=msg, orig_error=orig_error)
1553
self.port = ':%s' % port
1556
class ConnectionReset(TransportError):
1558
_fmt = "Connection closed: %(msg)s %(orig_error)s"
1561
class InvalidRange(TransportError):
1563
_fmt = "Invalid range access in %(path)s at %(offset)s: %(msg)s"
1565
def __init__(self, path, offset, msg=None):
1566
TransportError.__init__(self, msg)
1568
self.offset = offset
1571
class InvalidHttpResponse(TransportError):
1573
_fmt = "Invalid http response for %(path)s: %(msg)s"
1575
def __init__(self, path, msg, orig_error=None):
1577
TransportError.__init__(self, msg, orig_error=orig_error)
1580
class InvalidHttpRange(InvalidHttpResponse):
1582
_fmt = "Invalid http range %(range)r for %(path)s: %(msg)s"
1584
def __init__(self, path, range, msg):
1586
InvalidHttpResponse.__init__(self, path, msg)
1589
class InvalidHttpContentType(InvalidHttpResponse):
1591
_fmt = 'Invalid http Content-type "%(ctype)s" for %(path)s: %(msg)s'
1593
def __init__(self, path, ctype, msg):
1595
InvalidHttpResponse.__init__(self, path, msg)
1598
class RedirectRequested(TransportError):
1600
_fmt = '%(source)s is%(permanently)s redirected to %(target)s'
1602
def __init__(self, source, target, is_permanent=False, qual_proto=None):
1603
self.source = source
1604
self.target = target
1606
self.permanently = ' permanently'
1608
self.permanently = ''
1609
self._qualified_proto = qual_proto
1610
TransportError.__init__(self)
1612
def _requalify_url(self, url):
1613
"""Restore the qualified proto in front of the url"""
1614
# When this exception is raised, source and target are in
1615
# user readable format. But some transports may use a
1616
# different proto (http+urllib:// will present http:// to
1617
# the user. If a qualified proto is specified, the code
1618
# trapping the exception can get the qualified urls to
1619
# properly handle the redirection themself (creating a
1620
# new transport object from the target url for example).
1621
# But checking that the scheme of the original and
1622
# redirected urls are the same can be tricky. (see the
1623
# FIXME in BzrDir.open_from_transport for the unique use
1625
if self._qualified_proto is None:
1628
# The TODO related to NotBranchError mention that doing
1629
# that kind of manipulation on the urls may not be the
1630
# exception object job. On the other hand, this object is
1631
# the interface between the code and the user so
1632
# presenting the urls in different ways is indeed its
1635
proto, netloc, path, query, fragment = urlparse.urlsplit(url)
1636
return urlparse.urlunsplit((self._qualified_proto, netloc, path,
1639
def get_source_url(self):
1640
return self._requalify_url(self.source)
1642
def get_target_url(self):
1643
return self._requalify_url(self.target)
1646
class TooManyRedirections(TransportError):
1648
_fmt = "Too many redirections"
1651
class ConflictsInTree(BzrError):
1653
_fmt = "Working tree has conflicts."
1656
class ParseConfigError(BzrError):
1658
def __init__(self, errors, filename):
1659
if filename is None:
1661
message = "Error(s) parsing config file %s:\n%s" % \
1662
(filename, ('\n'.join(e.message for e in errors)))
1663
BzrError.__init__(self, message)
1666
class NoEmailInUsername(BzrError):
1668
_fmt = "%(username)r does not seem to contain a reasonable email address"
1670
def __init__(self, username):
1671
BzrError.__init__(self)
1672
self.username = username
1675
class SigningFailed(BzrError):
1677
_fmt = 'Failed to gpg sign data with command "%(command_line)s"'
1679
def __init__(self, command_line):
1680
BzrError.__init__(self, command_line=command_line)
1683
class WorkingTreeNotRevision(BzrError):
1685
_fmt = ("The working tree for %(basedir)s has changed since"
1686
" the last commit, but weave merge requires that it be"
1689
def __init__(self, tree):
1690
BzrError.__init__(self, basedir=tree.basedir)
1693
class CantReprocessAndShowBase(BzrError):
1695
_fmt = ("Can't reprocess and show base, because reprocessing obscures "
1696
"the relationship of conflicting lines to the base")
1699
class GraphCycleError(BzrError):
1701
_fmt = "Cycle in graph %(graph)r"
1703
def __init__(self, graph):
1704
BzrError.__init__(self)
1708
class WritingCompleted(InternalBzrError):
1710
_fmt = ("The MediumRequest '%(request)s' has already had finish_writing "
1711
"called upon it - accept bytes may not be called anymore.")
1713
def __init__(self, request):
1714
self.request = request
1717
class WritingNotComplete(InternalBzrError):
1719
_fmt = ("The MediumRequest '%(request)s' has not has finish_writing "
1720
"called upon it - until the write phase is complete no "
1721
"data may be read.")
1723
def __init__(self, request):
1724
self.request = request
1727
class NotConflicted(BzrError):
1729
_fmt = "File %(filename)s is not conflicted."
1731
def __init__(self, filename):
1732
BzrError.__init__(self)
1733
self.filename = filename
1736
class MediumNotConnected(InternalBzrError):
1738
_fmt = """The medium '%(medium)s' is not connected."""
1740
def __init__(self, medium):
1741
self.medium = medium
1744
class MustUseDecorated(Exception):
1746
_fmt = "A decorating function has requested its original command be used."
1749
class NoBundleFound(BzrError):
1751
_fmt = 'No bundle was found in "%(filename)s".'
1753
def __init__(self, filename):
1754
BzrError.__init__(self)
1755
self.filename = filename
1758
class BundleNotSupported(BzrError):
1760
_fmt = "Unable to handle bundle version %(version)s: %(msg)s"
1762
def __init__(self, version, msg):
1763
BzrError.__init__(self)
1764
self.version = version
1768
class MissingText(BzrError):
1770
_fmt = ("Branch %(base)s is missing revision"
1771
" %(text_revision)s of %(file_id)s")
1773
def __init__(self, branch, text_revision, file_id):
1774
BzrError.__init__(self)
1775
self.branch = branch
1776
self.base = branch.base
1777
self.text_revision = text_revision
1778
self.file_id = file_id
1781
class DuplicateFileId(BzrError):
1783
_fmt = "File id {%(file_id)s} already exists in inventory as %(entry)s"
1785
def __init__(self, file_id, entry):
1786
BzrError.__init__(self)
1787
self.file_id = file_id
1791
class DuplicateKey(BzrError):
1793
_fmt = "Key %(key)s is already present in map"
1796
class DuplicateHelpPrefix(BzrError):
1798
_fmt = "The prefix %(prefix)s is in the help search path twice."
1800
def __init__(self, prefix):
1801
self.prefix = prefix
1804
class MalformedTransform(BzrError):
1806
_fmt = "Tree transform is malformed %(conflicts)r"
1809
class NoFinalPath(BzrError):
1811
_fmt = ("No final name for trans_id %(trans_id)r\n"
1812
"file-id: %(file_id)r\n"
1813
"root trans-id: %(root_trans_id)r\n")
1815
def __init__(self, trans_id, transform):
1816
self.trans_id = trans_id
1817
self.file_id = transform.final_file_id(trans_id)
1818
self.root_trans_id = transform.root
1821
class BzrBadParameter(InternalBzrError):
1823
_fmt = "Bad parameter: %(param)r"
1825
# This exception should never be thrown, but it is a base class for all
1826
# parameter-to-function errors.
1828
def __init__(self, param):
1829
BzrError.__init__(self)
1833
class BzrBadParameterNotUnicode(BzrBadParameter):
1835
_fmt = "Parameter %(param)s is neither unicode nor utf8."
1838
class ReusingTransform(BzrError):
1840
_fmt = "Attempt to reuse a transform that has already been applied."
1843
class CantMoveRoot(BzrError):
1845
_fmt = "Moving the root directory is not supported at this time"
1848
class BzrMoveFailedError(BzrError):
1850
_fmt = "Could not move %(from_path)s%(operator)s %(to_path)s%(extra)s"
1852
def __init__(self, from_path='', to_path='', extra=None):
1853
BzrError.__init__(self)
1855
self.extra = ': ' + str(extra)
1859
has_from = len(from_path) > 0
1860
has_to = len(to_path) > 0
1862
self.from_path = osutils.splitpath(from_path)[-1]
1867
self.to_path = osutils.splitpath(to_path)[-1]
1872
if has_from and has_to:
1873
self.operator = " =>"
1875
self.from_path = "from " + from_path
1877
self.operator = "to"
1879
self.operator = "file"
1882
class BzrRenameFailedError(BzrMoveFailedError):
1884
_fmt = "Could not rename %(from_path)s%(operator)s %(to_path)s%(extra)s"
1886
def __init__(self, from_path, to_path, extra=None):
1887
BzrMoveFailedError.__init__(self, from_path, to_path, extra)
1889
class BzrRemoveChangedFilesError(BzrError):
1890
"""Used when user is trying to remove changed files."""
1892
_fmt = ("Can't safely remove modified or unknown files:\n"
1893
"%(changes_as_text)s"
1894
"Use --keep to not delete them, or --force to delete them regardless.")
1896
def __init__(self, tree_delta):
1897
BzrError.__init__(self)
1898
self.changes_as_text = tree_delta.get_changes_as_text()
1899
#self.paths_as_string = '\n'.join(changed_files)
1900
#self.paths_as_string = '\n'.join([quotefn(p) for p in changed_files])
1903
class BzrBadParameterNotString(BzrBadParameter):
1905
_fmt = "Parameter %(param)s is not a string or unicode string."
1908
class BzrBadParameterMissing(BzrBadParameter):
1910
_fmt = "Parameter $(param)s is required but not present."
1913
class BzrBadParameterUnicode(BzrBadParameter):
1915
_fmt = ("Parameter %(param)s is unicode but"
1916
" only byte-strings are permitted.")
1919
class BzrBadParameterContainsNewline(BzrBadParameter):
1921
_fmt = "Parameter %(param)s contains a newline."
1924
class DependencyNotPresent(BzrError):
1926
_fmt = 'Unable to import library "%(library)s": %(error)s'
1928
def __init__(self, library, error):
1929
BzrError.__init__(self, library=library, error=error)
1932
class ParamikoNotPresent(DependencyNotPresent):
1934
_fmt = "Unable to import paramiko (required for sftp support): %(error)s"
1936
def __init__(self, error):
1937
DependencyNotPresent.__init__(self, 'paramiko', error)
1940
class PointlessMerge(BzrError):
1942
_fmt = "Nothing to merge."
1945
class UninitializableFormat(BzrError):
1947
_fmt = "Format %(format)s cannot be initialised by this version of bzr."
1949
def __init__(self, format):
1950
BzrError.__init__(self)
1951
self.format = format
1954
class BadConversionTarget(BzrError):
1956
_fmt = "Cannot convert to format %(format)s. %(problem)s"
1958
def __init__(self, problem, format):
1959
BzrError.__init__(self)
1960
self.problem = problem
1961
self.format = format
1964
class NoDiffFound(BzrError):
1966
_fmt = 'Could not find an appropriate Differ for file "%(path)s"'
1968
def __init__(self, path):
1969
BzrError.__init__(self, path)
1972
class ExecutableMissing(BzrError):
1974
_fmt = "%(exe_name)s could not be found on this machine"
1976
def __init__(self, exe_name):
1977
BzrError.__init__(self, exe_name=exe_name)
1980
class NoDiff(BzrError):
1982
_fmt = "Diff is not installed on this machine: %(msg)s"
1984
def __init__(self, msg):
1985
BzrError.__init__(self, msg=msg)
1988
class NoDiff3(BzrError):
1990
_fmt = "Diff3 is not installed on this machine."
1993
class ExistingContent(BzrError):
1994
# Added in bzrlib 0.92, used by VersionedFile.add_lines.
1996
_fmt = "The content being inserted is already present."
1999
class ExistingLimbo(BzrError):
2001
_fmt = """This tree contains left-over files from a failed operation.
2002
Please examine %(limbo_dir)s to see if it contains any files you wish to
2003
keep, and delete it when you are done."""
2005
def __init__(self, limbo_dir):
2006
BzrError.__init__(self)
2007
self.limbo_dir = limbo_dir
2010
class ExistingPendingDeletion(BzrError):
2012
_fmt = """This tree contains left-over files from a failed operation.
2013
Please examine %(pending_deletion)s to see if it contains any files you
2014
wish to keep, and delete it when you are done."""
2016
def __init__(self, pending_deletion):
2017
BzrError.__init__(self, pending_deletion=pending_deletion)
2020
class ImmortalLimbo(BzrError):
2022
_fmt = """Unable to delete transform temporary directory %(limbo_dir)s.
2023
Please examine %(limbo_dir)s to see if it contains any files you wish to
2024
keep, and delete it when you are done."""
2026
def __init__(self, limbo_dir):
2027
BzrError.__init__(self)
2028
self.limbo_dir = limbo_dir
2031
class ImmortalPendingDeletion(BzrError):
2033
_fmt = ("Unable to delete transform temporary directory "
2034
"%(pending_deletion)s. Please examine %(pending_deletion)s to see if it "
2035
"contains any files you wish to keep, and delete it when you are done.")
2037
def __init__(self, pending_deletion):
2038
BzrError.__init__(self, pending_deletion=pending_deletion)
2041
class OutOfDateTree(BzrError):
2043
_fmt = "Working tree is out of date, please run 'bzr update'."
2045
def __init__(self, tree):
2046
BzrError.__init__(self)
2050
class PublicBranchOutOfDate(BzrError):
2052
_fmt = 'Public branch "%(public_location)s" lacks revision '\
2055
def __init__(self, public_location, revstring):
2056
import bzrlib.urlutils as urlutils
2057
public_location = urlutils.unescape_for_display(public_location,
2059
BzrError.__init__(self, public_location=public_location,
2060
revstring=revstring)
2063
class MergeModifiedFormatError(BzrError):
2065
_fmt = "Error in merge modified format"
2068
class ConflictFormatError(BzrError):
2070
_fmt = "Format error in conflict listings"
2073
class CorruptDirstate(BzrError):
2075
_fmt = ("Inconsistency in dirstate file %(dirstate_path)s.\n"
2076
"Error: %(description)s")
2078
def __init__(self, dirstate_path, description):
2079
BzrError.__init__(self)
2080
self.dirstate_path = dirstate_path
2081
self.description = description
2084
class CorruptRepository(BzrError):
2086
_fmt = ("An error has been detected in the repository %(repo_path)s.\n"
2087
"Please run bzr reconcile on this repository.")
2089
def __init__(self, repo):
2090
BzrError.__init__(self)
2091
self.repo_path = repo.bzrdir.root_transport.base
2094
class InconsistentDelta(BzrError):
2095
"""Used when we get a delta that is not valid."""
2097
_fmt = ("An inconsistent delta was supplied involving %(path)r,"
2098
" %(file_id)r\nreason: %(reason)s")
2100
def __init__(self, path, file_id, reason):
2101
BzrError.__init__(self)
2103
self.file_id = file_id
2104
self.reason = reason
2107
class UpgradeRequired(BzrError):
2109
_fmt = "To use this feature you must upgrade your branch at %(path)s."
2111
def __init__(self, path):
2112
BzrError.__init__(self)
2116
class RepositoryUpgradeRequired(UpgradeRequired):
2118
_fmt = "To use this feature you must upgrade your repository at %(path)s."
2121
class LocalRequiresBoundBranch(BzrError):
2123
_fmt = "Cannot perform local-only commits on unbound branches."
2126
class MissingProgressBarFinish(BzrError):
2128
_fmt = "A nested progress bar was not 'finished' correctly."
2131
class InvalidProgressBarType(BzrError):
2133
_fmt = ("Environment variable BZR_PROGRESS_BAR='%(bar_type)s"
2134
" is not a supported type Select one of: %(valid_types)s")
2136
def __init__(self, bar_type, valid_types):
2137
BzrError.__init__(self, bar_type=bar_type, valid_types=valid_types)
2140
class UnsupportedOperation(BzrError):
2142
_fmt = ("The method %(mname)s is not supported on"
2143
" objects of type %(tname)s.")
2145
def __init__(self, method, method_self):
2146
self.method = method
2147
self.mname = method.__name__
2148
self.tname = type(method_self).__name__
2151
class CannotSetRevisionId(UnsupportedOperation):
2152
"""Raised when a commit is attempting to set a revision id but cant."""
2155
class NonAsciiRevisionId(UnsupportedOperation):
2156
"""Raised when a commit is attempting to set a non-ascii revision id
2161
class BinaryFile(BzrError):
2163
_fmt = "File is binary but should be text."
2166
class IllegalPath(BzrError):
2168
_fmt = "The path %(path)s is not permitted on this platform"
2170
def __init__(self, path):
2171
BzrError.__init__(self)
2175
class TestamentMismatch(BzrError):
2177
_fmt = """Testament did not match expected value.
2178
For revision_id {%(revision_id)s}, expected {%(expected)s}, measured
2181
def __init__(self, revision_id, expected, measured):
2182
self.revision_id = revision_id
2183
self.expected = expected
2184
self.measured = measured
2187
class NotABundle(BzrError):
2189
_fmt = "Not a bzr revision-bundle: %(text)r"
2191
def __init__(self, text):
2192
BzrError.__init__(self)
2196
class BadBundle(BzrError):
2198
_fmt = "Bad bzr revision-bundle: %(text)r"
2200
def __init__(self, text):
2201
BzrError.__init__(self)
2205
class MalformedHeader(BadBundle):
2207
_fmt = "Malformed bzr revision-bundle header: %(text)r"
2210
class MalformedPatches(BadBundle):
2212
_fmt = "Malformed patches in bzr revision-bundle: %(text)r"
2215
class MalformedFooter(BadBundle):
2217
_fmt = "Malformed footer in bzr revision-bundle: %(text)r"
2220
class UnsupportedEOLMarker(BadBundle):
2222
_fmt = "End of line marker was not \\n in bzr revision-bundle"
2225
# XXX: BadBundle's constructor assumes there's explanatory text,
2226
# but for this there is not
2227
BzrError.__init__(self)
2230
class IncompatibleBundleFormat(BzrError):
2232
_fmt = "Bundle format %(bundle_format)s is incompatible with %(other)s"
2234
def __init__(self, bundle_format, other):
2235
BzrError.__init__(self)
2236
self.bundle_format = bundle_format
2240
class BadInventoryFormat(BzrError):
2242
_fmt = "Root class for inventory serialization errors"
2245
class UnexpectedInventoryFormat(BadInventoryFormat):
2247
_fmt = "The inventory was not in the expected format:\n %(msg)s"
2249
def __init__(self, msg):
2250
BadInventoryFormat.__init__(self, msg=msg)
2253
class RootNotRich(BzrError):
2255
_fmt = """This operation requires rich root data storage"""
2258
class NoSmartMedium(InternalBzrError):
2260
_fmt = "The transport '%(transport)s' cannot tunnel the smart protocol."
2262
def __init__(self, transport):
2263
self.transport = transport
2266
class NoSmartServer(NotBranchError):
2268
_fmt = "No smart server available at %(url)s"
2270
@symbol_versioning.deprecated_method(symbol_versioning.one_four)
2271
def __init__(self, url):
2275
class UnknownSSH(BzrError):
2277
_fmt = "Unrecognised value for BZR_SSH environment variable: %(vendor)s"
2279
def __init__(self, vendor):
2280
BzrError.__init__(self)
2281
self.vendor = vendor
2284
class SSHVendorNotFound(BzrError):
2286
_fmt = ("Don't know how to handle SSH connections."
2287
" Please set BZR_SSH environment variable.")
2290
class GhostRevisionsHaveNoRevno(BzrError):
2291
"""When searching for revnos, if we encounter a ghost, we are stuck"""
2293
_fmt = ("Could not determine revno for {%(revision_id)s} because"
2294
" its ancestry shows a ghost at {%(ghost_revision_id)s}")
2296
def __init__(self, revision_id, ghost_revision_id):
2297
self.revision_id = revision_id
2298
self.ghost_revision_id = ghost_revision_id
2301
class GhostRevisionUnusableHere(BzrError):
2303
_fmt = "Ghost revision {%(revision_id)s} cannot be used here."
2305
def __init__(self, revision_id):
2306
BzrError.__init__(self)
2307
self.revision_id = revision_id
2310
class IllegalUseOfScopeReplacer(InternalBzrError):
2312
_fmt = ("ScopeReplacer object %(name)r was used incorrectly:"
2313
" %(msg)s%(extra)s")
2315
def __init__(self, name, msg, extra=None):
2316
BzrError.__init__(self)
2320
self.extra = ': ' + str(extra)
2325
class InvalidImportLine(InternalBzrError):
2327
_fmt = "Not a valid import statement: %(msg)\n%(text)s"
2329
def __init__(self, text, msg):
2330
BzrError.__init__(self)
2335
class ImportNameCollision(InternalBzrError):
2337
_fmt = ("Tried to import an object to the same name as"
2338
" an existing object. %(name)s")
2340
def __init__(self, name):
2341
BzrError.__init__(self)
2345
class NotAMergeDirective(BzrError):
2346
"""File starting with %(firstline)r is not a merge directive"""
2347
def __init__(self, firstline):
2348
BzrError.__init__(self, firstline=firstline)
2351
class NoMergeSource(BzrError):
2352
"""Raise if no merge source was specified for a merge directive"""
2354
_fmt = "A merge directive must provide either a bundle or a public"\
2358
class IllegalMergeDirectivePayload(BzrError):
2359
"""A merge directive contained something other than a patch or bundle"""
2361
_fmt = "Bad merge directive payload %(start)r"
2363
def __init__(self, start):
2368
class PatchVerificationFailed(BzrError):
2369
"""A patch from a merge directive could not be verified"""
2371
_fmt = "Preview patch does not match requested changes."
2374
class PatchMissing(BzrError):
2375
"""Raise a patch type was specified but no patch supplied"""
2377
_fmt = "Patch_type was %(patch_type)s, but no patch was supplied."
2379
def __init__(self, patch_type):
2380
BzrError.__init__(self)
2381
self.patch_type = patch_type
2384
class UnsupportedInventoryKind(BzrError):
2386
_fmt = """Unsupported entry kind %(kind)s"""
2388
def __init__(self, kind):
2392
class BadSubsumeSource(BzrError):
2394
_fmt = "Can't subsume %(other_tree)s into %(tree)s. %(reason)s"
2396
def __init__(self, tree, other_tree, reason):
2398
self.other_tree = other_tree
2399
self.reason = reason
2402
class SubsumeTargetNeedsUpgrade(BzrError):
2404
_fmt = """Subsume target %(other_tree)s needs to be upgraded."""
2406
def __init__(self, other_tree):
2407
self.other_tree = other_tree
2410
class BadReferenceTarget(InternalBzrError):
2412
_fmt = "Can't add reference to %(other_tree)s into %(tree)s." \
2415
def __init__(self, tree, other_tree, reason):
2417
self.other_tree = other_tree
2418
self.reason = reason
2421
class NoSuchTag(BzrError):
2423
_fmt = "No such tag: %(tag_name)s"
2425
def __init__(self, tag_name):
2426
self.tag_name = tag_name
2429
class TagsNotSupported(BzrError):
2431
_fmt = ("Tags not supported by %(branch)s;"
2432
" you may be able to use bzr upgrade --dirstate-tags.")
2434
def __init__(self, branch):
2435
self.branch = branch
2438
class TagAlreadyExists(BzrError):
2440
_fmt = "Tag %(tag_name)s already exists."
2442
def __init__(self, tag_name):
2443
self.tag_name = tag_name
2446
class MalformedBugIdentifier(BzrError):
2448
_fmt = "Did not understand bug identifier %(bug_id)s: %(reason)s"
2450
def __init__(self, bug_id, reason):
2451
self.bug_id = bug_id
2452
self.reason = reason
2455
class InvalidBugTrackerURL(BzrError):
2457
_fmt = ("The URL for bug tracker \"%(abbreviation)s\" doesn't "
2458
"contain {id}: %(url)s")
2460
def __init__(self, abbreviation, url):
2461
self.abbreviation = abbreviation
2465
class UnknownBugTrackerAbbreviation(BzrError):
2467
_fmt = ("Cannot find registered bug tracker called %(abbreviation)s "
2470
def __init__(self, abbreviation, branch):
2471
self.abbreviation = abbreviation
2472
self.branch = branch
2475
class UnexpectedSmartServerResponse(BzrError):
2477
_fmt = "Could not understand response from smart server: %(response_tuple)r"
2479
def __init__(self, response_tuple):
2480
self.response_tuple = response_tuple
2483
class ErrorFromSmartServer(BzrError):
2485
_fmt = "Error received from smart server: %(error_tuple)r"
2487
internal_error = True
2489
def __init__(self, error_tuple):
2490
self.error_tuple = error_tuple
2492
self.error_verb = error_tuple[0]
2494
self.error_verb = None
2495
self.error_args = error_tuple[1:]
2498
class ContainerError(BzrError):
2499
"""Base class of container errors."""
2502
class UnknownContainerFormatError(ContainerError):
2504
_fmt = "Unrecognised container format: %(container_format)r"
2506
def __init__(self, container_format):
2507
self.container_format = container_format
2510
class UnexpectedEndOfContainerError(ContainerError):
2512
_fmt = "Unexpected end of container stream"
2515
class UnknownRecordTypeError(ContainerError):
2517
_fmt = "Unknown record type: %(record_type)r"
2519
def __init__(self, record_type):
2520
self.record_type = record_type
2523
class InvalidRecordError(ContainerError):
2525
_fmt = "Invalid record: %(reason)s"
2527
def __init__(self, reason):
2528
self.reason = reason
2531
class ContainerHasExcessDataError(ContainerError):
2533
_fmt = "Container has data after end marker: %(excess)r"
2535
def __init__(self, excess):
2536
self.excess = excess
2539
class DuplicateRecordNameError(ContainerError):
2541
_fmt = "Container has multiple records with the same name: %(name)s"
2543
def __init__(self, name):
2547
class NoDestinationAddress(InternalBzrError):
2549
_fmt = "Message does not have a destination address."
2552
class RepositoryDataStreamError(BzrError):
2554
_fmt = "Corrupt or incompatible data stream: %(reason)s"
2556
def __init__(self, reason):
2557
self.reason = reason
2560
class SMTPError(BzrError):
2562
_fmt = "SMTP error: %(error)s"
2564
def __init__(self, error):
2568
class NoMessageSupplied(BzrError):
2570
_fmt = "No message supplied."
2573
class NoMailAddressSpecified(BzrError):
2575
_fmt = "No mail-to address specified."
2578
class UnknownMailClient(BzrError):
2580
_fmt = "Unknown mail client: %(mail_client)s"
2582
def __init__(self, mail_client):
2583
BzrError.__init__(self, mail_client=mail_client)
2586
class MailClientNotFound(BzrError):
2588
_fmt = "Unable to find mail client with the following names:"\
2589
" %(mail_command_list_string)s"
2591
def __init__(self, mail_command_list):
2592
mail_command_list_string = ', '.join(mail_command_list)
2593
BzrError.__init__(self, mail_command_list=mail_command_list,
2594
mail_command_list_string=mail_command_list_string)
2596
class SMTPConnectionRefused(SMTPError):
2598
_fmt = "SMTP connection to %(host)s refused"
2600
def __init__(self, error, host):
2605
class DefaultSMTPConnectionRefused(SMTPConnectionRefused):
2607
_fmt = "Please specify smtp_server. No server at default %(host)s."
2610
class BzrDirError(BzrError):
2612
def __init__(self, bzrdir):
2613
import bzrlib.urlutils as urlutils
2614
display_url = urlutils.unescape_for_display(bzrdir.root_transport.base,
2616
BzrError.__init__(self, bzrdir=bzrdir, display_url=display_url)
2619
class UnsyncedBranches(BzrDirError):
2621
_fmt = ("'%(display_url)s' is not in sync with %(target_url)s. See"
2622
" bzr help sync-for-reconfigure.")
2624
def __init__(self, bzrdir, target_branch):
2625
BzrDirError.__init__(self, bzrdir)
2626
import bzrlib.urlutils as urlutils
2627
self.target_url = urlutils.unescape_for_display(target_branch.base,
2631
class AlreadyBranch(BzrDirError):
2633
_fmt = "'%(display_url)s' is already a branch."
2636
class AlreadyTree(BzrDirError):
2638
_fmt = "'%(display_url)s' is already a tree."
2641
class AlreadyCheckout(BzrDirError):
2643
_fmt = "'%(display_url)s' is already a checkout."
2646
class AlreadyLightweightCheckout(BzrDirError):
2648
_fmt = "'%(display_url)s' is already a lightweight checkout."
2651
class AlreadyUsingShared(BzrDirError):
2653
_fmt = "'%(display_url)s' is already using a shared repository."
2656
class AlreadyStandalone(BzrDirError):
2658
_fmt = "'%(display_url)s' is already standalone."
2661
class ReconfigurationNotSupported(BzrDirError):
2663
_fmt = "Requested reconfiguration of '%(display_url)s' is not supported."
2666
class NoBindLocation(BzrDirError):
2668
_fmt = "No location could be found to bind to at %(display_url)s."
2671
class UncommittedChanges(BzrError):
2673
_fmt = 'Working tree "%(display_url)s" has uncommitted changes.'
2675
def __init__(self, tree):
2676
import bzrlib.urlutils as urlutils
2677
display_url = urlutils.unescape_for_display(
2678
tree.bzrdir.root_transport.base, 'ascii')
2679
BzrError.__init__(self, tree=tree, display_url=display_url)
2682
class MissingTemplateVariable(BzrError):
2684
_fmt = 'Variable {%(name)s} is not available.'
2686
def __init__(self, name):
2690
class NoTemplate(BzrError):
2692
_fmt = 'No template specified.'
2695
class UnableCreateSymlink(BzrError):
2697
_fmt = 'Unable to create symlink %(path_str)son this platform'
2699
def __init__(self, path=None):
2703
path_str = repr(str(path))
2704
except UnicodeEncodeError:
2705
path_str = repr(path)
2707
self.path_str = path_str
2710
class UnsupportedTimezoneFormat(BzrError):
2712
_fmt = ('Unsupported timezone format "%(timezone)s", '
2713
'options are "utc", "original", "local".')
2715
def __init__(self, timezone):
2716
self.timezone = timezone
2719
class CommandAvailableInPlugin(StandardError):
2721
internal_error = False
2723
def __init__(self, cmd_name, plugin_metadata, provider):
2725
self.plugin_metadata = plugin_metadata
2726
self.cmd_name = cmd_name
2727
self.provider = provider
2731
_fmt = ('"%s" is not a standard bzr command. \n'
2732
'However, the following official plugin provides this command: %s\n'
2733
'You can install it by going to: %s'
2734
% (self.cmd_name, self.plugin_metadata['name'],
2735
self.plugin_metadata['url']))
2740
class NoPluginAvailable(BzrError):
2744
class NotATerminal(BzrError):
2746
_fmt = 'Unable to ask for a password without real terminal.'
2749
class UnableEncodePath(BzrError):
2751
_fmt = ('Unable to encode %(kind)s path %(path)r in '
2752
'user encoding %(user_encoding)s')
2754
def __init__(self, path, kind):
2757
self.user_encoding = osutils.get_user_encoding()
2760
class NoSuchAlias(BzrError):
2762
_fmt = ('The alias "%(alias_name)s" does not exist.')
2764
def __init__(self, alias_name):
2765
BzrError.__init__(self, alias_name=alias_name)
2768
class DirectoryLookupFailure(BzrError):
2769
"""Base type for lookup errors."""
2774
class InvalidLocationAlias(DirectoryLookupFailure):
2776
_fmt = '"%(alias_name)s" is not a valid location alias.'
2778
def __init__(self, alias_name):
2779
DirectoryLookupFailure.__init__(self, alias_name=alias_name)
2782
class UnsetLocationAlias(DirectoryLookupFailure):
2784
_fmt = 'No %(alias_name)s location assigned.'
2786
def __init__(self, alias_name):
2787
DirectoryLookupFailure.__init__(self, alias_name=alias_name[1:])
2790
class CannotBindAddress(BzrError):
2792
_fmt = 'Cannot bind address "%(host)s:%(port)i": %(orig_error)s.'
2794
def __init__(self, host, port, orig_error):
2795
BzrError.__init__(self, host=host, port=port,
2796
orig_error=orig_error[1])
2799
class UnknownRules(BzrError):
2801
_fmt = ('Unknown rules detected: %(unknowns_str)s.')
2803
def __init__(self, unknowns):
2804
BzrError.__init__(self, unknowns_str=", ".join(unknowns))
2807
class HookFailed(BzrError):
2808
"""Raised when a pre_change_branch_tip hook function fails anything other
2809
than TipChangeRejected.
2812
_fmt = ("Hook '%(hook_name)s' during %(hook_stage)s failed:\n"
2813
"%(traceback_text)s%(exc_value)s")
2815
def __init__(self, hook_stage, hook_name, exc_info):
2817
self.hook_stage = hook_stage
2818
self.hook_name = hook_name
2819
self.exc_info = exc_info
2820
self.exc_type = exc_info[0]
2821
self.exc_value = exc_info[1]
2822
self.exc_tb = exc_info[2]
2823
self.traceback_text = ''.join(traceback.format_tb(self.exc_tb))
2826
class TipChangeRejected(BzrError):
2827
"""A pre_change_branch_tip hook function may raise this to cleanly and
2828
explicitly abort a change to a branch tip.
2831
_fmt = u"Tip change rejected: %(msg)s"
2833
def __init__(self, msg):