1
# Copyright (C) 2005, 2006, 2007 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
class BzrError(StandardError):
49
Base class for errors raised by bzrlib.
51
:cvar internal_error: if True this was probably caused by a bzr bug and
52
should be displayed with a traceback; if False (or absent) this was
53
probably a user or environment error and they don't need the gory details.
54
(That can be overridden by -Derror on the command line.)
56
:cvar _fmt: Format string to display the error; this is expanded
57
by the instance's dict.
60
internal_error = False
62
def __init__(self, msg=None, **kwds):
63
"""Construct a new BzrError.
65
There are two alternative forms for constructing these objects.
66
Either a preformatted string may be passed, or a set of named
67
arguments can be given. The first is for generic "user" errors which
68
are not intended to be caught and so do not need a specific subclass.
69
The second case is for use with subclasses that provide a _fmt format
70
string to print the arguments.
72
Keyword arguments are taken as parameters to the error, which can
73
be inserted into the format string template. It's recommended
74
that subclasses override the __init__ method to require specific
77
:param msg: If given, this is the literal complete text for the error,
78
not subject to expansion.
80
StandardError.__init__(self)
82
# I was going to deprecate this, but it actually turns out to be
83
# quite handy - mbp 20061103.
84
self._preformatted_string = msg
86
self._preformatted_string = None
87
for key, value in kwds.items():
88
setattr(self, key, value)
91
s = getattr(self, '_preformatted_string', None)
93
# contains a preformatted message; must be cast to plain str
96
fmt = self._get_format_string()
98
d = dict(self.__dict__)
99
# special case: python2.5 puts the 'message' attribute in a
100
# slot, so it isn't seen in __dict__
101
d['message'] = getattr(self, 'message', 'no message')
103
# __str__() should always return a 'str' object
104
# never a 'unicode' object.
105
if isinstance(s, unicode):
106
return s.encode('utf8')
108
except (AttributeError, TypeError, NameError, ValueError, KeyError), e:
109
return 'Unprintable exception %s: dict=%r, fmt=%r, error=%r' \
110
% (self.__class__.__name__,
112
getattr(self, '_fmt', None),
115
def _get_format_string(self):
116
"""Return format string for this exception or None"""
117
fmt = getattr(self, '_fmt', None)
120
fmt = getattr(self, '__doc__', None)
122
symbol_versioning.warn("%s uses its docstring as a format, "
123
"it should use _fmt instead" % self.__class__.__name__,
126
return 'Unprintable exception %s: dict=%r, fmt=%r' \
127
% (self.__class__.__name__,
129
getattr(self, '_fmt', None),
133
class InternalBzrError(BzrError):
134
"""Base class for errors that are internal in nature.
136
This is a convenience class for errors that are internal. The
137
internal_error attribute can still be altered in subclasses, if needed.
138
Using this class is simply an easy way to get internal errors.
141
internal_error = True
144
class BzrNewError(BzrError):
145
"""Deprecated error base class."""
146
# base classes should override the docstring with their human-
147
# readable explanation
149
def __init__(self, *args, **kwds):
150
# XXX: Use the underlying BzrError to always generate the args
151
# attribute if it doesn't exist. We can't use super here, because
152
# exceptions are old-style classes in python2.4 (but new in 2.5).
154
symbol_versioning.warn('BzrNewError was deprecated in bzr 0.13; '
155
'please convert %s to use BzrError instead'
156
% self.__class__.__name__,
159
BzrError.__init__(self, *args)
160
for key, value in kwds.items():
161
setattr(self, key, value)
165
# __str__() should always return a 'str' object
166
# never a 'unicode' object.
167
s = self.__doc__ % self.__dict__
168
if isinstance(s, unicode):
169
return s.encode('utf8')
171
except (TypeError, NameError, ValueError, KeyError), e:
172
return 'Unprintable exception %s(%r): %r' \
173
% (self.__class__.__name__,
177
class AlreadyBuilding(BzrError):
179
_fmt = "The tree builder is already building a tree."
182
class BzrCheckError(InternalBzrError):
184
_fmt = "Internal check failed: %(message)s"
186
def __init__(self, message):
187
BzrError.__init__(self)
188
self.message = message
191
class DisabledMethod(InternalBzrError):
193
_fmt = "The smart server method '%(class_name)s' is disabled."
195
def __init__(self, class_name):
196
BzrError.__init__(self)
197
self.class_name = class_name
200
class IncompatibleAPI(BzrError):
202
_fmt = 'The API for "%(api)s" is not compatible with "%(wanted)s". '\
203
'It supports versions "%(minimum)s" to "%(current)s".'
205
def __init__(self, api, wanted, minimum, current):
208
self.minimum = minimum
209
self.current = current
212
class InProcessTransport(BzrError):
214
_fmt = "The transport '%(transport)s' is only accessible within this " \
217
def __init__(self, transport):
218
self.transport = transport
221
class InvalidEntryName(InternalBzrError):
223
_fmt = "Invalid entry name: %(name)s"
225
def __init__(self, name):
226
BzrError.__init__(self)
230
class InvalidRevisionNumber(BzrError):
232
_fmt = "Invalid revision number %(revno)s"
234
def __init__(self, revno):
235
BzrError.__init__(self)
239
class InvalidRevisionId(BzrError):
241
_fmt = "Invalid revision-id {%(revision_id)s} in %(branch)s"
243
def __init__(self, revision_id, branch):
244
# branch can be any string or object with __str__ defined
245
BzrError.__init__(self)
246
self.revision_id = revision_id
249
class ReservedId(BzrError):
251
_fmt = "Reserved revision-id {%(revision_id)s}"
253
def __init__(self, revision_id):
254
self.revision_id = revision_id
257
class NoHelpTopic(BzrError):
259
_fmt = ("No help could be found for '%(topic)s'. "
260
"Please use 'bzr help topics' to obtain a list of topics.")
262
def __init__(self, topic):
266
class NoSuchId(BzrError):
268
_fmt = 'The file id "%(file_id)s" is not present in the tree %(tree)s.'
270
def __init__(self, tree, file_id):
271
BzrError.__init__(self)
272
self.file_id = file_id
276
class NoSuchIdInRepository(NoSuchId):
278
_fmt = ('The file id "%(file_id)s" is not present in the repository'
281
def __init__(self, repository, file_id):
282
BzrError.__init__(self, repository=repository, file_id=file_id)
285
class InventoryModified(InternalBzrError):
287
_fmt = ("The current inventory for the tree %(tree)r has been modified,"
288
" so a clean inventory cannot be read without data loss.")
290
def __init__(self, tree):
294
class NoWorkingTree(BzrError):
296
_fmt = 'No WorkingTree exists for "%(base)s".'
298
def __init__(self, base):
299
BzrError.__init__(self)
303
class NotBuilding(BzrError):
305
_fmt = "Not currently building a tree."
308
class NotLocalUrl(BzrError):
310
_fmt = "%(url)s is not a local path."
312
def __init__(self, url):
316
class WorkingTreeAlreadyPopulated(InternalBzrError):
318
_fmt = 'Working tree already populated in "%(base)s"'
320
def __init__(self, base):
324
class BzrCommandError(BzrError):
325
"""Error from user command"""
327
# Error from malformed user command; please avoid raising this as a
328
# generic exception not caused by user input.
330
# I think it's a waste of effort to differentiate between errors that
331
# are not intended to be caught anyway. UI code need not subclass
332
# BzrCommandError, and non-UI code should not throw a subclass of
333
# BzrCommandError. ADHB 20051211
334
def __init__(self, msg):
335
# Object.__str__() must return a real string
336
# returning a Unicode string is a python error.
337
if isinstance(msg, unicode):
338
self.msg = msg.encode('utf8')
346
class NotWriteLocked(BzrError):
348
_fmt = """%(not_locked)r is not write locked but needs to be."""
350
def __init__(self, not_locked):
351
self.not_locked = not_locked
354
class BzrOptionError(BzrCommandError):
356
_fmt = "Error in command line options"
359
class BadIndexFormatSignature(BzrError):
361
_fmt = "%(value)s is not an index of type %(_type)s."
363
def __init__(self, value, _type):
364
BzrError.__init__(self)
369
class BadIndexData(BzrError):
371
_fmt = "Error in data for index %(value)s."
373
def __init__(self, value):
374
BzrError.__init__(self)
378
class BadIndexDuplicateKey(BzrError):
380
_fmt = "The key '%(key)s' is already in index '%(index)s'."
382
def __init__(self, key, index):
383
BzrError.__init__(self)
388
class BadIndexKey(BzrError):
390
_fmt = "The key '%(key)s' is not a valid key."
392
def __init__(self, key):
393
BzrError.__init__(self)
397
class BadIndexOptions(BzrError):
399
_fmt = "Could not parse options for index %(value)s."
401
def __init__(self, value):
402
BzrError.__init__(self)
406
class BadIndexValue(BzrError):
408
_fmt = "The value '%(value)s' is not a valid value."
410
def __init__(self, value):
411
BzrError.__init__(self)
415
class BadOptionValue(BzrError):
417
_fmt = """Bad value "%(value)s" for option "%(name)s"."""
419
def __init__(self, name, value):
420
BzrError.__init__(self, name=name, value=value)
423
class StrictCommitFailed(BzrError):
425
_fmt = "Commit refused because there are unknown files in the tree"
428
# XXX: Should be unified with TransportError; they seem to represent the
430
# RBC 20060929: I think that unifiying with TransportError would be a mistake
431
# - this is finer than a TransportError - and more useful as such. It
432
# differentiates between 'transport has failed' and 'operation on a transport
434
class PathError(BzrError):
436
_fmt = "Generic path error: %(path)r%(extra)s)"
438
def __init__(self, path, extra=None):
439
BzrError.__init__(self)
442
self.extra = ': ' + str(extra)
447
class NoSuchFile(PathError):
449
_fmt = "No such file: %(path)r%(extra)s"
452
class FileExists(PathError):
454
_fmt = "File exists: %(path)r%(extra)s"
457
class RenameFailedFilesExist(BzrError):
458
"""Used when renaming and both source and dest exist."""
460
_fmt = ("Could not rename %(source)s => %(dest)s because both files exist."
463
def __init__(self, source, dest, extra=None):
464
BzrError.__init__(self)
465
self.source = str(source)
466
self.dest = str(dest)
468
self.extra = ' ' + str(extra)
473
class NotADirectory(PathError):
475
_fmt = '"%(path)s" is not a directory %(extra)s'
478
class NotInWorkingDirectory(PathError):
480
_fmt = '"%(path)s" is not in the working directory %(extra)s'
483
class DirectoryNotEmpty(PathError):
485
_fmt = 'Directory not empty: "%(path)s"%(extra)s'
488
class ReadingCompleted(InternalBzrError):
490
_fmt = ("The MediumRequest '%(request)s' has already had finish_reading "
491
"called upon it - the request has been completed and no more "
494
def __init__(self, request):
495
self.request = request
498
class ResourceBusy(PathError):
500
_fmt = 'Device or resource busy: "%(path)s"%(extra)s'
503
class PermissionDenied(PathError):
505
_fmt = 'Permission denied: "%(path)s"%(extra)s'
508
class InvalidURL(PathError):
510
_fmt = 'Invalid url supplied to transport: "%(path)s"%(extra)s'
513
class InvalidURLJoin(PathError):
515
_fmt = 'Invalid URL join request: "%(args)s"%(extra)s'
517
def __init__(self, msg, base, args):
518
PathError.__init__(self, base, msg)
519
self.args = [base] + list(args)
522
class UnknownHook(BzrError):
524
_fmt = "The %(type)s hook '%(hook)s' is unknown in this version of bzrlib."
526
def __init__(self, hook_type, hook_name):
527
BzrError.__init__(self)
528
self.type = hook_type
529
self.hook = hook_name
532
class UnsupportedProtocol(PathError):
534
_fmt = 'Unsupported protocol for url "%(path)s"%(extra)s'
536
def __init__(self, url, extra):
537
PathError.__init__(self, url, extra=extra)
540
class ReadError(PathError):
542
_fmt = """Error reading from %(path)r."""
545
class ShortReadvError(PathError):
547
_fmt = ('readv() read %(actual)s bytes rather than %(length)s bytes'
548
' at %(offset)s for "%(path)s"%(extra)s')
550
internal_error = True
552
def __init__(self, path, offset, length, actual, extra=None):
553
PathError.__init__(self, path, extra=extra)
559
class PathNotChild(PathError):
561
_fmt = 'Path "%(path)s" is not a child of path "%(base)s"%(extra)s'
563
internal_error = True
565
def __init__(self, path, base, extra=None):
566
BzrError.__init__(self)
570
self.extra = ': ' + str(extra)
575
class InvalidNormalization(PathError):
577
_fmt = 'Path "%(path)s" is not unicode normalized'
580
# TODO: This is given a URL; we try to unescape it but doing that from inside
581
# the exception object is a bit undesirable.
582
# TODO: Probably this behavior of should be a common superclass
583
class NotBranchError(PathError):
585
_fmt = 'Not a branch: "%(path)s".'
587
def __init__(self, path):
588
import bzrlib.urlutils as urlutils
589
self.path = urlutils.unescape_for_display(path, 'ascii')
592
class NoSubmitBranch(PathError):
594
_fmt = 'No submit branch available for branch "%(path)s"'
596
def __init__(self, branch):
597
import bzrlib.urlutils as urlutils
598
self.path = urlutils.unescape_for_display(branch.base, 'ascii')
601
class AlreadyBranchError(PathError):
603
_fmt = 'Already a branch: "%(path)s".'
606
class BranchExistsWithoutWorkingTree(PathError):
608
_fmt = 'Directory contains a branch, but no working tree \
609
(use bzr checkout if you wish to build a working tree): "%(path)s"'
612
class AtomicFileAlreadyClosed(PathError):
614
_fmt = ('"%(function)s" called on an AtomicFile after it was closed:'
617
def __init__(self, path, function):
618
PathError.__init__(self, path=path, extra=None)
619
self.function = function
622
class InaccessibleParent(PathError):
624
_fmt = ('Parent not accessible given base "%(base)s" and'
625
' relative path "%(path)s"')
627
def __init__(self, path, base):
628
PathError.__init__(self, path)
632
class NoRepositoryPresent(BzrError):
634
_fmt = 'No repository present: "%(path)s"'
635
def __init__(self, bzrdir):
636
BzrError.__init__(self)
637
self.path = bzrdir.transport.clone('..').base
640
class FileInWrongBranch(BzrError):
642
_fmt = 'File "%(path)s" in not in branch %(branch_base)s.'
644
def __init__(self, branch, path):
645
BzrError.__init__(self)
647
self.branch_base = branch.base
651
class UnsupportedFormatError(BzrError):
653
_fmt = "Unsupported branch format: %(format)s\nPlease run 'bzr upgrade'"
656
class UnknownFormatError(BzrError):
658
_fmt = "Unknown branch format: %(format)r"
661
class IncompatibleFormat(BzrError):
663
_fmt = "Format %(format)s is not compatible with .bzr version %(bzrdir)s."
665
def __init__(self, format, bzrdir_format):
666
BzrError.__init__(self)
668
self.bzrdir = bzrdir_format
671
class IncompatibleRepositories(BzrError):
673
_fmt = "Repository %(target)s is not compatible with repository"\
676
def __init__(self, source, target):
677
BzrError.__init__(self, target=target, source=source)
680
class IncompatibleRevision(BzrError):
682
_fmt = "Revision is not compatible with %(repo_format)s"
684
def __init__(self, repo_format):
685
BzrError.__init__(self)
686
self.repo_format = repo_format
689
class AlreadyVersionedError(BzrError):
690
"""Used when a path is expected not to be versioned, but it is."""
692
_fmt = "%(context_info)s%(path)s is already versioned."
694
def __init__(self, path, context_info=None):
695
"""Construct a new AlreadyVersionedError.
697
:param path: This is the path which is versioned,
698
which should be in a user friendly form.
699
:param context_info: If given, this is information about the context,
700
which could explain why this is expected to not be versioned.
702
BzrError.__init__(self)
704
if context_info is None:
705
self.context_info = ''
707
self.context_info = context_info + ". "
710
class NotVersionedError(BzrError):
711
"""Used when a path is expected to be versioned, but it is not."""
713
_fmt = "%(context_info)s%(path)s is not versioned."
715
def __init__(self, path, context_info=None):
716
"""Construct a new NotVersionedError.
718
:param path: This is the path which is not versioned,
719
which should be in a user friendly form.
720
:param context_info: If given, this is information about the context,
721
which could explain why this is expected to be versioned.
723
BzrError.__init__(self)
725
if context_info is None:
726
self.context_info = ''
728
self.context_info = context_info + ". "
731
class PathsNotVersionedError(BzrError):
732
"""Used when reporting several paths which are not versioned"""
734
_fmt = "Path(s) are not versioned: %(paths_as_string)s"
736
def __init__(self, paths):
737
from bzrlib.osutils import quotefn
738
BzrError.__init__(self)
740
self.paths_as_string = ' '.join([quotefn(p) for p in paths])
743
class PathsDoNotExist(BzrError):
745
_fmt = "Path(s) do not exist: %(paths_as_string)s%(extra)s"
747
# used when reporting that paths are neither versioned nor in the working
750
def __init__(self, paths, extra=None):
752
from bzrlib.osutils import quotefn
753
BzrError.__init__(self)
755
self.paths_as_string = ' '.join([quotefn(p) for p in paths])
757
self.extra = ': ' + str(extra)
762
class BadFileKindError(BzrError):
764
_fmt = 'Cannot operate on "%(filename)s" of unsupported kind "%(kind)s"'
766
def __init__(self, filename, kind):
767
BzrError.__init__(self, filename=filename, kind=kind)
770
class ForbiddenControlFileError(BzrError):
772
_fmt = 'Cannot operate on "%(filename)s" because it is a control file'
775
class LockError(InternalBzrError):
777
_fmt = "Lock error: %(msg)s"
779
# All exceptions from the lock/unlock functions should be from
780
# this exception class. They will be translated as necessary. The
781
# original exception is available as e.original_error
783
# New code should prefer to raise specific subclasses
784
def __init__(self, message):
785
# Python 2.5 uses a slot for StandardError.message,
786
# so use a different variable name. We now work around this in
787
# BzrError.__str__, but this member name is kept for compatability.
791
class LockActive(LockError):
793
_fmt = "The lock for '%(lock_description)s' is in use and cannot be broken."
795
internal_error = False
797
def __init__(self, lock_description):
798
self.lock_description = lock_description
801
class CommitNotPossible(LockError):
803
_fmt = "A commit was attempted but we do not have a write lock open."
809
class AlreadyCommitted(LockError):
811
_fmt = "A rollback was requested, but is not able to be accomplished."
817
class ReadOnlyError(LockError):
819
_fmt = "A write attempt was made in a read only transaction on %(obj)s"
821
# TODO: There should also be an error indicating that you need a write
822
# lock and don't have any lock at all... mbp 20070226
824
def __init__(self, obj):
828
class ReadOnlyLockError(LockError):
830
_fmt = "Cannot acquire write lock on %(fname)s. %(msg)s"
832
def __init__(self, fname, msg):
833
LockError.__init__(self, '')
838
class OutSideTransaction(BzrError):
840
_fmt = ("A transaction related operation was attempted after"
841
" the transaction finished.")
844
class ObjectNotLocked(LockError):
846
_fmt = "%(obj)r is not locked"
848
# this can indicate that any particular object is not locked; see also
849
# LockNotHeld which means that a particular *lock* object is not held by
850
# the caller -- perhaps they should be unified.
851
def __init__(self, obj):
855
class ReadOnlyObjectDirtiedError(ReadOnlyError):
857
_fmt = "Cannot change object %(obj)r in read only transaction"
859
def __init__(self, obj):
863
class UnlockableTransport(LockError):
865
_fmt = "Cannot lock: transport is read only: %(transport)s"
867
def __init__(self, transport):
868
self.transport = transport
871
class LockContention(LockError):
873
_fmt = 'Could not acquire lock "%(lock)s"'
874
# TODO: show full url for lock, combining the transport and relative
877
internal_error = False
879
def __init__(self, lock):
883
class LockBroken(LockError):
885
_fmt = ("Lock was broken while still open: %(lock)s"
886
" - check storage consistency!")
888
internal_error = False
890
def __init__(self, lock):
894
class LockBreakMismatch(LockError):
896
_fmt = ("Lock was released and re-acquired before being broken:"
897
" %(lock)s: held by %(holder)r, wanted to break %(target)r")
899
internal_error = False
901
def __init__(self, lock, holder, target):
907
class LockNotHeld(LockError):
909
_fmt = "Lock not held: %(lock)s"
911
internal_error = False
913
def __init__(self, lock):
917
class TokenLockingNotSupported(LockError):
919
_fmt = "The object %(obj)s does not support token specifying a token when locking."
921
def __init__(self, obj):
925
class TokenMismatch(LockBroken):
927
_fmt = "The lock token %(given_token)r does not match lock token %(lock_token)r."
929
internal_error = True
931
def __init__(self, given_token, lock_token):
932
self.given_token = given_token
933
self.lock_token = lock_token
936
class PointlessCommit(BzrError):
938
_fmt = "No changes to commit"
941
class CannotCommitSelectedFileMerge(BzrError):
943
_fmt = 'Selected-file commit of merges is not supported yet:'\
944
' files %(files_str)s'
946
def __init__(self, files):
947
files_str = ', '.join(files)
948
BzrError.__init__(self, files=files, files_str=files_str)
951
class BadCommitMessageEncoding(BzrError):
953
_fmt = 'The specified commit message contains characters unsupported by '\
954
'the current encoding.'
957
class UpgradeReadonly(BzrError):
959
_fmt = "Upgrade URL cannot work with readonly URLs."
962
class UpToDateFormat(BzrError):
964
_fmt = "The branch format %(format)s is already at the most recent format."
966
def __init__(self, format):
967
BzrError.__init__(self)
971
class StrictCommitFailed(Exception):
973
_fmt = "Commit refused because there are unknowns in the tree."
976
class NoSuchRevision(InternalBzrError):
978
_fmt = "%(branch)s has no revision %(revision)s"
980
def __init__(self, branch, revision):
981
# 'branch' may sometimes be an internal object like a KnitRevisionStore
982
BzrError.__init__(self, branch=branch, revision=revision)
985
# zero_ninetyone: this exception is no longer raised and should be removed
986
class NotLeftParentDescendant(InternalBzrError):
988
_fmt = ("Revision %(old_revision)s is not the left parent of"
989
" %(new_revision)s, but branch %(branch_location)s expects this")
991
def __init__(self, branch, old_revision, new_revision):
992
BzrError.__init__(self, branch_location=branch.base,
993
old_revision=old_revision,
994
new_revision=new_revision)
997
class RangeInChangeOption(BzrError):
999
_fmt = "Option --change does not accept revision ranges"
1002
class NoSuchRevisionSpec(BzrError):
1004
_fmt = "No namespace registered for string: %(spec)r"
1006
def __init__(self, spec):
1007
BzrError.__init__(self, spec=spec)
1010
class NoSuchRevisionInTree(NoSuchRevision):
1011
"""When using Tree.revision_tree, and the revision is not accessible."""
1013
_fmt = "The revision id {%(revision_id)s} is not present in the tree %(tree)s."
1015
def __init__(self, tree, revision_id):
1016
BzrError.__init__(self)
1018
self.revision_id = revision_id
1021
class InvalidRevisionSpec(BzrError):
1023
_fmt = ("Requested revision: %(spec)r does not exist in branch:"
1024
" %(branch)s%(extra)s")
1026
def __init__(self, spec, branch, extra=None):
1027
BzrError.__init__(self, branch=branch, spec=spec)
1029
self.extra = '\n' + str(extra)
1034
class HistoryMissing(BzrError):
1036
_fmt = "%(branch)s is missing %(object_type)s {%(object_id)s}"
1039
class AppendRevisionsOnlyViolation(BzrError):
1041
_fmt = ('Operation denied because it would change the main history,'
1042
' which is not permitted by the append_revisions_only setting on'
1043
' branch "%(location)s".')
1045
def __init__(self, location):
1046
import bzrlib.urlutils as urlutils
1047
location = urlutils.unescape_for_display(location, 'ascii')
1048
BzrError.__init__(self, location=location)
1051
class DivergedBranches(BzrError):
1053
_fmt = ("These branches have diverged."
1054
" Use the merge command to reconcile them.")
1056
def __init__(self, branch1, branch2):
1057
self.branch1 = branch1
1058
self.branch2 = branch2
1061
class NotLefthandHistory(InternalBzrError):
1063
_fmt = "Supplied history does not follow left-hand parents"
1065
def __init__(self, history):
1066
BzrError.__init__(self, history=history)
1069
class UnrelatedBranches(BzrError):
1071
_fmt = ("Branches have no common ancestor, and"
1072
" no merge base revision was specified.")
1075
class NoCommonAncestor(BzrError):
1077
_fmt = "Revisions have no common ancestor: %(revision_a)s %(revision_b)s"
1079
def __init__(self, revision_a, revision_b):
1080
self.revision_a = revision_a
1081
self.revision_b = revision_b
1084
class NoCommonRoot(BzrError):
1086
_fmt = ("Revisions are not derived from the same root: "
1087
"%(revision_a)s %(revision_b)s.")
1089
def __init__(self, revision_a, revision_b):
1090
BzrError.__init__(self, revision_a=revision_a, revision_b=revision_b)
1093
class NotAncestor(BzrError):
1095
_fmt = "Revision %(rev_id)s is not an ancestor of %(not_ancestor_id)s"
1097
def __init__(self, rev_id, not_ancestor_id):
1098
BzrError.__init__(self, rev_id=rev_id,
1099
not_ancestor_id=not_ancestor_id)
1102
class InstallFailed(BzrError):
1104
def __init__(self, revisions):
1105
revision_str = ", ".join(str(r) for r in revisions)
1106
msg = "Could not install revisions:\n%s" % revision_str
1107
BzrError.__init__(self, msg)
1108
self.revisions = revisions
1111
class AmbiguousBase(BzrError):
1113
def __init__(self, bases):
1114
warn("BzrError AmbiguousBase has been deprecated as of bzrlib 0.8.",
1116
msg = ("The correct base is unclear, because %s are all equally close"
1118
BzrError.__init__(self, msg)
1122
class NoCommits(BzrError):
1124
_fmt = "Branch %(branch)s has no commits."
1126
def __init__(self, branch):
1127
BzrError.__init__(self, branch=branch)
1130
class UnlistableStore(BzrError):
1132
def __init__(self, store):
1133
BzrError.__init__(self, "Store %s is not listable" % store)
1137
class UnlistableBranch(BzrError):
1139
def __init__(self, br):
1140
BzrError.__init__(self, "Stores for branch %s are not listable" % br)
1143
class BoundBranchOutOfDate(BzrError):
1145
_fmt = ("Bound branch %(branch)s is out of date with master branch"
1148
def __init__(self, branch, master):
1149
BzrError.__init__(self)
1150
self.branch = branch
1151
self.master = master
1154
class CommitToDoubleBoundBranch(BzrError):
1156
_fmt = ("Cannot commit to branch %(branch)s."
1157
" It is bound to %(master)s, which is bound to %(remote)s.")
1159
def __init__(self, branch, master, remote):
1160
BzrError.__init__(self)
1161
self.branch = branch
1162
self.master = master
1163
self.remote = remote
1166
class OverwriteBoundBranch(BzrError):
1168
_fmt = "Cannot pull --overwrite to a branch which is bound %(branch)s"
1170
def __init__(self, branch):
1171
BzrError.__init__(self)
1172
self.branch = branch
1175
class BoundBranchConnectionFailure(BzrError):
1177
_fmt = ("Unable to connect to target of bound branch %(branch)s"
1178
" => %(target)s: %(error)s")
1180
def __init__(self, branch, target, error):
1181
BzrError.__init__(self)
1182
self.branch = branch
1183
self.target = target
1187
class WeaveError(BzrError):
1189
_fmt = "Error in processing weave: %(message)s"
1191
def __init__(self, message=None):
1192
BzrError.__init__(self)
1193
self.message = message
1196
class WeaveRevisionAlreadyPresent(WeaveError):
1198
_fmt = "Revision {%(revision_id)s} already present in %(weave)s"
1200
def __init__(self, revision_id, weave):
1202
WeaveError.__init__(self)
1203
self.revision_id = revision_id
1207
class WeaveRevisionNotPresent(WeaveError):
1209
_fmt = "Revision {%(revision_id)s} not present in %(weave)s"
1211
def __init__(self, revision_id, weave):
1212
WeaveError.__init__(self)
1213
self.revision_id = revision_id
1217
class WeaveFormatError(WeaveError):
1219
_fmt = "Weave invariant violated: %(what)s"
1221
def __init__(self, what):
1222
WeaveError.__init__(self)
1226
class WeaveParentMismatch(WeaveError):
1228
_fmt = "Parents are mismatched between two revisions."
1231
class WeaveInvalidChecksum(WeaveError):
1233
_fmt = "Text did not match it's checksum: %(message)s"
1236
class WeaveTextDiffers(WeaveError):
1238
_fmt = ("Weaves differ on text content. Revision:"
1239
" {%(revision_id)s}, %(weave_a)s, %(weave_b)s")
1241
def __init__(self, revision_id, weave_a, weave_b):
1242
WeaveError.__init__(self)
1243
self.revision_id = revision_id
1244
self.weave_a = weave_a
1245
self.weave_b = weave_b
1248
class WeaveTextDiffers(WeaveError):
1250
_fmt = ("Weaves differ on text content. Revision:"
1251
" {%(revision_id)s}, %(weave_a)s, %(weave_b)s")
1253
def __init__(self, revision_id, weave_a, weave_b):
1254
WeaveError.__init__(self)
1255
self.revision_id = revision_id
1256
self.weave_a = weave_a
1257
self.weave_b = weave_b
1260
class VersionedFileError(BzrError):
1262
_fmt = "Versioned file error"
1265
class RevisionNotPresent(VersionedFileError):
1267
_fmt = 'Revision {%(revision_id)s} not present in "%(file_id)s".'
1269
def __init__(self, revision_id, file_id):
1270
VersionedFileError.__init__(self)
1271
self.revision_id = revision_id
1272
self.file_id = file_id
1275
class RevisionAlreadyPresent(VersionedFileError):
1277
_fmt = 'Revision {%(revision_id)s} already present in "%(file_id)s".'
1279
def __init__(self, revision_id, file_id):
1280
VersionedFileError.__init__(self)
1281
self.revision_id = revision_id
1282
self.file_id = file_id
1285
class VersionedFileInvalidChecksum(VersionedFileError):
1287
_fmt = "Text did not match its checksum: %(message)s"
1290
class KnitError(InternalBzrError):
1295
class KnitCorrupt(KnitError):
1297
_fmt = "Knit %(filename)s corrupt: %(how)s"
1299
def __init__(self, filename, how):
1300
KnitError.__init__(self)
1301
self.filename = filename
1305
class KnitDataStreamIncompatible(KnitError):
1307
_fmt = "Cannot insert knit data stream of format \"%(stream_format)s\" into knit of format \"%(target_format)s\"."
1309
def __init__(self, stream_format, target_format):
1310
self.stream_format = stream_format
1311
self.target_format = target_format
1314
class KnitHeaderError(KnitError):
1316
_fmt = 'Knit header error: %(badline)r unexpected for file "%(filename)s".'
1318
def __init__(self, badline, filename):
1319
KnitError.__init__(self)
1320
self.badline = badline
1321
self.filename = filename
1323
class KnitIndexUnknownMethod(KnitError):
1324
"""Raised when we don't understand the storage method.
1326
Currently only 'fulltext' and 'line-delta' are supported.
1329
_fmt = ("Knit index %(filename)s does not have a known method"
1330
" in options: %(options)r")
1332
def __init__(self, filename, options):
1333
KnitError.__init__(self)
1334
self.filename = filename
1335
self.options = options
1338
class NoSuchExportFormat(BzrError):
1340
_fmt = "Export format %(format)r not supported"
1342
def __init__(self, format):
1343
BzrError.__init__(self)
1344
self.format = format
1347
class TransportError(BzrError):
1349
_fmt = "Transport error: %(msg)s %(orig_error)s"
1351
def __init__(self, msg=None, orig_error=None):
1352
if msg is None and orig_error is not None:
1353
msg = str(orig_error)
1354
if orig_error is None:
1359
self.orig_error = orig_error
1360
BzrError.__init__(self)
1363
class TooManyConcurrentRequests(InternalBzrError):
1365
_fmt = ("The medium '%(medium)s' has reached its concurrent request limit."
1366
" Be sure to finish_writing and finish_reading on the"
1367
" currently open request.")
1369
def __init__(self, medium):
1370
self.medium = medium
1373
class SmartProtocolError(TransportError):
1375
_fmt = "Generic bzr smart protocol error: %(details)s"
1377
def __init__(self, details):
1378
self.details = details
1381
# A set of semi-meaningful errors which can be thrown
1382
class TransportNotPossible(TransportError):
1384
_fmt = "Transport operation not possible: %(msg)s %(orig_error)s"
1387
class ConnectionError(TransportError):
1389
_fmt = "Connection error: %(msg)s %(orig_error)s"
1392
class SocketConnectionError(ConnectionError):
1394
_fmt = "%(msg)s %(host)s%(port)s%(orig_error)s"
1396
def __init__(self, host, port=None, msg=None, orig_error=None):
1398
msg = 'Failed to connect to'
1399
if orig_error is None:
1402
orig_error = '; ' + str(orig_error)
1403
ConnectionError.__init__(self, msg=msg, orig_error=orig_error)
1408
self.port = ':%s' % port
1411
class ConnectionReset(TransportError):
1413
_fmt = "Connection closed: %(msg)s %(orig_error)s"
1416
class InvalidRange(TransportError):
1418
_fmt = "Invalid range access in %(path)s at %(offset)s."
1420
def __init__(self, path, offset):
1421
TransportError.__init__(self, ("Invalid range access in %s at %d"
1424
self.offset = offset
1427
class InvalidHttpResponse(TransportError):
1429
_fmt = "Invalid http response for %(path)s: %(msg)s"
1431
def __init__(self, path, msg, orig_error=None):
1433
TransportError.__init__(self, msg, orig_error=orig_error)
1436
class InvalidHttpRange(InvalidHttpResponse):
1438
_fmt = "Invalid http range %(range)r for %(path)s: %(msg)s"
1440
def __init__(self, path, range, msg):
1442
InvalidHttpResponse.__init__(self, path, msg)
1445
class InvalidHttpContentType(InvalidHttpResponse):
1447
_fmt = 'Invalid http Content-type "%(ctype)s" for %(path)s: %(msg)s'
1449
def __init__(self, path, ctype, msg):
1451
InvalidHttpResponse.__init__(self, path, msg)
1454
class RedirectRequested(TransportError):
1456
_fmt = '%(source)s is%(permanently)s redirected to %(target)s'
1458
def __init__(self, source, target, is_permament=False, qual_proto=None):
1459
self.source = source
1460
self.target = target
1462
self.permanently = ' permanently'
1464
self.permanently = ''
1465
self.is_permament = is_permament
1466
self._qualified_proto = qual_proto
1467
TransportError.__init__(self)
1469
def _requalify_url(self, url):
1470
"""Restore the qualified proto in front of the url"""
1471
# When this exception is raised, source and target are in
1472
# user readable format. But some transports may use a
1473
# different proto (http+urllib:// will present http:// to
1474
# the user. If a qualified proto is specified, the code
1475
# trapping the exception can get the qualified urls to
1476
# properly handle the redirection themself (creating a
1477
# new transport object from the target url for example).
1478
# But checking that the scheme of the original and
1479
# redirected urls are the same can be tricky. (see the
1480
# FIXME in BzrDir.open_from_transport for the unique use
1482
if self._qualified_proto is None:
1485
# The TODO related to NotBranchError mention that doing
1486
# that kind of manipulation on the urls may not be the
1487
# exception object job. On the other hand, this object is
1488
# the interface between the code and the user so
1489
# presenting the urls in different ways is indeed its
1492
proto, netloc, path, query, fragment = urlparse.urlsplit(url)
1493
return urlparse.urlunsplit((self._qualified_proto, netloc, path,
1496
def get_source_url(self):
1497
return self._requalify_url(self.source)
1499
def get_target_url(self):
1500
return self._requalify_url(self.target)
1503
class TooManyRedirections(TransportError):
1505
_fmt = "Too many redirections"
1507
class ConflictsInTree(BzrError):
1509
_fmt = "Working tree has conflicts."
1512
class ParseConfigError(BzrError):
1514
def __init__(self, errors, filename):
1515
if filename is None:
1517
message = "Error(s) parsing config file %s:\n%s" % \
1518
(filename, ('\n'.join(e.message for e in errors)))
1519
BzrError.__init__(self, message)
1522
class NoEmailInUsername(BzrError):
1524
_fmt = "%(username)r does not seem to contain a reasonable email address"
1526
def __init__(self, username):
1527
BzrError.__init__(self)
1528
self.username = username
1531
class SigningFailed(BzrError):
1533
_fmt = 'Failed to gpg sign data with command "%(command_line)s"'
1535
def __init__(self, command_line):
1536
BzrError.__init__(self, command_line=command_line)
1539
class WorkingTreeNotRevision(BzrError):
1541
_fmt = ("The working tree for %(basedir)s has changed since"
1542
" the last commit, but weave merge requires that it be"
1545
def __init__(self, tree):
1546
BzrError.__init__(self, basedir=tree.basedir)
1549
class CantReprocessAndShowBase(BzrError):
1551
_fmt = ("Can't reprocess and show base, because reprocessing obscures "
1552
"the relationship of conflicting lines to the base")
1555
class GraphCycleError(BzrError):
1557
_fmt = "Cycle in graph %(graph)r"
1559
def __init__(self, graph):
1560
BzrError.__init__(self)
1564
class WritingCompleted(InternalBzrError):
1566
_fmt = ("The MediumRequest '%(request)s' has already had finish_writing "
1567
"called upon it - accept bytes may not be called anymore.")
1569
def __init__(self, request):
1570
self.request = request
1573
class WritingNotComplete(InternalBzrError):
1575
_fmt = ("The MediumRequest '%(request)s' has not has finish_writing "
1576
"called upon it - until the write phase is complete no "
1577
"data may be read.")
1579
def __init__(self, request):
1580
self.request = request
1583
class NotConflicted(BzrError):
1585
_fmt = "File %(filename)s is not conflicted."
1587
def __init__(self, filename):
1588
BzrError.__init__(self)
1589
self.filename = filename
1592
class MediumNotConnected(InternalBzrError):
1594
_fmt = """The medium '%(medium)s' is not connected."""
1596
def __init__(self, medium):
1597
self.medium = medium
1600
class MustUseDecorated(Exception):
1602
_fmt = "A decorating function has requested its original command be used."
1605
class NoBundleFound(BzrError):
1607
_fmt = 'No bundle was found in "%(filename)s".'
1609
def __init__(self, filename):
1610
BzrError.__init__(self)
1611
self.filename = filename
1614
class BundleNotSupported(BzrError):
1616
_fmt = "Unable to handle bundle version %(version)s: %(msg)s"
1618
def __init__(self, version, msg):
1619
BzrError.__init__(self)
1620
self.version = version
1624
class MissingText(BzrError):
1626
_fmt = ("Branch %(base)s is missing revision"
1627
" %(text_revision)s of %(file_id)s")
1629
def __init__(self, branch, text_revision, file_id):
1630
BzrError.__init__(self)
1631
self.branch = branch
1632
self.base = branch.base
1633
self.text_revision = text_revision
1634
self.file_id = file_id
1637
class DuplicateFileId(BzrError):
1639
_fmt = "File id {%(file_id)s} already exists in inventory as %(entry)s"
1641
def __init__(self, file_id, entry):
1642
BzrError.__init__(self)
1643
self.file_id = file_id
1647
class DuplicateKey(BzrError):
1649
_fmt = "Key %(key)s is already present in map"
1652
class DuplicateHelpPrefix(BzrError):
1654
_fmt = "The prefix %(prefix)s is in the help search path twice."
1656
def __init__(self, prefix):
1657
self.prefix = prefix
1660
class MalformedTransform(BzrError):
1662
_fmt = "Tree transform is malformed %(conflicts)r"
1665
class NoFinalPath(BzrError):
1667
_fmt = ("No final name for trans_id %(trans_id)r\n"
1668
"file-id: %(file_id)r\n"
1669
"root trans-id: %(root_trans_id)r\n")
1671
def __init__(self, trans_id, transform):
1672
self.trans_id = trans_id
1673
self.file_id = transform.final_file_id(trans_id)
1674
self.root_trans_id = transform.root
1677
class BzrBadParameter(InternalBzrError):
1679
_fmt = "Bad parameter: %(param)r"
1681
# This exception should never be thrown, but it is a base class for all
1682
# parameter-to-function errors.
1684
def __init__(self, param):
1685
BzrError.__init__(self)
1689
class BzrBadParameterNotUnicode(BzrBadParameter):
1691
_fmt = "Parameter %(param)s is neither unicode nor utf8."
1694
class ReusingTransform(BzrError):
1696
_fmt = "Attempt to reuse a transform that has already been applied."
1699
class CantMoveRoot(BzrError):
1701
_fmt = "Moving the root directory is not supported at this time"
1704
class BzrMoveFailedError(BzrError):
1706
_fmt = "Could not move %(from_path)s%(operator)s %(to_path)s%(extra)s"
1708
def __init__(self, from_path='', to_path='', extra=None):
1709
BzrError.__init__(self)
1711
self.extra = ': ' + str(extra)
1715
has_from = len(from_path) > 0
1716
has_to = len(to_path) > 0
1718
self.from_path = osutils.splitpath(from_path)[-1]
1723
self.to_path = osutils.splitpath(to_path)[-1]
1728
if has_from and has_to:
1729
self.operator = " =>"
1731
self.from_path = "from " + from_path
1733
self.operator = "to"
1735
self.operator = "file"
1738
class BzrRenameFailedError(BzrMoveFailedError):
1740
_fmt = "Could not rename %(from_path)s%(operator)s %(to_path)s%(extra)s"
1742
def __init__(self, from_path, to_path, extra=None):
1743
BzrMoveFailedError.__init__(self, from_path, to_path, extra)
1745
class BzrRemoveChangedFilesError(BzrError):
1746
"""Used when user is trying to remove changed files."""
1748
_fmt = ("Can't safely remove modified or unknown files:\n"
1749
"%(changes_as_text)s"
1750
"Use --keep to not delete them, or --force to delete them regardless.")
1752
def __init__(self, tree_delta):
1753
BzrError.__init__(self)
1754
self.changes_as_text = tree_delta.get_changes_as_text()
1755
#self.paths_as_string = '\n'.join(changed_files)
1756
#self.paths_as_string = '\n'.join([quotefn(p) for p in changed_files])
1759
class BzrBadParameterNotString(BzrBadParameter):
1761
_fmt = "Parameter %(param)s is not a string or unicode string."
1764
class BzrBadParameterMissing(BzrBadParameter):
1766
_fmt = "Parameter $(param)s is required but not present."
1769
class BzrBadParameterUnicode(BzrBadParameter):
1771
_fmt = ("Parameter %(param)s is unicode but"
1772
" only byte-strings are permitted.")
1775
class BzrBadParameterContainsNewline(BzrBadParameter):
1777
_fmt = "Parameter %(param)s contains a newline."
1780
class DependencyNotPresent(BzrError):
1782
_fmt = 'Unable to import library "%(library)s": %(error)s'
1784
def __init__(self, library, error):
1785
BzrError.__init__(self, library=library, error=error)
1788
class ParamikoNotPresent(DependencyNotPresent):
1790
_fmt = "Unable to import paramiko (required for sftp support): %(error)s"
1792
def __init__(self, error):
1793
DependencyNotPresent.__init__(self, 'paramiko', error)
1796
class PointlessMerge(BzrError):
1798
_fmt = "Nothing to merge."
1801
class UninitializableFormat(BzrError):
1803
_fmt = "Format %(format)s cannot be initialised by this version of bzr."
1805
def __init__(self, format):
1806
BzrError.__init__(self)
1807
self.format = format
1810
class BadConversionTarget(BzrError):
1812
_fmt = "Cannot convert to format %(format)s. %(problem)s"
1814
def __init__(self, problem, format):
1815
BzrError.__init__(self)
1816
self.problem = problem
1817
self.format = format
1820
class NoDiff(BzrError):
1822
_fmt = "Diff is not installed on this machine: %(msg)s"
1824
def __init__(self, msg):
1825
BzrError.__init__(self, msg=msg)
1828
class NoDiff3(BzrError):
1830
_fmt = "Diff3 is not installed on this machine."
1833
class ExistingContent(BzrError):
1834
# Added in bzrlib 0.92, used by VersionedFile.add_lines.
1836
_fmt = "The content being inserted is already present."
1839
class ExistingLimbo(BzrError):
1841
_fmt = """This tree contains left-over files from a failed operation.
1842
Please examine %(limbo_dir)s to see if it contains any files you wish to
1843
keep, and delete it when you are done."""
1845
def __init__(self, limbo_dir):
1846
BzrError.__init__(self)
1847
self.limbo_dir = limbo_dir
1850
class ExistingPendingDeletion(BzrError):
1852
_fmt = """This tree contains left-over files from a failed operation.
1853
Please examine %(pending_deletion)s to see if it contains any files you
1854
wish to keep, and delete it when you are done."""
1856
def __init__(self, pending_deletion):
1857
BzrError.__init__(self, pending_deletion=pending_deletion)
1860
class ImmortalLimbo(BzrError):
1862
_fmt = """Unable to delete transform temporary directory %(limbo_dir)s.
1863
Please examine %(limbo_dir)s to see if it contains any files you wish to
1864
keep, and delete it when you are done."""
1866
def __init__(self, limbo_dir):
1867
BzrError.__init__(self)
1868
self.limbo_dir = limbo_dir
1871
class ImmortalPendingDeletion(BzrError):
1873
_fmt = """Unable to delete transform temporary directory
1874
%(pending_deletion)s. Please examine %(pending_deletions)s to see if it
1875
contains any files you wish to keep, and delete it when you are done."""
1877
def __init__(self, pending_deletion):
1878
BzrError.__init__(self, pending_deletion=pending_deletion)
1881
class OutOfDateTree(BzrError):
1883
_fmt = "Working tree is out of date, please run 'bzr update'."
1885
def __init__(self, tree):
1886
BzrError.__init__(self)
1890
class PublicBranchOutOfDate(BzrError):
1892
_fmt = 'Public branch "%(public_location)s" lacks revision '\
1895
def __init__(self, public_location, revstring):
1896
import bzrlib.urlutils as urlutils
1897
public_location = urlutils.unescape_for_display(public_location,
1899
BzrError.__init__(self, public_location=public_location,
1900
revstring=revstring)
1903
class MergeModifiedFormatError(BzrError):
1905
_fmt = "Error in merge modified format"
1908
class ConflictFormatError(BzrError):
1910
_fmt = "Format error in conflict listings"
1913
class CorruptRepository(BzrError):
1915
_fmt = ("An error has been detected in the repository %(repo_path)s.\n"
1916
"Please run bzr reconcile on this repository.")
1918
def __init__(self, repo):
1919
BzrError.__init__(self)
1920
self.repo_path = repo.bzrdir.root_transport.base
1923
class UpgradeRequired(BzrError):
1925
_fmt = "To use this feature you must upgrade your branch at %(path)s."
1927
def __init__(self, path):
1928
BzrError.__init__(self)
1932
class LocalRequiresBoundBranch(BzrError):
1934
_fmt = "Cannot perform local-only commits on unbound branches."
1937
class MissingProgressBarFinish(BzrError):
1939
_fmt = "A nested progress bar was not 'finished' correctly."
1942
class InvalidProgressBarType(BzrError):
1944
_fmt = ("Environment variable BZR_PROGRESS_BAR='%(bar_type)s"
1945
" is not a supported type Select one of: %(valid_types)s")
1947
def __init__(self, bar_type, valid_types):
1948
BzrError.__init__(self, bar_type=bar_type, valid_types=valid_types)
1951
class UnsupportedOperation(BzrError):
1953
_fmt = ("The method %(mname)s is not supported on"
1954
" objects of type %(tname)s.")
1956
def __init__(self, method, method_self):
1957
self.method = method
1958
self.mname = method.__name__
1959
self.tname = type(method_self).__name__
1962
class CannotSetRevisionId(UnsupportedOperation):
1963
"""Raised when a commit is attempting to set a revision id but cant."""
1966
class NonAsciiRevisionId(UnsupportedOperation):
1967
"""Raised when a commit is attempting to set a non-ascii revision id
1972
class BinaryFile(BzrError):
1974
_fmt = "File is binary but should be text."
1977
class IllegalPath(BzrError):
1979
_fmt = "The path %(path)s is not permitted on this platform"
1981
def __init__(self, path):
1982
BzrError.__init__(self)
1986
class TestamentMismatch(BzrError):
1988
_fmt = """Testament did not match expected value.
1989
For revision_id {%(revision_id)s}, expected {%(expected)s}, measured
1992
def __init__(self, revision_id, expected, measured):
1993
self.revision_id = revision_id
1994
self.expected = expected
1995
self.measured = measured
1998
class NotABundle(BzrError):
2000
_fmt = "Not a bzr revision-bundle: %(text)r"
2002
def __init__(self, text):
2003
BzrError.__init__(self)
2007
class BadBundle(BzrError):
2009
_fmt = "Bad bzr revision-bundle: %(text)r"
2011
def __init__(self, text):
2012
BzrError.__init__(self)
2016
class MalformedHeader(BadBundle):
2018
_fmt = "Malformed bzr revision-bundle header: %(text)r"
2021
class MalformedPatches(BadBundle):
2023
_fmt = "Malformed patches in bzr revision-bundle: %(text)r"
2026
class MalformedFooter(BadBundle):
2028
_fmt = "Malformed footer in bzr revision-bundle: %(text)r"
2031
class UnsupportedEOLMarker(BadBundle):
2033
_fmt = "End of line marker was not \\n in bzr revision-bundle"
2036
# XXX: BadBundle's constructor assumes there's explanatory text,
2037
# but for this there is not
2038
BzrError.__init__(self)
2041
class IncompatibleBundleFormat(BzrError):
2043
_fmt = "Bundle format %(bundle_format)s is incompatible with %(other)s"
2045
def __init__(self, bundle_format, other):
2046
BzrError.__init__(self)
2047
self.bundle_format = bundle_format
2051
class BadInventoryFormat(BzrError):
2053
_fmt = "Root class for inventory serialization errors"
2056
class UnexpectedInventoryFormat(BadInventoryFormat):
2058
_fmt = "The inventory was not in the expected format:\n %(msg)s"
2060
def __init__(self, msg):
2061
BadInventoryFormat.__init__(self, msg=msg)
2064
class RootNotRich(BzrError):
2066
_fmt = """This operation requires rich root data storage"""
2069
class NoSmartMedium(InternalBzrError):
2071
_fmt = "The transport '%(transport)s' cannot tunnel the smart protocol."
2073
def __init__(self, transport):
2074
self.transport = transport
2077
class NoSmartServer(NotBranchError):
2079
_fmt = "No smart server available at %(url)s"
2081
def __init__(self, url):
2085
class UnknownSSH(BzrError):
2087
_fmt = "Unrecognised value for BZR_SSH environment variable: %(vendor)s"
2089
def __init__(self, vendor):
2090
BzrError.__init__(self)
2091
self.vendor = vendor
2094
class SSHVendorNotFound(BzrError):
2096
_fmt = ("Don't know how to handle SSH connections."
2097
" Please set BZR_SSH environment variable.")
2100
class GhostRevisionUnusableHere(BzrError):
2102
_fmt = "Ghost revision {%(revision_id)s} cannot be used here."
2104
def __init__(self, revision_id):
2105
BzrError.__init__(self)
2106
self.revision_id = revision_id
2109
class IllegalUseOfScopeReplacer(InternalBzrError):
2111
_fmt = ("ScopeReplacer object %(name)r was used incorrectly:"
2112
" %(msg)s%(extra)s")
2114
def __init__(self, name, msg, extra=None):
2115
BzrError.__init__(self)
2119
self.extra = ': ' + str(extra)
2124
class InvalidImportLine(InternalBzrError):
2126
_fmt = "Not a valid import statement: %(msg)\n%(text)s"
2128
def __init__(self, text, msg):
2129
BzrError.__init__(self)
2134
class ImportNameCollision(InternalBzrError):
2136
_fmt = ("Tried to import an object to the same name as"
2137
" an existing object. %(name)s")
2139
def __init__(self, name):
2140
BzrError.__init__(self)
2144
class NotAMergeDirective(BzrError):
2145
"""File starting with %(firstline)r is not a merge directive"""
2146
def __init__(self, firstline):
2147
BzrError.__init__(self, firstline=firstline)
2150
class NoMergeSource(BzrError):
2151
"""Raise if no merge source was specified for a merge directive"""
2153
_fmt = "A merge directive must provide either a bundle or a public"\
2157
class IllegalMergeDirectivePayload(BzrError):
2158
"""A merge directive contained something other than a patch or bundle"""
2160
_fmt = "Bad merge directive payload %(start)r"
2162
def __init__(self, start):
2167
class PatchVerificationFailed(BzrError):
2168
"""A patch from a merge directive could not be verified"""
2170
_fmt = "Preview patch does not match requested changes."
2173
class PatchMissing(BzrError):
2174
"""Raise a patch type was specified but no patch supplied"""
2176
_fmt = "patch_type was %(patch_type)s, but no patch was supplied."
2178
def __init__(self, patch_type):
2179
BzrError.__init__(self)
2180
self.patch_type = patch_type
2183
class UnsupportedInventoryKind(BzrError):
2185
_fmt = """Unsupported entry kind %(kind)s"""
2187
def __init__(self, kind):
2191
class BadSubsumeSource(BzrError):
2193
_fmt = "Can't subsume %(other_tree)s into %(tree)s. %(reason)s"
2195
def __init__(self, tree, other_tree, reason):
2197
self.other_tree = other_tree
2198
self.reason = reason
2201
class SubsumeTargetNeedsUpgrade(BzrError):
2203
_fmt = """Subsume target %(other_tree)s needs to be upgraded."""
2205
def __init__(self, other_tree):
2206
self.other_tree = other_tree
2209
class BadReferenceTarget(InternalBzrError):
2211
_fmt = "Can't add reference to %(other_tree)s into %(tree)s." \
2214
def __init__(self, tree, other_tree, reason):
2216
self.other_tree = other_tree
2217
self.reason = reason
2220
class NoSuchTag(BzrError):
2222
_fmt = "No such tag: %(tag_name)s"
2224
def __init__(self, tag_name):
2225
self.tag_name = tag_name
2228
class TagsNotSupported(BzrError):
2230
_fmt = ("Tags not supported by %(branch)s;"
2231
" you may be able to use bzr upgrade --dirstate-tags.")
2233
def __init__(self, branch):
2234
self.branch = branch
2237
class TagAlreadyExists(BzrError):
2239
_fmt = "Tag %(tag_name)s already exists."
2241
def __init__(self, tag_name):
2242
self.tag_name = tag_name
2245
class MalformedBugIdentifier(BzrError):
2247
_fmt = "Did not understand bug identifier %(bug_id)s: %(reason)s"
2249
def __init__(self, bug_id, reason):
2250
self.bug_id = bug_id
2251
self.reason = reason
2254
class UnknownBugTrackerAbbreviation(BzrError):
2256
_fmt = ("Cannot find registered bug tracker called %(abbreviation)s "
2259
def __init__(self, abbreviation, branch):
2260
self.abbreviation = abbreviation
2261
self.branch = branch
2264
class UnexpectedSmartServerResponse(BzrError):
2266
_fmt = "Could not understand response from smart server: %(response_tuple)r"
2268
def __init__(self, response_tuple):
2269
self.response_tuple = response_tuple
2272
class ContainerError(BzrError):
2273
"""Base class of container errors."""
2276
class UnknownContainerFormatError(ContainerError):
2278
_fmt = "Unrecognised container format: %(container_format)r"
2280
def __init__(self, container_format):
2281
self.container_format = container_format
2284
class UnexpectedEndOfContainerError(ContainerError):
2286
_fmt = "Unexpected end of container stream"
2289
class UnknownRecordTypeError(ContainerError):
2291
_fmt = "Unknown record type: %(record_type)r"
2293
def __init__(self, record_type):
2294
self.record_type = record_type
2297
class InvalidRecordError(ContainerError):
2299
_fmt = "Invalid record: %(reason)s"
2301
def __init__(self, reason):
2302
self.reason = reason
2305
class ContainerHasExcessDataError(ContainerError):
2307
_fmt = "Container has data after end marker: %(excess)r"
2309
def __init__(self, excess):
2310
self.excess = excess
2313
class DuplicateRecordNameError(ContainerError):
2315
_fmt = "Container has multiple records with the same name: %(name)s"
2317
def __init__(self, name):
2321
class NoDestinationAddress(InternalBzrError):
2323
_fmt = "Message does not have a destination address."
2326
class SMTPError(BzrError):
2328
_fmt = "SMTP error: %(error)s"
2330
def __init__(self, error):
2334
class NoMessageSupplied(BzrError):
2336
_fmt = "No message supplied."
2339
class UnknownMailClient(BzrError):
2341
_fmt = "Unknown mail client: %(mail_client)s"
2343
def __init__(self, mail_client):
2344
BzrError.__init__(self, mail_client=mail_client)
2347
class MailClientNotFound(BzrError):
2349
_fmt = "Unable to find mail client with the following names:"\
2350
" %(mail_command_list_string)s"
2352
def __init__(self, mail_command_list):
2353
mail_command_list_string = ', '.join(mail_command_list)
2354
BzrError.__init__(self, mail_command_list=mail_command_list,
2355
mail_command_list_string=mail_command_list_string)
2357
class SMTPConnectionRefused(SMTPError):
2359
_fmt = "SMTP connection to %(host)s refused"
2361
def __init__(self, error, host):
2366
class DefaultSMTPConnectionRefused(SMTPConnectionRefused):
2368
_fmt = "Please specify smtp_server. No server at default %(host)s."
2371
class BzrDirError(BzrError):
2373
def __init__(self, bzrdir):
2374
import bzrlib.urlutils as urlutils
2375
display_url = urlutils.unescape_for_display(bzrdir.root_transport.base,
2377
BzrError.__init__(self, bzrdir=bzrdir, display_url=display_url)
2380
class AlreadyBranch(BzrDirError):
2382
_fmt = "'%(display_url)s' is already a branch."
2385
class AlreadyTree(BzrDirError):
2387
_fmt = "'%(display_url)s' is already a tree."
2390
class AlreadyCheckout(BzrDirError):
2392
_fmt = "'%(display_url)s' is already a checkout."
2395
class ReconfigurationNotSupported(BzrDirError):
2397
_fmt = "Requested reconfiguration of '%(display_url)s' is not supported."
2400
class NoBindLocation(BzrDirError):
2402
_fmt = "No location could be found to bind to at %(display_url)s."
2405
class UncommittedChanges(BzrError):
2407
_fmt = 'Working tree "%(display_url)s" has uncommitted changes.'
2409
def __init__(self, tree):
2410
import bzrlib.urlutils as urlutils
2411
display_url = urlutils.unescape_for_display(
2412
tree.bzrdir.root_transport.base, 'ascii')
2413
BzrError.__init__(self, tree=tree, display_url=display_url)