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; 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.
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.
128
if isinstance(s, unicode):
129
return s.encode('utf8')
132
def _get_format_string(self):
133
"""Return format string for this exception or None"""
134
fmt = getattr(self, '_fmt', None)
137
fmt = getattr(self, '__doc__', None)
139
symbol_versioning.warn("%s uses its docstring as a format, "
140
"it should use _fmt instead" % self.__class__.__name__,
143
return 'Unprintable exception %s: dict=%r, fmt=%r' \
144
% (self.__class__.__name__,
146
getattr(self, '_fmt', None),
149
def __eq__(self, other):
150
if self.__class__ != other.__class__:
151
return NotImplemented
152
return self.__dict__ == other.__dict__
155
class InternalBzrError(BzrError):
156
"""Base class for errors that are internal in nature.
158
This is a convenience class for errors that are internal. The
159
internal_error attribute can still be altered in subclasses, if needed.
160
Using this class is simply an easy way to get internal errors.
163
internal_error = True
166
class BzrNewError(BzrError):
167
"""Deprecated error base class."""
168
# base classes should override the docstring with their human-
169
# readable explanation
171
def __init__(self, *args, **kwds):
172
# XXX: Use the underlying BzrError to always generate the args
173
# attribute if it doesn't exist. We can't use super here, because
174
# exceptions are old-style classes in python2.4 (but new in 2.5).
176
symbol_versioning.warn('BzrNewError was deprecated in bzr 0.13; '
177
'please convert %s to use BzrError instead'
178
% self.__class__.__name__,
181
BzrError.__init__(self, *args)
182
for key, value in kwds.items():
183
setattr(self, key, value)
187
# __str__() should always return a 'str' object
188
# never a 'unicode' object.
189
s = self.__doc__ % self.__dict__
190
if isinstance(s, unicode):
191
return s.encode('utf8')
193
except (TypeError, NameError, ValueError, KeyError), e:
194
return 'Unprintable exception %s(%r): %r' \
195
% (self.__class__.__name__,
199
class AlreadyBuilding(BzrError):
201
_fmt = "The tree builder is already building a tree."
204
class BranchError(BzrError):
205
"""Base class for concrete 'errors about a branch'."""
207
def __init__(self, branch):
208
BzrError.__init__(self, branch=branch)
211
class BzrCheckError(InternalBzrError):
213
_fmt = "Internal check failed: %(message)s"
215
def __init__(self, message):
216
BzrError.__init__(self)
217
self.message = message
220
class DisabledMethod(InternalBzrError):
222
_fmt = "The smart server method '%(class_name)s' is disabled."
224
def __init__(self, class_name):
225
BzrError.__init__(self)
226
self.class_name = class_name
229
class IncompatibleAPI(BzrError):
231
_fmt = 'The API for "%(api)s" is not compatible with "%(wanted)s". '\
232
'It supports versions "%(minimum)s" to "%(current)s".'
234
def __init__(self, api, wanted, minimum, current):
237
self.minimum = minimum
238
self.current = current
241
class InProcessTransport(BzrError):
243
_fmt = "The transport '%(transport)s' is only accessible within this " \
246
def __init__(self, transport):
247
self.transport = transport
250
class InvalidEntryName(InternalBzrError):
252
_fmt = "Invalid entry name: %(name)s"
254
def __init__(self, name):
255
BzrError.__init__(self)
259
class InvalidRevisionNumber(BzrError):
261
_fmt = "Invalid revision number %(revno)s"
263
def __init__(self, revno):
264
BzrError.__init__(self)
268
class InvalidRevisionId(BzrError):
270
_fmt = "Invalid revision-id {%(revision_id)s} in %(branch)s"
272
def __init__(self, revision_id, branch):
273
# branch can be any string or object with __str__ defined
274
BzrError.__init__(self)
275
self.revision_id = revision_id
279
class ReservedId(BzrError):
281
_fmt = "Reserved revision-id {%(revision_id)s}"
283
def __init__(self, revision_id):
284
self.revision_id = revision_id
287
class RootMissing(InternalBzrError):
289
_fmt = ("The root entry of a tree must be the first entry supplied to "
290
"record_entry_contents.")
293
class NoPublicBranch(BzrError):
295
_fmt = 'There is no public branch set for "%(branch_url)s".'
297
def __init__(self, branch):
298
import bzrlib.urlutils as urlutils
299
public_location = urlutils.unescape_for_display(branch.base, 'ascii')
300
BzrError.__init__(self, branch_url=public_location)
303
class NoHelpTopic(BzrError):
305
_fmt = ("No help could be found for '%(topic)s'. "
306
"Please use 'bzr help topics' to obtain a list of topics.")
308
def __init__(self, topic):
312
class NoSuchId(BzrError):
314
_fmt = 'The file id "%(file_id)s" is not present in the tree %(tree)s.'
316
def __init__(self, tree, file_id):
317
BzrError.__init__(self)
318
self.file_id = file_id
322
class NoSuchIdInRepository(NoSuchId):
324
_fmt = ('The file id "%(file_id)s" is not present in the repository'
327
def __init__(self, repository, file_id):
328
BzrError.__init__(self, repository=repository, file_id=file_id)
331
class NotStacked(BranchError):
333
_fmt = "The branch '%(branch)s' is not stacked."
336
class InventoryModified(InternalBzrError):
338
_fmt = ("The current inventory for the tree %(tree)r has been modified,"
339
" so a clean inventory cannot be read without data loss.")
341
def __init__(self, tree):
345
class NoWorkingTree(BzrError):
347
_fmt = 'No WorkingTree exists for "%(base)s".'
349
def __init__(self, base):
350
BzrError.__init__(self)
354
class NotBuilding(BzrError):
356
_fmt = "Not currently building a tree."
359
class NotLocalUrl(BzrError):
361
_fmt = "%(url)s is not a local path."
363
def __init__(self, url):
367
class WorkingTreeAlreadyPopulated(InternalBzrError):
369
_fmt = 'Working tree already populated in "%(base)s"'
371
def __init__(self, base):
375
class BzrCommandError(BzrError):
376
"""Error from user command"""
378
# Error from malformed user command; please avoid raising this as a
379
# generic exception not caused by user input.
381
# I think it's a waste of effort to differentiate between errors that
382
# are not intended to be caught anyway. UI code need not subclass
383
# BzrCommandError, and non-UI code should not throw a subclass of
384
# BzrCommandError. ADHB 20051211
387
class NotWriteLocked(BzrError):
389
_fmt = """%(not_locked)r is not write locked but needs to be."""
391
def __init__(self, not_locked):
392
self.not_locked = not_locked
395
class BzrOptionError(BzrCommandError):
397
_fmt = "Error in command line options"
400
class BadIndexFormatSignature(BzrError):
402
_fmt = "%(value)s is not an index of type %(_type)s."
404
def __init__(self, value, _type):
405
BzrError.__init__(self)
410
class BadIndexData(BzrError):
412
_fmt = "Error in data for index %(value)s."
414
def __init__(self, value):
415
BzrError.__init__(self)
419
class BadIndexDuplicateKey(BzrError):
421
_fmt = "The key '%(key)s' is already in index '%(index)s'."
423
def __init__(self, key, index):
424
BzrError.__init__(self)
429
class BadIndexKey(BzrError):
431
_fmt = "The key '%(key)s' is not a valid key."
433
def __init__(self, key):
434
BzrError.__init__(self)
438
class BadIndexOptions(BzrError):
440
_fmt = "Could not parse options for index %(value)s."
442
def __init__(self, value):
443
BzrError.__init__(self)
447
class BadIndexValue(BzrError):
449
_fmt = "The value '%(value)s' is not a valid value."
451
def __init__(self, value):
452
BzrError.__init__(self)
456
class BadOptionValue(BzrError):
458
_fmt = """Bad value "%(value)s" for option "%(name)s"."""
460
def __init__(self, name, value):
461
BzrError.__init__(self, name=name, value=value)
464
class StrictCommitFailed(BzrError):
466
_fmt = "Commit refused because there are unknown files in the tree"
469
# XXX: Should be unified with TransportError; they seem to represent the
471
# RBC 20060929: I think that unifiying with TransportError would be a mistake
472
# - this is finer than a TransportError - and more useful as such. It
473
# differentiates between 'transport has failed' and 'operation on a transport
475
class PathError(BzrError):
477
_fmt = "Generic path error: %(path)r%(extra)s)"
479
def __init__(self, path, extra=None):
480
BzrError.__init__(self)
483
self.extra = ': ' + str(extra)
488
class NoSuchFile(PathError):
490
_fmt = "No such file: %(path)r%(extra)s"
493
class FileExists(PathError):
495
_fmt = "File exists: %(path)r%(extra)s"
498
class RenameFailedFilesExist(BzrError):
499
"""Used when renaming and both source and dest exist."""
501
_fmt = ("Could not rename %(source)s => %(dest)s because both files exist."
502
" (Use --after to tell bzr about a rename that has already"
503
" happened)%(extra)s")
505
def __init__(self, source, dest, extra=None):
506
BzrError.__init__(self)
507
self.source = str(source)
508
self.dest = str(dest)
510
self.extra = ' ' + str(extra)
515
class NotADirectory(PathError):
517
_fmt = '"%(path)s" is not a directory %(extra)s'
520
class NotInWorkingDirectory(PathError):
522
_fmt = '"%(path)s" is not in the working directory %(extra)s'
525
class DirectoryNotEmpty(PathError):
527
_fmt = 'Directory not empty: "%(path)s"%(extra)s'
530
class HardLinkNotSupported(PathError):
532
_fmt = 'Hard-linking "%(path)s" is not supported'
535
class ReadingCompleted(InternalBzrError):
537
_fmt = ("The MediumRequest '%(request)s' has already had finish_reading "
538
"called upon it - the request has been completed and no more "
541
def __init__(self, request):
542
self.request = request
545
class ResourceBusy(PathError):
547
_fmt = 'Device or resource busy: "%(path)s"%(extra)s'
550
class PermissionDenied(PathError):
552
_fmt = 'Permission denied: "%(path)s"%(extra)s'
555
class InvalidURL(PathError):
557
_fmt = 'Invalid url supplied to transport: "%(path)s"%(extra)s'
560
class InvalidURLJoin(PathError):
562
_fmt = "Invalid URL join request: %(reason)s: %(base)r + %(join_args)r"
564
def __init__(self, reason, base, join_args):
567
self.join_args = join_args
568
PathError.__init__(self, base, reason)
571
class InvalidRebaseURLs(PathError):
573
_fmt = "URLs differ by more than path: %(from_)r and %(to)r"
575
def __init__(self, from_, to):
578
PathError.__init__(self, from_, 'URLs differ by more than path.')
581
class UnavailableRepresentation(InternalBzrError):
583
_fmt = ("The encoding '%(wanted)s' is not available for key %(key)s which "
584
"is encoded as '%(native)s'.")
586
def __init__(self, key, wanted, native):
587
InternalBzrError.__init__(self)
593
class UnknownHook(BzrError):
595
_fmt = "The %(type)s hook '%(hook)s' is unknown in this version of bzrlib."
597
def __init__(self, hook_type, hook_name):
598
BzrError.__init__(self)
599
self.type = hook_type
600
self.hook = hook_name
603
class UnsupportedProtocol(PathError):
605
_fmt = 'Unsupported protocol for url "%(path)s"%(extra)s'
607
def __init__(self, url, extra):
608
PathError.__init__(self, url, extra=extra)
611
class UnstackableBranchFormat(BzrError):
613
_fmt = ("The branch '%(url)s'(%(format)s) is not a stackable format. "
614
"You will need to upgrade the branch to permit branch stacking.")
616
def __init__(self, format, url):
617
BzrError.__init__(self)
622
class UnstackableRepositoryFormat(BzrError):
624
_fmt = ("The repository '%(url)s'(%(format)s) is not a stackable format. "
625
"You will need to upgrade the repository to permit branch stacking.")
627
def __init__(self, format, url):
628
BzrError.__init__(self)
633
class ReadError(PathError):
635
_fmt = """Error reading from %(path)r."""
638
class ShortReadvError(PathError):
640
_fmt = ('readv() read %(actual)s bytes rather than %(length)s bytes'
641
' at %(offset)s for "%(path)s"%(extra)s')
643
internal_error = True
645
def __init__(self, path, offset, length, actual, extra=None):
646
PathError.__init__(self, path, extra=extra)
652
class PathNotChild(PathError):
654
_fmt = 'Path "%(path)s" is not a child of path "%(base)s"%(extra)s'
656
internal_error = True
658
def __init__(self, path, base, extra=None):
659
BzrError.__init__(self)
663
self.extra = ': ' + str(extra)
668
class InvalidNormalization(PathError):
670
_fmt = 'Path "%(path)s" is not unicode normalized'
673
# TODO: This is given a URL; we try to unescape it but doing that from inside
674
# the exception object is a bit undesirable.
675
# TODO: Probably this behavior of should be a common superclass
676
class NotBranchError(PathError):
678
_fmt = 'Not a branch: "%(path)s".'
680
def __init__(self, path):
681
import bzrlib.urlutils as urlutils
682
self.path = urlutils.unescape_for_display(path, 'ascii')
685
class NoSubmitBranch(PathError):
687
_fmt = 'No submit branch available for branch "%(path)s"'
689
def __init__(self, branch):
690
import bzrlib.urlutils as urlutils
691
self.path = urlutils.unescape_for_display(branch.base, 'ascii')
694
class AlreadyBranchError(PathError):
696
_fmt = 'Already a branch: "%(path)s".'
699
class BranchExistsWithoutWorkingTree(PathError):
701
_fmt = 'Directory contains a branch, but no working tree \
702
(use bzr checkout if you wish to build a working tree): "%(path)s"'
705
class AtomicFileAlreadyClosed(PathError):
707
_fmt = ('"%(function)s" called on an AtomicFile after it was closed:'
710
def __init__(self, path, function):
711
PathError.__init__(self, path=path, extra=None)
712
self.function = function
715
class InaccessibleParent(PathError):
717
_fmt = ('Parent not accessible given base "%(base)s" and'
718
' relative path "%(path)s"')
720
def __init__(self, path, base):
721
PathError.__init__(self, path)
725
class NoRepositoryPresent(BzrError):
727
_fmt = 'No repository present: "%(path)s"'
728
def __init__(self, bzrdir):
729
BzrError.__init__(self)
730
self.path = bzrdir.transport.clone('..').base
733
class FileInWrongBranch(BzrError):
735
_fmt = 'File "%(path)s" is not in branch %(branch_base)s.'
737
def __init__(self, branch, path):
738
BzrError.__init__(self)
740
self.branch_base = branch.base
744
class UnsupportedFormatError(BzrError):
746
_fmt = "Unsupported branch format: %(format)s\nPlease run 'bzr upgrade'"
749
class UnknownFormatError(BzrError):
751
_fmt = "Unknown %(kind)s format: %(format)r"
753
def __init__(self, format, kind='branch'):
758
class IncompatibleFormat(BzrError):
760
_fmt = "Format %(format)s is not compatible with .bzr version %(bzrdir)s."
762
def __init__(self, format, bzrdir_format):
763
BzrError.__init__(self)
765
self.bzrdir = bzrdir_format
768
class IncompatibleRepositories(BzrError):
770
_fmt = "Repository %(target)s is not compatible with repository"\
773
def __init__(self, source, target):
774
BzrError.__init__(self, target=target, source=source)
777
class IncompatibleRevision(BzrError):
779
_fmt = "Revision is not compatible with %(repo_format)s"
781
def __init__(self, repo_format):
782
BzrError.__init__(self)
783
self.repo_format = repo_format
786
class AlreadyVersionedError(BzrError):
787
"""Used when a path is expected not to be versioned, but it is."""
789
_fmt = "%(context_info)s%(path)s is already versioned."
791
def __init__(self, path, context_info=None):
792
"""Construct a new AlreadyVersionedError.
794
:param path: This is the path which is versioned,
795
which should be in a user friendly form.
796
:param context_info: If given, this is information about the context,
797
which could explain why this is expected to not be versioned.
799
BzrError.__init__(self)
801
if context_info is None:
802
self.context_info = ''
804
self.context_info = context_info + ". "
807
class NotVersionedError(BzrError):
808
"""Used when a path is expected to be versioned, but it is not."""
810
_fmt = "%(context_info)s%(path)s is not versioned."
812
def __init__(self, path, context_info=None):
813
"""Construct a new NotVersionedError.
815
:param path: This is the path which is not versioned,
816
which should be in a user friendly form.
817
:param context_info: If given, this is information about the context,
818
which could explain why this is expected to be versioned.
820
BzrError.__init__(self)
822
if context_info is None:
823
self.context_info = ''
825
self.context_info = context_info + ". "
828
class PathsNotVersionedError(BzrError):
829
"""Used when reporting several paths which are not versioned"""
831
_fmt = "Path(s) are not versioned: %(paths_as_string)s"
833
def __init__(self, paths):
834
from bzrlib.osutils import quotefn
835
BzrError.__init__(self)
837
self.paths_as_string = ' '.join([quotefn(p) for p in paths])
840
class PathsDoNotExist(BzrError):
842
_fmt = "Path(s) do not exist: %(paths_as_string)s%(extra)s"
844
# used when reporting that paths are neither versioned nor in the working
847
def __init__(self, paths, extra=None):
849
from bzrlib.osutils import quotefn
850
BzrError.__init__(self)
852
self.paths_as_string = ' '.join([quotefn(p) for p in paths])
854
self.extra = ': ' + str(extra)
859
class BadFileKindError(BzrError):
861
_fmt = 'Cannot operate on "%(filename)s" of unsupported kind "%(kind)s"'
863
def __init__(self, filename, kind):
864
BzrError.__init__(self, filename=filename, kind=kind)
867
class BadFilenameEncoding(BzrError):
869
_fmt = ('Filename %(filename)r is not valid in your current filesystem'
870
' encoding %(fs_encoding)s')
872
def __init__(self, filename, fs_encoding):
873
BzrError.__init__(self)
874
self.filename = filename
875
self.fs_encoding = fs_encoding
878
class ForbiddenControlFileError(BzrError):
880
_fmt = 'Cannot operate on "%(filename)s" because it is a control file'
883
class LockError(InternalBzrError):
885
_fmt = "Lock error: %(msg)s"
887
# All exceptions from the lock/unlock functions should be from
888
# this exception class. They will be translated as necessary. The
889
# original exception is available as e.original_error
891
# New code should prefer to raise specific subclasses
892
def __init__(self, message):
893
# Python 2.5 uses a slot for StandardError.message,
894
# so use a different variable name. We now work around this in
895
# BzrError.__str__, but this member name is kept for compatability.
899
class LockActive(LockError):
901
_fmt = "The lock for '%(lock_description)s' is in use and cannot be broken."
903
internal_error = False
905
def __init__(self, lock_description):
906
self.lock_description = lock_description
909
class CommitNotPossible(LockError):
911
_fmt = "A commit was attempted but we do not have a write lock open."
917
class AlreadyCommitted(LockError):
919
_fmt = "A rollback was requested, but is not able to be accomplished."
925
class ReadOnlyError(LockError):
927
_fmt = "A write attempt was made in a read only transaction on %(obj)s"
929
# TODO: There should also be an error indicating that you need a write
930
# lock and don't have any lock at all... mbp 20070226
932
def __init__(self, obj):
936
class LockFailed(LockError):
938
internal_error = False
940
_fmt = "Cannot lock %(lock)s: %(why)s"
942
def __init__(self, lock, why):
943
LockError.__init__(self, '')
948
class OutSideTransaction(BzrError):
950
_fmt = ("A transaction related operation was attempted after"
951
" the transaction finished.")
954
class ObjectNotLocked(LockError):
956
_fmt = "%(obj)r is not locked"
958
# this can indicate that any particular object is not locked; see also
959
# LockNotHeld which means that a particular *lock* object is not held by
960
# the caller -- perhaps they should be unified.
961
def __init__(self, obj):
965
class ReadOnlyObjectDirtiedError(ReadOnlyError):
967
_fmt = "Cannot change object %(obj)r in read only transaction"
969
def __init__(self, obj):
973
class UnlockableTransport(LockError):
975
internal_error = False
977
_fmt = "Cannot lock: transport is read only: %(transport)s"
979
def __init__(self, transport):
980
self.transport = transport
983
class LockContention(LockError):
985
_fmt = 'Could not acquire lock "%(lock)s"'
986
# TODO: show full url for lock, combining the transport and relative
989
internal_error = False
991
def __init__(self, lock):
995
class LockBroken(LockError):
997
_fmt = ("Lock was broken while still open: %(lock)s"
998
" - check storage consistency!")
1000
internal_error = False
1002
def __init__(self, lock):
1006
class LockBreakMismatch(LockError):
1008
_fmt = ("Lock was released and re-acquired before being broken:"
1009
" %(lock)s: held by %(holder)r, wanted to break %(target)r")
1011
internal_error = False
1013
def __init__(self, lock, holder, target):
1015
self.holder = holder
1016
self.target = target
1019
class LockNotHeld(LockError):
1021
_fmt = "Lock not held: %(lock)s"
1023
internal_error = False
1025
def __init__(self, lock):
1029
class TokenLockingNotSupported(LockError):
1031
_fmt = "The object %(obj)s does not support token specifying a token when locking."
1033
def __init__(self, obj):
1037
class TokenMismatch(LockBroken):
1039
_fmt = "The lock token %(given_token)r does not match lock token %(lock_token)r."
1041
internal_error = True
1043
def __init__(self, given_token, lock_token):
1044
self.given_token = given_token
1045
self.lock_token = lock_token
1048
class PointlessCommit(BzrError):
1050
_fmt = "No changes to commit"
1053
class CannotCommitSelectedFileMerge(BzrError):
1055
_fmt = 'Selected-file commit of merges is not supported yet:'\
1056
' files %(files_str)s'
1058
def __init__(self, files):
1059
files_str = ', '.join(files)
1060
BzrError.__init__(self, files=files, files_str=files_str)
1063
class BadCommitMessageEncoding(BzrError):
1065
_fmt = 'The specified commit message contains characters unsupported by '\
1066
'the current encoding.'
1069
class UpgradeReadonly(BzrError):
1071
_fmt = "Upgrade URL cannot work with readonly URLs."
1074
class UpToDateFormat(BzrError):
1076
_fmt = "The branch format %(format)s is already at the most recent format."
1078
def __init__(self, format):
1079
BzrError.__init__(self)
1080
self.format = format
1083
class StrictCommitFailed(Exception):
1085
_fmt = "Commit refused because there are unknowns in the tree."
1088
class NoSuchRevision(InternalBzrError):
1090
_fmt = "%(branch)s has no revision %(revision)s"
1092
def __init__(self, branch, revision):
1093
# 'branch' may sometimes be an internal object like a KnitRevisionStore
1094
BzrError.__init__(self, branch=branch, revision=revision)
1097
class RangeInChangeOption(BzrError):
1099
_fmt = "Option --change does not accept revision ranges"
1102
class NoSuchRevisionSpec(BzrError):
1104
_fmt = "No namespace registered for string: %(spec)r"
1106
def __init__(self, spec):
1107
BzrError.__init__(self, spec=spec)
1110
class NoSuchRevisionInTree(NoSuchRevision):
1111
"""When using Tree.revision_tree, and the revision is not accessible."""
1113
_fmt = "The revision id {%(revision_id)s} is not present in the tree %(tree)s."
1115
def __init__(self, tree, revision_id):
1116
BzrError.__init__(self)
1118
self.revision_id = revision_id
1121
class InvalidRevisionSpec(BzrError):
1123
_fmt = ("Requested revision: %(spec)r does not exist in branch:"
1124
" %(branch)s%(extra)s")
1126
def __init__(self, spec, branch, extra=None):
1127
BzrError.__init__(self, branch=branch, spec=spec)
1129
self.extra = '\n' + str(extra)
1134
class HistoryMissing(BzrError):
1136
_fmt = "%(branch)s is missing %(object_type)s {%(object_id)s}"
1139
class AppendRevisionsOnlyViolation(BzrError):
1141
_fmt = ('Operation denied because it would change the main history,'
1142
' which is not permitted by the append_revisions_only setting on'
1143
' branch "%(location)s".')
1145
def __init__(self, location):
1146
import bzrlib.urlutils as urlutils
1147
location = urlutils.unescape_for_display(location, 'ascii')
1148
BzrError.__init__(self, location=location)
1151
class DivergedBranches(BzrError):
1153
_fmt = ("These branches have diverged."
1154
" Use the merge command to reconcile them.")
1156
def __init__(self, branch1, branch2):
1157
self.branch1 = branch1
1158
self.branch2 = branch2
1161
class NotLefthandHistory(InternalBzrError):
1163
_fmt = "Supplied history does not follow left-hand parents"
1165
def __init__(self, history):
1166
BzrError.__init__(self, history=history)
1169
class UnrelatedBranches(BzrError):
1171
_fmt = ("Branches have no common ancestor, and"
1172
" no merge base revision was specified.")
1175
class CannotReverseCherrypick(BzrError):
1177
_fmt = ('Selected merge cannot perform reverse cherrypicks. Try merge3'
1181
class NoCommonAncestor(BzrError):
1183
_fmt = "Revisions have no common ancestor: %(revision_a)s %(revision_b)s"
1185
def __init__(self, revision_a, revision_b):
1186
self.revision_a = revision_a
1187
self.revision_b = revision_b
1190
class NoCommonRoot(BzrError):
1192
_fmt = ("Revisions are not derived from the same root: "
1193
"%(revision_a)s %(revision_b)s.")
1195
def __init__(self, revision_a, revision_b):
1196
BzrError.__init__(self, revision_a=revision_a, revision_b=revision_b)
1199
class NotAncestor(BzrError):
1201
_fmt = "Revision %(rev_id)s is not an ancestor of %(not_ancestor_id)s"
1203
def __init__(self, rev_id, not_ancestor_id):
1204
BzrError.__init__(self, rev_id=rev_id,
1205
not_ancestor_id=not_ancestor_id)
1208
class InstallFailed(BzrError):
1210
def __init__(self, revisions):
1211
revision_str = ", ".join(str(r) for r in revisions)
1212
msg = "Could not install revisions:\n%s" % revision_str
1213
BzrError.__init__(self, msg)
1214
self.revisions = revisions
1217
class AmbiguousBase(BzrError):
1219
def __init__(self, bases):
1220
warn("BzrError AmbiguousBase has been deprecated as of bzrlib 0.8.",
1222
msg = ("The correct base is unclear, because %s are all equally close"
1224
BzrError.__init__(self, msg)
1228
class NoCommits(BranchError):
1230
_fmt = "Branch %(branch)s has no commits."
1233
class UnlistableStore(BzrError):
1235
def __init__(self, store):
1236
BzrError.__init__(self, "Store %s is not listable" % store)
1240
class UnlistableBranch(BzrError):
1242
def __init__(self, br):
1243
BzrError.__init__(self, "Stores for branch %s are not listable" % br)
1246
class BoundBranchOutOfDate(BzrError):
1248
_fmt = ("Bound branch %(branch)s is out of date with master branch"
1251
def __init__(self, branch, master):
1252
BzrError.__init__(self)
1253
self.branch = branch
1254
self.master = master
1257
class CommitToDoubleBoundBranch(BzrError):
1259
_fmt = ("Cannot commit to branch %(branch)s."
1260
" It is bound to %(master)s, which is bound to %(remote)s.")
1262
def __init__(self, branch, master, remote):
1263
BzrError.__init__(self)
1264
self.branch = branch
1265
self.master = master
1266
self.remote = remote
1269
class OverwriteBoundBranch(BzrError):
1271
_fmt = "Cannot pull --overwrite to a branch which is bound %(branch)s"
1273
def __init__(self, branch):
1274
BzrError.__init__(self)
1275
self.branch = branch
1278
class BoundBranchConnectionFailure(BzrError):
1280
_fmt = ("Unable to connect to target of bound branch %(branch)s"
1281
" => %(target)s: %(error)s")
1283
def __init__(self, branch, target, error):
1284
BzrError.__init__(self)
1285
self.branch = branch
1286
self.target = target
1290
class WeaveError(BzrError):
1292
_fmt = "Error in processing weave: %(message)s"
1294
def __init__(self, message=None):
1295
BzrError.__init__(self)
1296
self.message = message
1299
class WeaveRevisionAlreadyPresent(WeaveError):
1301
_fmt = "Revision {%(revision_id)s} already present in %(weave)s"
1303
def __init__(self, revision_id, weave):
1305
WeaveError.__init__(self)
1306
self.revision_id = revision_id
1310
class WeaveRevisionNotPresent(WeaveError):
1312
_fmt = "Revision {%(revision_id)s} not present in %(weave)s"
1314
def __init__(self, revision_id, weave):
1315
WeaveError.__init__(self)
1316
self.revision_id = revision_id
1320
class WeaveFormatError(WeaveError):
1322
_fmt = "Weave invariant violated: %(what)s"
1324
def __init__(self, what):
1325
WeaveError.__init__(self)
1329
class WeaveParentMismatch(WeaveError):
1331
_fmt = "Parents are mismatched between two revisions. %(message)s"
1334
class WeaveInvalidChecksum(WeaveError):
1336
_fmt = "Text did not match it's checksum: %(message)s"
1339
class WeaveTextDiffers(WeaveError):
1341
_fmt = ("Weaves differ on text content. Revision:"
1342
" {%(revision_id)s}, %(weave_a)s, %(weave_b)s")
1344
def __init__(self, revision_id, weave_a, weave_b):
1345
WeaveError.__init__(self)
1346
self.revision_id = revision_id
1347
self.weave_a = weave_a
1348
self.weave_b = weave_b
1351
class WeaveTextDiffers(WeaveError):
1353
_fmt = ("Weaves differ on text content. Revision:"
1354
" {%(revision_id)s}, %(weave_a)s, %(weave_b)s")
1356
def __init__(self, revision_id, weave_a, weave_b):
1357
WeaveError.__init__(self)
1358
self.revision_id = revision_id
1359
self.weave_a = weave_a
1360
self.weave_b = weave_b
1363
class VersionedFileError(BzrError):
1365
_fmt = "Versioned file error"
1368
class RevisionNotPresent(VersionedFileError):
1370
_fmt = 'Revision {%(revision_id)s} not present in "%(file_id)s".'
1372
def __init__(self, revision_id, file_id):
1373
VersionedFileError.__init__(self)
1374
self.revision_id = revision_id
1375
self.file_id = file_id
1378
class RevisionAlreadyPresent(VersionedFileError):
1380
_fmt = 'Revision {%(revision_id)s} already present in "%(file_id)s".'
1382
def __init__(self, revision_id, file_id):
1383
VersionedFileError.__init__(self)
1384
self.revision_id = revision_id
1385
self.file_id = file_id
1388
class VersionedFileInvalidChecksum(VersionedFileError):
1390
_fmt = "Text did not match its checksum: %(message)s"
1393
class KnitError(InternalBzrError):
1398
class KnitCorrupt(KnitError):
1400
_fmt = "Knit %(filename)s corrupt: %(how)s"
1402
def __init__(self, filename, how):
1403
KnitError.__init__(self)
1404
self.filename = filename
1408
class KnitDataStreamIncompatible(KnitError):
1409
# Not raised anymore, as we can convert data streams. In future we may
1410
# need it again for more exotic cases, so we're keeping it around for now.
1412
_fmt = "Cannot insert knit data stream of format \"%(stream_format)s\" into knit of format \"%(target_format)s\"."
1414
def __init__(self, stream_format, target_format):
1415
self.stream_format = stream_format
1416
self.target_format = target_format
1419
class KnitDataStreamUnknown(KnitError):
1420
# Indicates a data stream we don't know how to handle.
1422
_fmt = "Cannot parse knit data stream of format \"%(stream_format)s\"."
1424
def __init__(self, stream_format):
1425
self.stream_format = stream_format
1428
class KnitHeaderError(KnitError):
1430
_fmt = 'Knit header error: %(badline)r unexpected for file "%(filename)s".'
1432
def __init__(self, badline, filename):
1433
KnitError.__init__(self)
1434
self.badline = badline
1435
self.filename = filename
1437
class KnitIndexUnknownMethod(KnitError):
1438
"""Raised when we don't understand the storage method.
1440
Currently only 'fulltext' and 'line-delta' are supported.
1443
_fmt = ("Knit index %(filename)s does not have a known method"
1444
" in options: %(options)r")
1446
def __init__(self, filename, options):
1447
KnitError.__init__(self)
1448
self.filename = filename
1449
self.options = options
1452
class NoSuchExportFormat(BzrError):
1454
_fmt = "Export format %(format)r not supported"
1456
def __init__(self, format):
1457
BzrError.__init__(self)
1458
self.format = format
1461
class TransportError(BzrError):
1463
_fmt = "Transport error: %(msg)s %(orig_error)s"
1465
def __init__(self, msg=None, orig_error=None):
1466
if msg is None and orig_error is not None:
1467
msg = str(orig_error)
1468
if orig_error is None:
1473
self.orig_error = orig_error
1474
BzrError.__init__(self)
1477
class TooManyConcurrentRequests(InternalBzrError):
1479
_fmt = ("The medium '%(medium)s' has reached its concurrent request limit."
1480
" Be sure to finish_writing and finish_reading on the"
1481
" currently open request.")
1483
def __init__(self, medium):
1484
self.medium = medium
1487
class SmartProtocolError(TransportError):
1489
_fmt = "Generic bzr smart protocol error: %(details)s"
1491
def __init__(self, details):
1492
self.details = details
1495
class UnexpectedProtocolVersionMarker(TransportError):
1497
_fmt = "Received bad protocol version marker: %(marker)r"
1499
def __init__(self, marker):
1500
self.marker = marker
1503
class UnknownSmartMethod(InternalBzrError):
1505
_fmt = "The server does not recognise the '%(verb)s' request."
1507
def __init__(self, verb):
1511
class SmartMessageHandlerError(InternalBzrError):
1513
_fmt = "The message handler raised an exception: %(exc_value)s."
1515
def __init__(self, exc_info):
1516
self.exc_type, self.exc_value, self.tb = exc_info
1519
# A set of semi-meaningful errors which can be thrown
1520
class TransportNotPossible(TransportError):
1522
_fmt = "Transport operation not possible: %(msg)s %(orig_error)s"
1525
class ConnectionError(TransportError):
1527
_fmt = "Connection error: %(msg)s %(orig_error)s"
1530
class SocketConnectionError(ConnectionError):
1532
_fmt = "%(msg)s %(host)s%(port)s%(orig_error)s"
1534
def __init__(self, host, port=None, msg=None, orig_error=None):
1536
msg = 'Failed to connect to'
1537
if orig_error is None:
1540
orig_error = '; ' + str(orig_error)
1541
ConnectionError.__init__(self, msg=msg, orig_error=orig_error)
1546
self.port = ':%s' % port
1549
class ConnectionReset(TransportError):
1551
_fmt = "Connection closed: %(msg)s %(orig_error)s"
1554
class InvalidRange(TransportError):
1556
_fmt = "Invalid range access in %(path)s at %(offset)s: %(msg)s"
1558
def __init__(self, path, offset, msg=None):
1559
TransportError.__init__(self, msg)
1561
self.offset = offset
1564
class InvalidHttpResponse(TransportError):
1566
_fmt = "Invalid http response for %(path)s: %(msg)s"
1568
def __init__(self, path, msg, orig_error=None):
1570
TransportError.__init__(self, msg, orig_error=orig_error)
1573
class InvalidHttpRange(InvalidHttpResponse):
1575
_fmt = "Invalid http range %(range)r for %(path)s: %(msg)s"
1577
def __init__(self, path, range, msg):
1579
InvalidHttpResponse.__init__(self, path, msg)
1582
class InvalidHttpContentType(InvalidHttpResponse):
1584
_fmt = 'Invalid http Content-type "%(ctype)s" for %(path)s: %(msg)s'
1586
def __init__(self, path, ctype, msg):
1588
InvalidHttpResponse.__init__(self, path, msg)
1591
class RedirectRequested(TransportError):
1593
_fmt = '%(source)s is%(permanently)s redirected to %(target)s'
1595
def __init__(self, source, target, is_permanent=False, qual_proto=None):
1596
self.source = source
1597
self.target = target
1599
self.permanently = ' permanently'
1601
self.permanently = ''
1602
self._qualified_proto = qual_proto
1603
TransportError.__init__(self)
1605
def _requalify_url(self, url):
1606
"""Restore the qualified proto in front of the url"""
1607
# When this exception is raised, source and target are in
1608
# user readable format. But some transports may use a
1609
# different proto (http+urllib:// will present http:// to
1610
# the user. If a qualified proto is specified, the code
1611
# trapping the exception can get the qualified urls to
1612
# properly handle the redirection themself (creating a
1613
# new transport object from the target url for example).
1614
# But checking that the scheme of the original and
1615
# redirected urls are the same can be tricky. (see the
1616
# FIXME in BzrDir.open_from_transport for the unique use
1618
if self._qualified_proto is None:
1621
# The TODO related to NotBranchError mention that doing
1622
# that kind of manipulation on the urls may not be the
1623
# exception object job. On the other hand, this object is
1624
# the interface between the code and the user so
1625
# presenting the urls in different ways is indeed its
1628
proto, netloc, path, query, fragment = urlparse.urlsplit(url)
1629
return urlparse.urlunsplit((self._qualified_proto, netloc, path,
1632
def get_source_url(self):
1633
return self._requalify_url(self.source)
1635
def get_target_url(self):
1636
return self._requalify_url(self.target)
1639
class TooManyRedirections(TransportError):
1641
_fmt = "Too many redirections"
1644
class ConflictsInTree(BzrError):
1646
_fmt = "Working tree has conflicts."
1649
class ParseConfigError(BzrError):
1651
def __init__(self, errors, filename):
1652
if filename is None:
1654
message = "Error(s) parsing config file %s:\n%s" % \
1655
(filename, ('\n'.join(e.message for e in errors)))
1656
BzrError.__init__(self, message)
1659
class NoEmailInUsername(BzrError):
1661
_fmt = "%(username)r does not seem to contain a reasonable email address"
1663
def __init__(self, username):
1664
BzrError.__init__(self)
1665
self.username = username
1668
class SigningFailed(BzrError):
1670
_fmt = 'Failed to gpg sign data with command "%(command_line)s"'
1672
def __init__(self, command_line):
1673
BzrError.__init__(self, command_line=command_line)
1676
class WorkingTreeNotRevision(BzrError):
1678
_fmt = ("The working tree for %(basedir)s has changed since"
1679
" the last commit, but weave merge requires that it be"
1682
def __init__(self, tree):
1683
BzrError.__init__(self, basedir=tree.basedir)
1686
class CantReprocessAndShowBase(BzrError):
1688
_fmt = ("Can't reprocess and show base, because reprocessing obscures "
1689
"the relationship of conflicting lines to the base")
1692
class GraphCycleError(BzrError):
1694
_fmt = "Cycle in graph %(graph)r"
1696
def __init__(self, graph):
1697
BzrError.__init__(self)
1701
class WritingCompleted(InternalBzrError):
1703
_fmt = ("The MediumRequest '%(request)s' has already had finish_writing "
1704
"called upon it - accept bytes may not be called anymore.")
1706
def __init__(self, request):
1707
self.request = request
1710
class WritingNotComplete(InternalBzrError):
1712
_fmt = ("The MediumRequest '%(request)s' has not has finish_writing "
1713
"called upon it - until the write phase is complete no "
1714
"data may be read.")
1716
def __init__(self, request):
1717
self.request = request
1720
class NotConflicted(BzrError):
1722
_fmt = "File %(filename)s is not conflicted."
1724
def __init__(self, filename):
1725
BzrError.__init__(self)
1726
self.filename = filename
1729
class MediumNotConnected(InternalBzrError):
1731
_fmt = """The medium '%(medium)s' is not connected."""
1733
def __init__(self, medium):
1734
self.medium = medium
1737
class MustUseDecorated(Exception):
1739
_fmt = "A decorating function has requested its original command be used."
1742
class NoBundleFound(BzrError):
1744
_fmt = 'No bundle was found in "%(filename)s".'
1746
def __init__(self, filename):
1747
BzrError.__init__(self)
1748
self.filename = filename
1751
class BundleNotSupported(BzrError):
1753
_fmt = "Unable to handle bundle version %(version)s: %(msg)s"
1755
def __init__(self, version, msg):
1756
BzrError.__init__(self)
1757
self.version = version
1761
class MissingText(BzrError):
1763
_fmt = ("Branch %(base)s is missing revision"
1764
" %(text_revision)s of %(file_id)s")
1766
def __init__(self, branch, text_revision, file_id):
1767
BzrError.__init__(self)
1768
self.branch = branch
1769
self.base = branch.base
1770
self.text_revision = text_revision
1771
self.file_id = file_id
1774
class DuplicateFileId(BzrError):
1776
_fmt = "File id {%(file_id)s} already exists in inventory as %(entry)s"
1778
def __init__(self, file_id, entry):
1779
BzrError.__init__(self)
1780
self.file_id = file_id
1784
class DuplicateKey(BzrError):
1786
_fmt = "Key %(key)s is already present in map"
1789
class DuplicateHelpPrefix(BzrError):
1791
_fmt = "The prefix %(prefix)s is in the help search path twice."
1793
def __init__(self, prefix):
1794
self.prefix = prefix
1797
class MalformedTransform(BzrError):
1799
_fmt = "Tree transform is malformed %(conflicts)r"
1802
class NoFinalPath(BzrError):
1804
_fmt = ("No final name for trans_id %(trans_id)r\n"
1805
"file-id: %(file_id)r\n"
1806
"root trans-id: %(root_trans_id)r\n")
1808
def __init__(self, trans_id, transform):
1809
self.trans_id = trans_id
1810
self.file_id = transform.final_file_id(trans_id)
1811
self.root_trans_id = transform.root
1814
class BzrBadParameter(InternalBzrError):
1816
_fmt = "Bad parameter: %(param)r"
1818
# This exception should never be thrown, but it is a base class for all
1819
# parameter-to-function errors.
1821
def __init__(self, param):
1822
BzrError.__init__(self)
1826
class BzrBadParameterNotUnicode(BzrBadParameter):
1828
_fmt = "Parameter %(param)s is neither unicode nor utf8."
1831
class ReusingTransform(BzrError):
1833
_fmt = "Attempt to reuse a transform that has already been applied."
1836
class CantMoveRoot(BzrError):
1838
_fmt = "Moving the root directory is not supported at this time"
1841
class BzrMoveFailedError(BzrError):
1843
_fmt = "Could not move %(from_path)s%(operator)s %(to_path)s%(extra)s"
1845
def __init__(self, from_path='', to_path='', extra=None):
1846
BzrError.__init__(self)
1848
self.extra = ': ' + str(extra)
1852
has_from = len(from_path) > 0
1853
has_to = len(to_path) > 0
1855
self.from_path = osutils.splitpath(from_path)[-1]
1860
self.to_path = osutils.splitpath(to_path)[-1]
1865
if has_from and has_to:
1866
self.operator = " =>"
1868
self.from_path = "from " + from_path
1870
self.operator = "to"
1872
self.operator = "file"
1875
class BzrRenameFailedError(BzrMoveFailedError):
1877
_fmt = "Could not rename %(from_path)s%(operator)s %(to_path)s%(extra)s"
1879
def __init__(self, from_path, to_path, extra=None):
1880
BzrMoveFailedError.__init__(self, from_path, to_path, extra)
1882
class BzrRemoveChangedFilesError(BzrError):
1883
"""Used when user is trying to remove changed files."""
1885
_fmt = ("Can't safely remove modified or unknown files:\n"
1886
"%(changes_as_text)s"
1887
"Use --keep to not delete them, or --force to delete them regardless.")
1889
def __init__(self, tree_delta):
1890
BzrError.__init__(self)
1891
self.changes_as_text = tree_delta.get_changes_as_text()
1892
#self.paths_as_string = '\n'.join(changed_files)
1893
#self.paths_as_string = '\n'.join([quotefn(p) for p in changed_files])
1896
class BzrBadParameterNotString(BzrBadParameter):
1898
_fmt = "Parameter %(param)s is not a string or unicode string."
1901
class BzrBadParameterMissing(BzrBadParameter):
1903
_fmt = "Parameter $(param)s is required but not present."
1906
class BzrBadParameterUnicode(BzrBadParameter):
1908
_fmt = ("Parameter %(param)s is unicode but"
1909
" only byte-strings are permitted.")
1912
class BzrBadParameterContainsNewline(BzrBadParameter):
1914
_fmt = "Parameter %(param)s contains a newline."
1917
class DependencyNotPresent(BzrError):
1919
_fmt = 'Unable to import library "%(library)s": %(error)s'
1921
def __init__(self, library, error):
1922
BzrError.__init__(self, library=library, error=error)
1925
class ParamikoNotPresent(DependencyNotPresent):
1927
_fmt = "Unable to import paramiko (required for sftp support): %(error)s"
1929
def __init__(self, error):
1930
DependencyNotPresent.__init__(self, 'paramiko', error)
1933
class PointlessMerge(BzrError):
1935
_fmt = "Nothing to merge."
1938
class UninitializableFormat(BzrError):
1940
_fmt = "Format %(format)s cannot be initialised by this version of bzr."
1942
def __init__(self, format):
1943
BzrError.__init__(self)
1944
self.format = format
1947
class BadConversionTarget(BzrError):
1949
_fmt = "Cannot convert to format %(format)s. %(problem)s"
1951
def __init__(self, problem, format):
1952
BzrError.__init__(self)
1953
self.problem = problem
1954
self.format = format
1957
class NoDiffFound(BzrError):
1959
_fmt = 'Could not find an appropriate Differ for file "%(path)s"'
1961
def __init__(self, path):
1962
BzrError.__init__(self, path)
1965
class ExecutableMissing(BzrError):
1967
_fmt = "%(exe_name)s could not be found on this machine"
1969
def __init__(self, exe_name):
1970
BzrError.__init__(self, exe_name=exe_name)
1973
class NoDiff(BzrError):
1975
_fmt = "Diff is not installed on this machine: %(msg)s"
1977
def __init__(self, msg):
1978
BzrError.__init__(self, msg=msg)
1981
class NoDiff3(BzrError):
1983
_fmt = "Diff3 is not installed on this machine."
1986
class ExistingContent(BzrError):
1987
# Added in bzrlib 0.92, used by VersionedFile.add_lines.
1989
_fmt = "The content being inserted is already present."
1992
class ExistingLimbo(BzrError):
1994
_fmt = """This tree contains left-over files from a failed operation.
1995
Please examine %(limbo_dir)s to see if it contains any files you wish to
1996
keep, and delete it when you are done."""
1998
def __init__(self, limbo_dir):
1999
BzrError.__init__(self)
2000
self.limbo_dir = limbo_dir
2003
class ExistingPendingDeletion(BzrError):
2005
_fmt = """This tree contains left-over files from a failed operation.
2006
Please examine %(pending_deletion)s to see if it contains any files you
2007
wish to keep, and delete it when you are done."""
2009
def __init__(self, pending_deletion):
2010
BzrError.__init__(self, pending_deletion=pending_deletion)
2013
class ImmortalLimbo(BzrError):
2015
_fmt = """Unable to delete transform temporary directory %(limbo_dir)s.
2016
Please examine %(limbo_dir)s to see if it contains any files you wish to
2017
keep, and delete it when you are done."""
2019
def __init__(self, limbo_dir):
2020
BzrError.__init__(self)
2021
self.limbo_dir = limbo_dir
2024
class ImmortalPendingDeletion(BzrError):
2026
_fmt = ("Unable to delete transform temporary directory "
2027
"%(pending_deletion)s. Please examine %(pending_deletion)s to see if it "
2028
"contains any files you wish to keep, and delete it when you are done.")
2030
def __init__(self, pending_deletion):
2031
BzrError.__init__(self, pending_deletion=pending_deletion)
2034
class OutOfDateTree(BzrError):
2036
_fmt = "Working tree is out of date, please run 'bzr update'."
2038
def __init__(self, tree):
2039
BzrError.__init__(self)
2043
class PublicBranchOutOfDate(BzrError):
2045
_fmt = 'Public branch "%(public_location)s" lacks revision '\
2048
def __init__(self, public_location, revstring):
2049
import bzrlib.urlutils as urlutils
2050
public_location = urlutils.unescape_for_display(public_location,
2052
BzrError.__init__(self, public_location=public_location,
2053
revstring=revstring)
2056
class MergeModifiedFormatError(BzrError):
2058
_fmt = "Error in merge modified format"
2061
class ConflictFormatError(BzrError):
2063
_fmt = "Format error in conflict listings"
2066
class CorruptDirstate(BzrError):
2068
_fmt = ("Inconsistency in dirstate file %(dirstate_path)s.\n"
2069
"Error: %(description)s")
2071
def __init__(self, dirstate_path, description):
2072
BzrError.__init__(self)
2073
self.dirstate_path = dirstate_path
2074
self.description = description
2077
class CorruptRepository(BzrError):
2079
_fmt = ("An error has been detected in the repository %(repo_path)s.\n"
2080
"Please run bzr reconcile on this repository.")
2082
def __init__(self, repo):
2083
BzrError.__init__(self)
2084
self.repo_path = repo.bzrdir.root_transport.base
2087
class InconsistentDelta(BzrError):
2088
"""Used when we get a delta that is not valid."""
2090
_fmt = ("An inconsistent delta was supplied involving %(path)r,"
2091
" %(file_id)r\nreason: %(reason)s")
2093
def __init__(self, path, file_id, reason):
2094
BzrError.__init__(self)
2096
self.file_id = file_id
2097
self.reason = reason
2100
class UpgradeRequired(BzrError):
2102
_fmt = "To use this feature you must upgrade your branch at %(path)s."
2104
def __init__(self, path):
2105
BzrError.__init__(self)
2109
class RepositoryUpgradeRequired(UpgradeRequired):
2111
_fmt = "To use this feature you must upgrade your repository at %(path)s."
2114
class LocalRequiresBoundBranch(BzrError):
2116
_fmt = "Cannot perform local-only commits on unbound branches."
2119
class MissingProgressBarFinish(BzrError):
2121
_fmt = "A nested progress bar was not 'finished' correctly."
2124
class InvalidProgressBarType(BzrError):
2126
_fmt = ("Environment variable BZR_PROGRESS_BAR='%(bar_type)s"
2127
" is not a supported type Select one of: %(valid_types)s")
2129
def __init__(self, bar_type, valid_types):
2130
BzrError.__init__(self, bar_type=bar_type, valid_types=valid_types)
2133
class UnsupportedOperation(BzrError):
2135
_fmt = ("The method %(mname)s is not supported on"
2136
" objects of type %(tname)s.")
2138
def __init__(self, method, method_self):
2139
self.method = method
2140
self.mname = method.__name__
2141
self.tname = type(method_self).__name__
2144
class CannotSetRevisionId(UnsupportedOperation):
2145
"""Raised when a commit is attempting to set a revision id but cant."""
2148
class NonAsciiRevisionId(UnsupportedOperation):
2149
"""Raised when a commit is attempting to set a non-ascii revision id
2154
class BinaryFile(BzrError):
2156
_fmt = "File is binary but should be text."
2159
class IllegalPath(BzrError):
2161
_fmt = "The path %(path)s is not permitted on this platform"
2163
def __init__(self, path):
2164
BzrError.__init__(self)
2168
class TestamentMismatch(BzrError):
2170
_fmt = """Testament did not match expected value.
2171
For revision_id {%(revision_id)s}, expected {%(expected)s}, measured
2174
def __init__(self, revision_id, expected, measured):
2175
self.revision_id = revision_id
2176
self.expected = expected
2177
self.measured = measured
2180
class NotABundle(BzrError):
2182
_fmt = "Not a bzr revision-bundle: %(text)r"
2184
def __init__(self, text):
2185
BzrError.__init__(self)
2189
class BadBundle(BzrError):
2191
_fmt = "Bad bzr revision-bundle: %(text)r"
2193
def __init__(self, text):
2194
BzrError.__init__(self)
2198
class MalformedHeader(BadBundle):
2200
_fmt = "Malformed bzr revision-bundle header: %(text)r"
2203
class MalformedPatches(BadBundle):
2205
_fmt = "Malformed patches in bzr revision-bundle: %(text)r"
2208
class MalformedFooter(BadBundle):
2210
_fmt = "Malformed footer in bzr revision-bundle: %(text)r"
2213
class UnsupportedEOLMarker(BadBundle):
2215
_fmt = "End of line marker was not \\n in bzr revision-bundle"
2218
# XXX: BadBundle's constructor assumes there's explanatory text,
2219
# but for this there is not
2220
BzrError.__init__(self)
2223
class IncompatibleBundleFormat(BzrError):
2225
_fmt = "Bundle format %(bundle_format)s is incompatible with %(other)s"
2227
def __init__(self, bundle_format, other):
2228
BzrError.__init__(self)
2229
self.bundle_format = bundle_format
2233
class BadInventoryFormat(BzrError):
2235
_fmt = "Root class for inventory serialization errors"
2238
class UnexpectedInventoryFormat(BadInventoryFormat):
2240
_fmt = "The inventory was not in the expected format:\n %(msg)s"
2242
def __init__(self, msg):
2243
BadInventoryFormat.__init__(self, msg=msg)
2246
class RootNotRich(BzrError):
2248
_fmt = """This operation requires rich root data storage"""
2251
class NoSmartMedium(InternalBzrError):
2253
_fmt = "The transport '%(transport)s' cannot tunnel the smart protocol."
2255
def __init__(self, transport):
2256
self.transport = transport
2259
class NoSmartServer(NotBranchError):
2261
_fmt = "No smart server available at %(url)s"
2263
@symbol_versioning.deprecated_method(symbol_versioning.one_four)
2264
def __init__(self, url):
2268
class UnknownSSH(BzrError):
2270
_fmt = "Unrecognised value for BZR_SSH environment variable: %(vendor)s"
2272
def __init__(self, vendor):
2273
BzrError.__init__(self)
2274
self.vendor = vendor
2277
class SSHVendorNotFound(BzrError):
2279
_fmt = ("Don't know how to handle SSH connections."
2280
" Please set BZR_SSH environment variable.")
2283
class GhostRevisionsHaveNoRevno(BzrError):
2284
"""When searching for revnos, if we encounter a ghost, we are stuck"""
2286
_fmt = ("Could not determine revno for {%(revision_id)s} because"
2287
" its ancestry shows a ghost at {%(ghost_revision_id)s}")
2289
def __init__(self, revision_id, ghost_revision_id):
2290
self.revision_id = revision_id
2291
self.ghost_revision_id = ghost_revision_id
2294
class GhostRevisionUnusableHere(BzrError):
2296
_fmt = "Ghost revision {%(revision_id)s} cannot be used here."
2298
def __init__(self, revision_id):
2299
BzrError.__init__(self)
2300
self.revision_id = revision_id
2303
class IllegalUseOfScopeReplacer(InternalBzrError):
2305
_fmt = ("ScopeReplacer object %(name)r was used incorrectly:"
2306
" %(msg)s%(extra)s")
2308
def __init__(self, name, msg, extra=None):
2309
BzrError.__init__(self)
2313
self.extra = ': ' + str(extra)
2318
class InvalidImportLine(InternalBzrError):
2320
_fmt = "Not a valid import statement: %(msg)\n%(text)s"
2322
def __init__(self, text, msg):
2323
BzrError.__init__(self)
2328
class ImportNameCollision(InternalBzrError):
2330
_fmt = ("Tried to import an object to the same name as"
2331
" an existing object. %(name)s")
2333
def __init__(self, name):
2334
BzrError.__init__(self)
2338
class NotAMergeDirective(BzrError):
2339
"""File starting with %(firstline)r is not a merge directive"""
2340
def __init__(self, firstline):
2341
BzrError.__init__(self, firstline=firstline)
2344
class NoMergeSource(BzrError):
2345
"""Raise if no merge source was specified for a merge directive"""
2347
_fmt = "A merge directive must provide either a bundle or a public"\
2351
class IllegalMergeDirectivePayload(BzrError):
2352
"""A merge directive contained something other than a patch or bundle"""
2354
_fmt = "Bad merge directive payload %(start)r"
2356
def __init__(self, start):
2361
class PatchVerificationFailed(BzrError):
2362
"""A patch from a merge directive could not be verified"""
2364
_fmt = "Preview patch does not match requested changes."
2367
class PatchMissing(BzrError):
2368
"""Raise a patch type was specified but no patch supplied"""
2370
_fmt = "Patch_type was %(patch_type)s, but no patch was supplied."
2372
def __init__(self, patch_type):
2373
BzrError.__init__(self)
2374
self.patch_type = patch_type
2377
class UnsupportedInventoryKind(BzrError):
2379
_fmt = """Unsupported entry kind %(kind)s"""
2381
def __init__(self, kind):
2385
class BadSubsumeSource(BzrError):
2387
_fmt = "Can't subsume %(other_tree)s into %(tree)s. %(reason)s"
2389
def __init__(self, tree, other_tree, reason):
2391
self.other_tree = other_tree
2392
self.reason = reason
2395
class SubsumeTargetNeedsUpgrade(BzrError):
2397
_fmt = """Subsume target %(other_tree)s needs to be upgraded."""
2399
def __init__(self, other_tree):
2400
self.other_tree = other_tree
2403
class BadReferenceTarget(InternalBzrError):
2405
_fmt = "Can't add reference to %(other_tree)s into %(tree)s." \
2408
def __init__(self, tree, other_tree, reason):
2410
self.other_tree = other_tree
2411
self.reason = reason
2414
class NoSuchTag(BzrError):
2416
_fmt = "No such tag: %(tag_name)s"
2418
def __init__(self, tag_name):
2419
self.tag_name = tag_name
2422
class TagsNotSupported(BzrError):
2424
_fmt = ("Tags not supported by %(branch)s;"
2425
" you may be able to use bzr upgrade --dirstate-tags.")
2427
def __init__(self, branch):
2428
self.branch = branch
2431
class TagAlreadyExists(BzrError):
2433
_fmt = "Tag %(tag_name)s already exists."
2435
def __init__(self, tag_name):
2436
self.tag_name = tag_name
2439
class MalformedBugIdentifier(BzrError):
2441
_fmt = "Did not understand bug identifier %(bug_id)s: %(reason)s"
2443
def __init__(self, bug_id, reason):
2444
self.bug_id = bug_id
2445
self.reason = reason
2448
class InvalidBugTrackerURL(BzrError):
2450
_fmt = ("The URL for bug tracker \"%(abbreviation)s\" doesn't "
2451
"contain {id}: %(url)s")
2453
def __init__(self, abbreviation, url):
2454
self.abbreviation = abbreviation
2458
class UnknownBugTrackerAbbreviation(BzrError):
2460
_fmt = ("Cannot find registered bug tracker called %(abbreviation)s "
2463
def __init__(self, abbreviation, branch):
2464
self.abbreviation = abbreviation
2465
self.branch = branch
2468
class UnexpectedSmartServerResponse(BzrError):
2470
_fmt = "Could not understand response from smart server: %(response_tuple)r"
2472
def __init__(self, response_tuple):
2473
self.response_tuple = response_tuple
2476
class ErrorFromSmartServer(BzrError):
2478
_fmt = "Error received from smart server: %(error_tuple)r"
2480
internal_error = True
2482
def __init__(self, error_tuple):
2483
self.error_tuple = error_tuple
2485
self.error_verb = error_tuple[0]
2487
self.error_verb = None
2488
self.error_args = error_tuple[1:]
2491
class ContainerError(BzrError):
2492
"""Base class of container errors."""
2495
class UnknownContainerFormatError(ContainerError):
2497
_fmt = "Unrecognised container format: %(container_format)r"
2499
def __init__(self, container_format):
2500
self.container_format = container_format
2503
class UnexpectedEndOfContainerError(ContainerError):
2505
_fmt = "Unexpected end of container stream"
2508
class UnknownRecordTypeError(ContainerError):
2510
_fmt = "Unknown record type: %(record_type)r"
2512
def __init__(self, record_type):
2513
self.record_type = record_type
2516
class InvalidRecordError(ContainerError):
2518
_fmt = "Invalid record: %(reason)s"
2520
def __init__(self, reason):
2521
self.reason = reason
2524
class ContainerHasExcessDataError(ContainerError):
2526
_fmt = "Container has data after end marker: %(excess)r"
2528
def __init__(self, excess):
2529
self.excess = excess
2532
class DuplicateRecordNameError(ContainerError):
2534
_fmt = "Container has multiple records with the same name: %(name)s"
2536
def __init__(self, name):
2540
class NoDestinationAddress(InternalBzrError):
2542
_fmt = "Message does not have a destination address."
2545
class RepositoryDataStreamError(BzrError):
2547
_fmt = "Corrupt or incompatible data stream: %(reason)s"
2549
def __init__(self, reason):
2550
self.reason = reason
2553
class SMTPError(BzrError):
2555
_fmt = "SMTP error: %(error)s"
2557
def __init__(self, error):
2561
class NoMessageSupplied(BzrError):
2563
_fmt = "No message supplied."
2566
class NoMailAddressSpecified(BzrError):
2568
_fmt = "No mail-to address specified."
2571
class UnknownMailClient(BzrError):
2573
_fmt = "Unknown mail client: %(mail_client)s"
2575
def __init__(self, mail_client):
2576
BzrError.__init__(self, mail_client=mail_client)
2579
class MailClientNotFound(BzrError):
2581
_fmt = "Unable to find mail client with the following names:"\
2582
" %(mail_command_list_string)s"
2584
def __init__(self, mail_command_list):
2585
mail_command_list_string = ', '.join(mail_command_list)
2586
BzrError.__init__(self, mail_command_list=mail_command_list,
2587
mail_command_list_string=mail_command_list_string)
2589
class SMTPConnectionRefused(SMTPError):
2591
_fmt = "SMTP connection to %(host)s refused"
2593
def __init__(self, error, host):
2598
class DefaultSMTPConnectionRefused(SMTPConnectionRefused):
2600
_fmt = "Please specify smtp_server. No server at default %(host)s."
2603
class BzrDirError(BzrError):
2605
def __init__(self, bzrdir):
2606
import bzrlib.urlutils as urlutils
2607
display_url = urlutils.unescape_for_display(bzrdir.root_transport.base,
2609
BzrError.__init__(self, bzrdir=bzrdir, display_url=display_url)
2612
class UnsyncedBranches(BzrDirError):
2614
_fmt = ("'%(display_url)s' is not in sync with %(target_url)s. See"
2615
" bzr help sync-for-reconfigure.")
2617
def __init__(self, bzrdir, target_branch):
2618
BzrDirError.__init__(self, bzrdir)
2619
import bzrlib.urlutils as urlutils
2620
self.target_url = urlutils.unescape_for_display(target_branch.base,
2624
class AlreadyBranch(BzrDirError):
2626
_fmt = "'%(display_url)s' is already a branch."
2629
class AlreadyTree(BzrDirError):
2631
_fmt = "'%(display_url)s' is already a tree."
2634
class AlreadyCheckout(BzrDirError):
2636
_fmt = "'%(display_url)s' is already a checkout."
2639
class AlreadyLightweightCheckout(BzrDirError):
2641
_fmt = "'%(display_url)s' is already a lightweight checkout."
2644
class AlreadyUsingShared(BzrDirError):
2646
_fmt = "'%(display_url)s' is already using a shared repository."
2649
class AlreadyStandalone(BzrDirError):
2651
_fmt = "'%(display_url)s' is already standalone."
2654
class ReconfigurationNotSupported(BzrDirError):
2656
_fmt = "Requested reconfiguration of '%(display_url)s' is not supported."
2659
class NoBindLocation(BzrDirError):
2661
_fmt = "No location could be found to bind to at %(display_url)s."
2664
class UncommittedChanges(BzrError):
2666
_fmt = 'Working tree "%(display_url)s" has uncommitted changes.'
2668
def __init__(self, tree):
2669
import bzrlib.urlutils as urlutils
2670
display_url = urlutils.unescape_for_display(
2671
tree.bzrdir.root_transport.base, 'ascii')
2672
BzrError.__init__(self, tree=tree, display_url=display_url)
2675
class MissingTemplateVariable(BzrError):
2677
_fmt = 'Variable {%(name)s} is not available.'
2679
def __init__(self, name):
2683
class NoTemplate(BzrError):
2685
_fmt = 'No template specified.'
2688
class UnableCreateSymlink(BzrError):
2690
_fmt = 'Unable to create symlink %(path_str)son this platform'
2692
def __init__(self, path=None):
2696
path_str = repr(str(path))
2697
except UnicodeEncodeError:
2698
path_str = repr(path)
2700
self.path_str = path_str
2703
class UnsupportedTimezoneFormat(BzrError):
2705
_fmt = ('Unsupported timezone format "%(timezone)s", '
2706
'options are "utc", "original", "local".')
2708
def __init__(self, timezone):
2709
self.timezone = timezone
2712
class CommandAvailableInPlugin(StandardError):
2714
internal_error = False
2716
def __init__(self, cmd_name, plugin_metadata, provider):
2718
self.plugin_metadata = plugin_metadata
2719
self.cmd_name = cmd_name
2720
self.provider = provider
2724
_fmt = ('"%s" is not a standard bzr command. \n'
2725
'However, the following official plugin provides this command: %s\n'
2726
'You can install it by going to: %s'
2727
% (self.cmd_name, self.plugin_metadata['name'],
2728
self.plugin_metadata['url']))
2733
class NoPluginAvailable(BzrError):
2737
class NotATerminal(BzrError):
2739
_fmt = 'Unable to ask for a password without real terminal.'
2742
class UnableEncodePath(BzrError):
2744
_fmt = ('Unable to encode %(kind)s path %(path)r in '
2745
'user encoding %(user_encoding)s')
2747
def __init__(self, path, kind):
2750
self.user_encoding = osutils.get_user_encoding()
2753
class NoSuchAlias(BzrError):
2755
_fmt = ('The alias "%(alias_name)s" does not exist.')
2757
def __init__(self, alias_name):
2758
BzrError.__init__(self, alias_name=alias_name)
2761
class DirectoryLookupFailure(BzrError):
2762
"""Base type for lookup errors."""
2767
class InvalidLocationAlias(DirectoryLookupFailure):
2769
_fmt = '"%(alias_name)s" is not a valid location alias.'
2771
def __init__(self, alias_name):
2772
DirectoryLookupFailure.__init__(self, alias_name=alias_name)
2775
class UnsetLocationAlias(DirectoryLookupFailure):
2777
_fmt = 'No %(alias_name)s location assigned.'
2779
def __init__(self, alias_name):
2780
DirectoryLookupFailure.__init__(self, alias_name=alias_name[1:])
2783
class CannotBindAddress(BzrError):
2785
_fmt = 'Cannot bind address "%(host)s:%(port)i": %(orig_error)s.'
2787
def __init__(self, host, port, orig_error):
2788
BzrError.__init__(self, host=host, port=port,
2789
orig_error=orig_error[1])
2792
class UnknownRules(BzrError):
2794
_fmt = ('Unknown rules detected: %(unknowns_str)s.')
2796
def __init__(self, unknowns):
2797
BzrError.__init__(self, unknowns_str=", ".join(unknowns))
2800
class HookFailed(BzrError):
2801
"""Raised when a pre_change_branch_tip hook function fails anything other
2802
than TipChangeRejected.
2805
_fmt = ("Hook '%(hook_name)s' during %(hook_stage)s failed:\n"
2806
"%(traceback_text)s%(exc_value)s")
2808
def __init__(self, hook_stage, hook_name, exc_info):
2810
self.hook_stage = hook_stage
2811
self.hook_name = hook_name
2812
self.exc_info = exc_info
2813
self.exc_type = exc_info[0]
2814
self.exc_value = exc_info[1]
2815
self.exc_tb = exc_info[2]
2816
self.traceback_text = ''.join(traceback.format_tb(self.exc_tb))
2819
class TipChangeRejected(BzrError):
2820
"""A pre_change_branch_tip hook function may raise this to cleanly and
2821
explicitly abort a change to a branch tip.
2824
_fmt = u"Tip change rejected: %(msg)s"
2826
def __init__(self, msg):