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
@symbol_versioning.deprecated_method(symbol_versioning.zero_ninetytwo)
833
def __init__(self, fname, msg):
834
LockError.__init__(self, '')
839
class LockFailed(LockError):
841
internal_error = False
843
_fmt = "Cannot lock %(lock)s: %(why)s"
845
def __init__(self, lock, why):
846
LockError.__init__(self, '')
851
class OutSideTransaction(BzrError):
853
_fmt = ("A transaction related operation was attempted after"
854
" the transaction finished.")
857
class ObjectNotLocked(LockError):
859
_fmt = "%(obj)r is not locked"
861
# this can indicate that any particular object is not locked; see also
862
# LockNotHeld which means that a particular *lock* object is not held by
863
# the caller -- perhaps they should be unified.
864
def __init__(self, obj):
868
class ReadOnlyObjectDirtiedError(ReadOnlyError):
870
_fmt = "Cannot change object %(obj)r in read only transaction"
872
def __init__(self, obj):
876
class UnlockableTransport(LockError):
878
internal_error = False
880
_fmt = "Cannot lock: transport is read only: %(transport)s"
882
def __init__(self, transport):
883
self.transport = transport
886
class LockContention(LockError):
888
_fmt = 'Could not acquire lock "%(lock)s"'
889
# TODO: show full url for lock, combining the transport and relative
892
internal_error = False
894
def __init__(self, lock):
898
class LockBroken(LockError):
900
_fmt = ("Lock was broken while still open: %(lock)s"
901
" - check storage consistency!")
903
internal_error = False
905
def __init__(self, lock):
909
class LockBreakMismatch(LockError):
911
_fmt = ("Lock was released and re-acquired before being broken:"
912
" %(lock)s: held by %(holder)r, wanted to break %(target)r")
914
internal_error = False
916
def __init__(self, lock, holder, target):
922
class LockNotHeld(LockError):
924
_fmt = "Lock not held: %(lock)s"
926
internal_error = False
928
def __init__(self, lock):
932
class TokenLockingNotSupported(LockError):
934
_fmt = "The object %(obj)s does not support token specifying a token when locking."
936
def __init__(self, obj):
940
class TokenMismatch(LockBroken):
942
_fmt = "The lock token %(given_token)r does not match lock token %(lock_token)r."
944
internal_error = True
946
def __init__(self, given_token, lock_token):
947
self.given_token = given_token
948
self.lock_token = lock_token
951
class PointlessCommit(BzrError):
953
_fmt = "No changes to commit"
956
class CannotCommitSelectedFileMerge(BzrError):
958
_fmt = 'Selected-file commit of merges is not supported yet:'\
959
' files %(files_str)s'
961
def __init__(self, files):
962
files_str = ', '.join(files)
963
BzrError.__init__(self, files=files, files_str=files_str)
966
class BadCommitMessageEncoding(BzrError):
968
_fmt = 'The specified commit message contains characters unsupported by '\
969
'the current encoding.'
972
class UpgradeReadonly(BzrError):
974
_fmt = "Upgrade URL cannot work with readonly URLs."
977
class UpToDateFormat(BzrError):
979
_fmt = "The branch format %(format)s is already at the most recent format."
981
def __init__(self, format):
982
BzrError.__init__(self)
986
class StrictCommitFailed(Exception):
988
_fmt = "Commit refused because there are unknowns in the tree."
991
class NoSuchRevision(InternalBzrError):
993
_fmt = "%(branch)s has no revision %(revision)s"
995
def __init__(self, branch, revision):
996
# 'branch' may sometimes be an internal object like a KnitRevisionStore
997
BzrError.__init__(self, branch=branch, revision=revision)
1000
# zero_ninetyone: this exception is no longer raised and should be removed
1001
class NotLeftParentDescendant(InternalBzrError):
1003
_fmt = ("Revision %(old_revision)s is not the left parent of"
1004
" %(new_revision)s, but branch %(branch_location)s expects this")
1006
def __init__(self, branch, old_revision, new_revision):
1007
BzrError.__init__(self, branch_location=branch.base,
1008
old_revision=old_revision,
1009
new_revision=new_revision)
1012
class RangeInChangeOption(BzrError):
1014
_fmt = "Option --change does not accept revision ranges"
1017
class NoSuchRevisionSpec(BzrError):
1019
_fmt = "No namespace registered for string: %(spec)r"
1021
def __init__(self, spec):
1022
BzrError.__init__(self, spec=spec)
1025
class NoSuchRevisionInTree(NoSuchRevision):
1026
"""When using Tree.revision_tree, and the revision is not accessible."""
1028
_fmt = "The revision id {%(revision_id)s} is not present in the tree %(tree)s."
1030
def __init__(self, tree, revision_id):
1031
BzrError.__init__(self)
1033
self.revision_id = revision_id
1036
class InvalidRevisionSpec(BzrError):
1038
_fmt = ("Requested revision: %(spec)r does not exist in branch:"
1039
" %(branch)s%(extra)s")
1041
def __init__(self, spec, branch, extra=None):
1042
BzrError.__init__(self, branch=branch, spec=spec)
1044
self.extra = '\n' + str(extra)
1049
class HistoryMissing(BzrError):
1051
_fmt = "%(branch)s is missing %(object_type)s {%(object_id)s}"
1054
class AppendRevisionsOnlyViolation(BzrError):
1056
_fmt = ('Operation denied because it would change the main history,'
1057
' which is not permitted by the append_revisions_only setting on'
1058
' branch "%(location)s".')
1060
def __init__(self, location):
1061
import bzrlib.urlutils as urlutils
1062
location = urlutils.unescape_for_display(location, 'ascii')
1063
BzrError.__init__(self, location=location)
1066
class DivergedBranches(BzrError):
1068
_fmt = ("These branches have diverged."
1069
" Use the merge command to reconcile them.")
1071
def __init__(self, branch1, branch2):
1072
self.branch1 = branch1
1073
self.branch2 = branch2
1076
class NotLefthandHistory(InternalBzrError):
1078
_fmt = "Supplied history does not follow left-hand parents"
1080
def __init__(self, history):
1081
BzrError.__init__(self, history=history)
1084
class UnrelatedBranches(BzrError):
1086
_fmt = ("Branches have no common ancestor, and"
1087
" no merge base revision was specified.")
1090
class NoCommonAncestor(BzrError):
1092
_fmt = "Revisions have no common ancestor: %(revision_a)s %(revision_b)s"
1094
def __init__(self, revision_a, revision_b):
1095
self.revision_a = revision_a
1096
self.revision_b = revision_b
1099
class NoCommonRoot(BzrError):
1101
_fmt = ("Revisions are not derived from the same root: "
1102
"%(revision_a)s %(revision_b)s.")
1104
def __init__(self, revision_a, revision_b):
1105
BzrError.__init__(self, revision_a=revision_a, revision_b=revision_b)
1108
class NotAncestor(BzrError):
1110
_fmt = "Revision %(rev_id)s is not an ancestor of %(not_ancestor_id)s"
1112
def __init__(self, rev_id, not_ancestor_id):
1113
BzrError.__init__(self, rev_id=rev_id,
1114
not_ancestor_id=not_ancestor_id)
1117
class InstallFailed(BzrError):
1119
def __init__(self, revisions):
1120
revision_str = ", ".join(str(r) for r in revisions)
1121
msg = "Could not install revisions:\n%s" % revision_str
1122
BzrError.__init__(self, msg)
1123
self.revisions = revisions
1126
class AmbiguousBase(BzrError):
1128
def __init__(self, bases):
1129
warn("BzrError AmbiguousBase has been deprecated as of bzrlib 0.8.",
1131
msg = ("The correct base is unclear, because %s are all equally close"
1133
BzrError.__init__(self, msg)
1137
class NoCommits(BzrError):
1139
_fmt = "Branch %(branch)s has no commits."
1141
def __init__(self, branch):
1142
BzrError.__init__(self, branch=branch)
1145
class UnlistableStore(BzrError):
1147
def __init__(self, store):
1148
BzrError.__init__(self, "Store %s is not listable" % store)
1152
class UnlistableBranch(BzrError):
1154
def __init__(self, br):
1155
BzrError.__init__(self, "Stores for branch %s are not listable" % br)
1158
class BoundBranchOutOfDate(BzrError):
1160
_fmt = ("Bound branch %(branch)s is out of date with master branch"
1163
def __init__(self, branch, master):
1164
BzrError.__init__(self)
1165
self.branch = branch
1166
self.master = master
1169
class CommitToDoubleBoundBranch(BzrError):
1171
_fmt = ("Cannot commit to branch %(branch)s."
1172
" It is bound to %(master)s, which is bound to %(remote)s.")
1174
def __init__(self, branch, master, remote):
1175
BzrError.__init__(self)
1176
self.branch = branch
1177
self.master = master
1178
self.remote = remote
1181
class OverwriteBoundBranch(BzrError):
1183
_fmt = "Cannot pull --overwrite to a branch which is bound %(branch)s"
1185
def __init__(self, branch):
1186
BzrError.__init__(self)
1187
self.branch = branch
1190
class BoundBranchConnectionFailure(BzrError):
1192
_fmt = ("Unable to connect to target of bound branch %(branch)s"
1193
" => %(target)s: %(error)s")
1195
def __init__(self, branch, target, error):
1196
BzrError.__init__(self)
1197
self.branch = branch
1198
self.target = target
1202
class WeaveError(BzrError):
1204
_fmt = "Error in processing weave: %(message)s"
1206
def __init__(self, message=None):
1207
BzrError.__init__(self)
1208
self.message = message
1211
class WeaveRevisionAlreadyPresent(WeaveError):
1213
_fmt = "Revision {%(revision_id)s} already present in %(weave)s"
1215
def __init__(self, revision_id, weave):
1217
WeaveError.__init__(self)
1218
self.revision_id = revision_id
1222
class WeaveRevisionNotPresent(WeaveError):
1224
_fmt = "Revision {%(revision_id)s} not present in %(weave)s"
1226
def __init__(self, revision_id, weave):
1227
WeaveError.__init__(self)
1228
self.revision_id = revision_id
1232
class WeaveFormatError(WeaveError):
1234
_fmt = "Weave invariant violated: %(what)s"
1236
def __init__(self, what):
1237
WeaveError.__init__(self)
1241
class WeaveParentMismatch(WeaveError):
1243
_fmt = "Parents are mismatched between two revisions."
1246
class WeaveInvalidChecksum(WeaveError):
1248
_fmt = "Text did not match it's checksum: %(message)s"
1251
class WeaveTextDiffers(WeaveError):
1253
_fmt = ("Weaves differ on text content. Revision:"
1254
" {%(revision_id)s}, %(weave_a)s, %(weave_b)s")
1256
def __init__(self, revision_id, weave_a, weave_b):
1257
WeaveError.__init__(self)
1258
self.revision_id = revision_id
1259
self.weave_a = weave_a
1260
self.weave_b = weave_b
1263
class WeaveTextDiffers(WeaveError):
1265
_fmt = ("Weaves differ on text content. Revision:"
1266
" {%(revision_id)s}, %(weave_a)s, %(weave_b)s")
1268
def __init__(self, revision_id, weave_a, weave_b):
1269
WeaveError.__init__(self)
1270
self.revision_id = revision_id
1271
self.weave_a = weave_a
1272
self.weave_b = weave_b
1275
class VersionedFileError(BzrError):
1277
_fmt = "Versioned file error"
1280
class RevisionNotPresent(VersionedFileError):
1282
_fmt = 'Revision {%(revision_id)s} not present in "%(file_id)s".'
1284
def __init__(self, revision_id, file_id):
1285
VersionedFileError.__init__(self)
1286
self.revision_id = revision_id
1287
self.file_id = file_id
1290
class RevisionAlreadyPresent(VersionedFileError):
1292
_fmt = 'Revision {%(revision_id)s} already present in "%(file_id)s".'
1294
def __init__(self, revision_id, file_id):
1295
VersionedFileError.__init__(self)
1296
self.revision_id = revision_id
1297
self.file_id = file_id
1300
class VersionedFileInvalidChecksum(VersionedFileError):
1302
_fmt = "Text did not match its checksum: %(message)s"
1305
class KnitError(InternalBzrError):
1310
class KnitCorrupt(KnitError):
1312
_fmt = "Knit %(filename)s corrupt: %(how)s"
1314
def __init__(self, filename, how):
1315
KnitError.__init__(self)
1316
self.filename = filename
1320
class KnitDataStreamIncompatible(KnitError):
1322
_fmt = "Cannot insert knit data stream of format \"%(stream_format)s\" into knit of format \"%(target_format)s\"."
1324
def __init__(self, stream_format, target_format):
1325
self.stream_format = stream_format
1326
self.target_format = target_format
1329
class KnitHeaderError(KnitError):
1331
_fmt = 'Knit header error: %(badline)r unexpected for file "%(filename)s".'
1333
def __init__(self, badline, filename):
1334
KnitError.__init__(self)
1335
self.badline = badline
1336
self.filename = filename
1338
class KnitIndexUnknownMethod(KnitError):
1339
"""Raised when we don't understand the storage method.
1341
Currently only 'fulltext' and 'line-delta' are supported.
1344
_fmt = ("Knit index %(filename)s does not have a known method"
1345
" in options: %(options)r")
1347
def __init__(self, filename, options):
1348
KnitError.__init__(self)
1349
self.filename = filename
1350
self.options = options
1353
class NoSuchExportFormat(BzrError):
1355
_fmt = "Export format %(format)r not supported"
1357
def __init__(self, format):
1358
BzrError.__init__(self)
1359
self.format = format
1362
class TransportError(BzrError):
1364
_fmt = "Transport error: %(msg)s %(orig_error)s"
1366
def __init__(self, msg=None, orig_error=None):
1367
if msg is None and orig_error is not None:
1368
msg = str(orig_error)
1369
if orig_error is None:
1374
self.orig_error = orig_error
1375
BzrError.__init__(self)
1378
class TooManyConcurrentRequests(InternalBzrError):
1380
_fmt = ("The medium '%(medium)s' has reached its concurrent request limit."
1381
" Be sure to finish_writing and finish_reading on the"
1382
" currently open request.")
1384
def __init__(self, medium):
1385
self.medium = medium
1388
class SmartProtocolError(TransportError):
1390
_fmt = "Generic bzr smart protocol error: %(details)s"
1392
def __init__(self, details):
1393
self.details = details
1396
# A set of semi-meaningful errors which can be thrown
1397
class TransportNotPossible(TransportError):
1399
_fmt = "Transport operation not possible: %(msg)s %(orig_error)s"
1402
class ConnectionError(TransportError):
1404
_fmt = "Connection error: %(msg)s %(orig_error)s"
1407
class SocketConnectionError(ConnectionError):
1409
_fmt = "%(msg)s %(host)s%(port)s%(orig_error)s"
1411
def __init__(self, host, port=None, msg=None, orig_error=None):
1413
msg = 'Failed to connect to'
1414
if orig_error is None:
1417
orig_error = '; ' + str(orig_error)
1418
ConnectionError.__init__(self, msg=msg, orig_error=orig_error)
1423
self.port = ':%s' % port
1426
class ConnectionReset(TransportError):
1428
_fmt = "Connection closed: %(msg)s %(orig_error)s"
1431
class InvalidRange(TransportError):
1433
_fmt = "Invalid range access in %(path)s at %(offset)s."
1435
def __init__(self, path, offset):
1436
TransportError.__init__(self, ("Invalid range access in %s at %d"
1439
self.offset = offset
1442
class InvalidHttpResponse(TransportError):
1444
_fmt = "Invalid http response for %(path)s: %(msg)s"
1446
def __init__(self, path, msg, orig_error=None):
1448
TransportError.__init__(self, msg, orig_error=orig_error)
1451
class InvalidHttpRange(InvalidHttpResponse):
1453
_fmt = "Invalid http range %(range)r for %(path)s: %(msg)s"
1455
def __init__(self, path, range, msg):
1457
InvalidHttpResponse.__init__(self, path, msg)
1460
class InvalidHttpContentType(InvalidHttpResponse):
1462
_fmt = 'Invalid http Content-type "%(ctype)s" for %(path)s: %(msg)s'
1464
def __init__(self, path, ctype, msg):
1466
InvalidHttpResponse.__init__(self, path, msg)
1469
class RedirectRequested(TransportError):
1471
_fmt = '%(source)s is%(permanently)s redirected to %(target)s'
1473
def __init__(self, source, target, is_permament=False, qual_proto=None):
1474
self.source = source
1475
self.target = target
1477
self.permanently = ' permanently'
1479
self.permanently = ''
1480
self.is_permament = is_permament
1481
self._qualified_proto = qual_proto
1482
TransportError.__init__(self)
1484
def _requalify_url(self, url):
1485
"""Restore the qualified proto in front of the url"""
1486
# When this exception is raised, source and target are in
1487
# user readable format. But some transports may use a
1488
# different proto (http+urllib:// will present http:// to
1489
# the user. If a qualified proto is specified, the code
1490
# trapping the exception can get the qualified urls to
1491
# properly handle the redirection themself (creating a
1492
# new transport object from the target url for example).
1493
# But checking that the scheme of the original and
1494
# redirected urls are the same can be tricky. (see the
1495
# FIXME in BzrDir.open_from_transport for the unique use
1497
if self._qualified_proto is None:
1500
# The TODO related to NotBranchError mention that doing
1501
# that kind of manipulation on the urls may not be the
1502
# exception object job. On the other hand, this object is
1503
# the interface between the code and the user so
1504
# presenting the urls in different ways is indeed its
1507
proto, netloc, path, query, fragment = urlparse.urlsplit(url)
1508
return urlparse.urlunsplit((self._qualified_proto, netloc, path,
1511
def get_source_url(self):
1512
return self._requalify_url(self.source)
1514
def get_target_url(self):
1515
return self._requalify_url(self.target)
1518
class TooManyRedirections(TransportError):
1520
_fmt = "Too many redirections"
1522
class ConflictsInTree(BzrError):
1524
_fmt = "Working tree has conflicts."
1527
class ParseConfigError(BzrError):
1529
def __init__(self, errors, filename):
1530
if filename is None:
1532
message = "Error(s) parsing config file %s:\n%s" % \
1533
(filename, ('\n'.join(e.message for e in errors)))
1534
BzrError.__init__(self, message)
1537
class NoEmailInUsername(BzrError):
1539
_fmt = "%(username)r does not seem to contain a reasonable email address"
1541
def __init__(self, username):
1542
BzrError.__init__(self)
1543
self.username = username
1546
class SigningFailed(BzrError):
1548
_fmt = 'Failed to gpg sign data with command "%(command_line)s"'
1550
def __init__(self, command_line):
1551
BzrError.__init__(self, command_line=command_line)
1554
class WorkingTreeNotRevision(BzrError):
1556
_fmt = ("The working tree for %(basedir)s has changed since"
1557
" the last commit, but weave merge requires that it be"
1560
def __init__(self, tree):
1561
BzrError.__init__(self, basedir=tree.basedir)
1564
class CantReprocessAndShowBase(BzrError):
1566
_fmt = ("Can't reprocess and show base, because reprocessing obscures "
1567
"the relationship of conflicting lines to the base")
1570
class GraphCycleError(BzrError):
1572
_fmt = "Cycle in graph %(graph)r"
1574
def __init__(self, graph):
1575
BzrError.__init__(self)
1579
class WritingCompleted(InternalBzrError):
1581
_fmt = ("The MediumRequest '%(request)s' has already had finish_writing "
1582
"called upon it - accept bytes may not be called anymore.")
1584
def __init__(self, request):
1585
self.request = request
1588
class WritingNotComplete(InternalBzrError):
1590
_fmt = ("The MediumRequest '%(request)s' has not has finish_writing "
1591
"called upon it - until the write phase is complete no "
1592
"data may be read.")
1594
def __init__(self, request):
1595
self.request = request
1598
class NotConflicted(BzrError):
1600
_fmt = "File %(filename)s is not conflicted."
1602
def __init__(self, filename):
1603
BzrError.__init__(self)
1604
self.filename = filename
1607
class MediumNotConnected(InternalBzrError):
1609
_fmt = """The medium '%(medium)s' is not connected."""
1611
def __init__(self, medium):
1612
self.medium = medium
1615
class MustUseDecorated(Exception):
1617
_fmt = "A decorating function has requested its original command be used."
1620
class NoBundleFound(BzrError):
1622
_fmt = 'No bundle was found in "%(filename)s".'
1624
def __init__(self, filename):
1625
BzrError.__init__(self)
1626
self.filename = filename
1629
class BundleNotSupported(BzrError):
1631
_fmt = "Unable to handle bundle version %(version)s: %(msg)s"
1633
def __init__(self, version, msg):
1634
BzrError.__init__(self)
1635
self.version = version
1639
class MissingText(BzrError):
1641
_fmt = ("Branch %(base)s is missing revision"
1642
" %(text_revision)s of %(file_id)s")
1644
def __init__(self, branch, text_revision, file_id):
1645
BzrError.__init__(self)
1646
self.branch = branch
1647
self.base = branch.base
1648
self.text_revision = text_revision
1649
self.file_id = file_id
1652
class DuplicateFileId(BzrError):
1654
_fmt = "File id {%(file_id)s} already exists in inventory as %(entry)s"
1656
def __init__(self, file_id, entry):
1657
BzrError.__init__(self)
1658
self.file_id = file_id
1662
class DuplicateKey(BzrError):
1664
_fmt = "Key %(key)s is already present in map"
1667
class DuplicateHelpPrefix(BzrError):
1669
_fmt = "The prefix %(prefix)s is in the help search path twice."
1671
def __init__(self, prefix):
1672
self.prefix = prefix
1675
class MalformedTransform(BzrError):
1677
_fmt = "Tree transform is malformed %(conflicts)r"
1680
class NoFinalPath(BzrError):
1682
_fmt = ("No final name for trans_id %(trans_id)r\n"
1683
"file-id: %(file_id)r\n"
1684
"root trans-id: %(root_trans_id)r\n")
1686
def __init__(self, trans_id, transform):
1687
self.trans_id = trans_id
1688
self.file_id = transform.final_file_id(trans_id)
1689
self.root_trans_id = transform.root
1692
class BzrBadParameter(InternalBzrError):
1694
_fmt = "Bad parameter: %(param)r"
1696
# This exception should never be thrown, but it is a base class for all
1697
# parameter-to-function errors.
1699
def __init__(self, param):
1700
BzrError.__init__(self)
1704
class BzrBadParameterNotUnicode(BzrBadParameter):
1706
_fmt = "Parameter %(param)s is neither unicode nor utf8."
1709
class ReusingTransform(BzrError):
1711
_fmt = "Attempt to reuse a transform that has already been applied."
1714
class CantMoveRoot(BzrError):
1716
_fmt = "Moving the root directory is not supported at this time"
1719
class BzrMoveFailedError(BzrError):
1721
_fmt = "Could not move %(from_path)s%(operator)s %(to_path)s%(extra)s"
1723
def __init__(self, from_path='', to_path='', extra=None):
1724
BzrError.__init__(self)
1726
self.extra = ': ' + str(extra)
1730
has_from = len(from_path) > 0
1731
has_to = len(to_path) > 0
1733
self.from_path = osutils.splitpath(from_path)[-1]
1738
self.to_path = osutils.splitpath(to_path)[-1]
1743
if has_from and has_to:
1744
self.operator = " =>"
1746
self.from_path = "from " + from_path
1748
self.operator = "to"
1750
self.operator = "file"
1753
class BzrRenameFailedError(BzrMoveFailedError):
1755
_fmt = "Could not rename %(from_path)s%(operator)s %(to_path)s%(extra)s"
1757
def __init__(self, from_path, to_path, extra=None):
1758
BzrMoveFailedError.__init__(self, from_path, to_path, extra)
1760
class BzrRemoveChangedFilesError(BzrError):
1761
"""Used when user is trying to remove changed files."""
1763
_fmt = ("Can't safely remove modified or unknown files:\n"
1764
"%(changes_as_text)s"
1765
"Use --keep to not delete them, or --force to delete them regardless.")
1767
def __init__(self, tree_delta):
1768
BzrError.__init__(self)
1769
self.changes_as_text = tree_delta.get_changes_as_text()
1770
#self.paths_as_string = '\n'.join(changed_files)
1771
#self.paths_as_string = '\n'.join([quotefn(p) for p in changed_files])
1774
class BzrBadParameterNotString(BzrBadParameter):
1776
_fmt = "Parameter %(param)s is not a string or unicode string."
1779
class BzrBadParameterMissing(BzrBadParameter):
1781
_fmt = "Parameter $(param)s is required but not present."
1784
class BzrBadParameterUnicode(BzrBadParameter):
1786
_fmt = ("Parameter %(param)s is unicode but"
1787
" only byte-strings are permitted.")
1790
class BzrBadParameterContainsNewline(BzrBadParameter):
1792
_fmt = "Parameter %(param)s contains a newline."
1795
class DependencyNotPresent(BzrError):
1797
_fmt = 'Unable to import library "%(library)s": %(error)s'
1799
def __init__(self, library, error):
1800
BzrError.__init__(self, library=library, error=error)
1803
class ParamikoNotPresent(DependencyNotPresent):
1805
_fmt = "Unable to import paramiko (required for sftp support): %(error)s"
1807
def __init__(self, error):
1808
DependencyNotPresent.__init__(self, 'paramiko', error)
1811
class PointlessMerge(BzrError):
1813
_fmt = "Nothing to merge."
1816
class UninitializableFormat(BzrError):
1818
_fmt = "Format %(format)s cannot be initialised by this version of bzr."
1820
def __init__(self, format):
1821
BzrError.__init__(self)
1822
self.format = format
1825
class BadConversionTarget(BzrError):
1827
_fmt = "Cannot convert to format %(format)s. %(problem)s"
1829
def __init__(self, problem, format):
1830
BzrError.__init__(self)
1831
self.problem = problem
1832
self.format = format
1835
class NoDiff(BzrError):
1837
_fmt = "Diff is not installed on this machine: %(msg)s"
1839
def __init__(self, msg):
1840
BzrError.__init__(self, msg=msg)
1843
class NoDiff3(BzrError):
1845
_fmt = "Diff3 is not installed on this machine."
1848
class ExistingContent(BzrError):
1849
# Added in bzrlib 0.92, used by VersionedFile.add_lines.
1851
_fmt = "The content being inserted is already present."
1854
class ExistingLimbo(BzrError):
1856
_fmt = """This tree contains left-over files from a failed operation.
1857
Please examine %(limbo_dir)s to see if it contains any files you wish to
1858
keep, and delete it when you are done."""
1860
def __init__(self, limbo_dir):
1861
BzrError.__init__(self)
1862
self.limbo_dir = limbo_dir
1865
class ExistingPendingDeletion(BzrError):
1867
_fmt = """This tree contains left-over files from a failed operation.
1868
Please examine %(pending_deletion)s to see if it contains any files you
1869
wish to keep, and delete it when you are done."""
1871
def __init__(self, pending_deletion):
1872
BzrError.__init__(self, pending_deletion=pending_deletion)
1875
class ImmortalLimbo(BzrError):
1877
_fmt = """Unable to delete transform temporary directory %(limbo_dir)s.
1878
Please examine %(limbo_dir)s to see if it contains any files you wish to
1879
keep, and delete it when you are done."""
1881
def __init__(self, limbo_dir):
1882
BzrError.__init__(self)
1883
self.limbo_dir = limbo_dir
1886
class ImmortalPendingDeletion(BzrError):
1888
_fmt = """Unable to delete transform temporary directory
1889
%(pending_deletion)s. Please examine %(pending_deletions)s to see if it
1890
contains any files you wish to keep, and delete it when you are done."""
1892
def __init__(self, pending_deletion):
1893
BzrError.__init__(self, pending_deletion=pending_deletion)
1896
class OutOfDateTree(BzrError):
1898
_fmt = "Working tree is out of date, please run 'bzr update'."
1900
def __init__(self, tree):
1901
BzrError.__init__(self)
1905
class PublicBranchOutOfDate(BzrError):
1907
_fmt = 'Public branch "%(public_location)s" lacks revision '\
1910
def __init__(self, public_location, revstring):
1911
import bzrlib.urlutils as urlutils
1912
public_location = urlutils.unescape_for_display(public_location,
1914
BzrError.__init__(self, public_location=public_location,
1915
revstring=revstring)
1918
class MergeModifiedFormatError(BzrError):
1920
_fmt = "Error in merge modified format"
1923
class ConflictFormatError(BzrError):
1925
_fmt = "Format error in conflict listings"
1928
class CorruptRepository(BzrError):
1930
_fmt = ("An error has been detected in the repository %(repo_path)s.\n"
1931
"Please run bzr reconcile on this repository.")
1933
def __init__(self, repo):
1934
BzrError.__init__(self)
1935
self.repo_path = repo.bzrdir.root_transport.base
1938
class UpgradeRequired(BzrError):
1940
_fmt = "To use this feature you must upgrade your branch at %(path)s."
1942
def __init__(self, path):
1943
BzrError.__init__(self)
1947
class LocalRequiresBoundBranch(BzrError):
1949
_fmt = "Cannot perform local-only commits on unbound branches."
1952
class MissingProgressBarFinish(BzrError):
1954
_fmt = "A nested progress bar was not 'finished' correctly."
1957
class InvalidProgressBarType(BzrError):
1959
_fmt = ("Environment variable BZR_PROGRESS_BAR='%(bar_type)s"
1960
" is not a supported type Select one of: %(valid_types)s")
1962
def __init__(self, bar_type, valid_types):
1963
BzrError.__init__(self, bar_type=bar_type, valid_types=valid_types)
1966
class UnsupportedOperation(BzrError):
1968
_fmt = ("The method %(mname)s is not supported on"
1969
" objects of type %(tname)s.")
1971
def __init__(self, method, method_self):
1972
self.method = method
1973
self.mname = method.__name__
1974
self.tname = type(method_self).__name__
1977
class CannotSetRevisionId(UnsupportedOperation):
1978
"""Raised when a commit is attempting to set a revision id but cant."""
1981
class NonAsciiRevisionId(UnsupportedOperation):
1982
"""Raised when a commit is attempting to set a non-ascii revision id
1987
class BinaryFile(BzrError):
1989
_fmt = "File is binary but should be text."
1992
class IllegalPath(BzrError):
1994
_fmt = "The path %(path)s is not permitted on this platform"
1996
def __init__(self, path):
1997
BzrError.__init__(self)
2001
class TestamentMismatch(BzrError):
2003
_fmt = """Testament did not match expected value.
2004
For revision_id {%(revision_id)s}, expected {%(expected)s}, measured
2007
def __init__(self, revision_id, expected, measured):
2008
self.revision_id = revision_id
2009
self.expected = expected
2010
self.measured = measured
2013
class NotABundle(BzrError):
2015
_fmt = "Not a bzr revision-bundle: %(text)r"
2017
def __init__(self, text):
2018
BzrError.__init__(self)
2022
class BadBundle(BzrError):
2024
_fmt = "Bad bzr revision-bundle: %(text)r"
2026
def __init__(self, text):
2027
BzrError.__init__(self)
2031
class MalformedHeader(BadBundle):
2033
_fmt = "Malformed bzr revision-bundle header: %(text)r"
2036
class MalformedPatches(BadBundle):
2038
_fmt = "Malformed patches in bzr revision-bundle: %(text)r"
2041
class MalformedFooter(BadBundle):
2043
_fmt = "Malformed footer in bzr revision-bundle: %(text)r"
2046
class UnsupportedEOLMarker(BadBundle):
2048
_fmt = "End of line marker was not \\n in bzr revision-bundle"
2051
# XXX: BadBundle's constructor assumes there's explanatory text,
2052
# but for this there is not
2053
BzrError.__init__(self)
2056
class IncompatibleBundleFormat(BzrError):
2058
_fmt = "Bundle format %(bundle_format)s is incompatible with %(other)s"
2060
def __init__(self, bundle_format, other):
2061
BzrError.__init__(self)
2062
self.bundle_format = bundle_format
2066
class BadInventoryFormat(BzrError):
2068
_fmt = "Root class for inventory serialization errors"
2071
class UnexpectedInventoryFormat(BadInventoryFormat):
2073
_fmt = "The inventory was not in the expected format:\n %(msg)s"
2075
def __init__(self, msg):
2076
BadInventoryFormat.__init__(self, msg=msg)
2079
class RootNotRich(BzrError):
2081
_fmt = """This operation requires rich root data storage"""
2084
class NoSmartMedium(InternalBzrError):
2086
_fmt = "The transport '%(transport)s' cannot tunnel the smart protocol."
2088
def __init__(self, transport):
2089
self.transport = transport
2092
class NoSmartServer(NotBranchError):
2094
_fmt = "No smart server available at %(url)s"
2096
def __init__(self, url):
2100
class UnknownSSH(BzrError):
2102
_fmt = "Unrecognised value for BZR_SSH environment variable: %(vendor)s"
2104
def __init__(self, vendor):
2105
BzrError.__init__(self)
2106
self.vendor = vendor
2109
class SSHVendorNotFound(BzrError):
2111
_fmt = ("Don't know how to handle SSH connections."
2112
" Please set BZR_SSH environment variable.")
2115
class GhostRevisionUnusableHere(BzrError):
2117
_fmt = "Ghost revision {%(revision_id)s} cannot be used here."
2119
def __init__(self, revision_id):
2120
BzrError.__init__(self)
2121
self.revision_id = revision_id
2124
class IllegalUseOfScopeReplacer(InternalBzrError):
2126
_fmt = ("ScopeReplacer object %(name)r was used incorrectly:"
2127
" %(msg)s%(extra)s")
2129
def __init__(self, name, msg, extra=None):
2130
BzrError.__init__(self)
2134
self.extra = ': ' + str(extra)
2139
class InvalidImportLine(InternalBzrError):
2141
_fmt = "Not a valid import statement: %(msg)\n%(text)s"
2143
def __init__(self, text, msg):
2144
BzrError.__init__(self)
2149
class ImportNameCollision(InternalBzrError):
2151
_fmt = ("Tried to import an object to the same name as"
2152
" an existing object. %(name)s")
2154
def __init__(self, name):
2155
BzrError.__init__(self)
2159
class NotAMergeDirective(BzrError):
2160
"""File starting with %(firstline)r is not a merge directive"""
2161
def __init__(self, firstline):
2162
BzrError.__init__(self, firstline=firstline)
2165
class NoMergeSource(BzrError):
2166
"""Raise if no merge source was specified for a merge directive"""
2168
_fmt = "A merge directive must provide either a bundle or a public"\
2172
class IllegalMergeDirectivePayload(BzrError):
2173
"""A merge directive contained something other than a patch or bundle"""
2175
_fmt = "Bad merge directive payload %(start)r"
2177
def __init__(self, start):
2182
class PatchVerificationFailed(BzrError):
2183
"""A patch from a merge directive could not be verified"""
2185
_fmt = "Preview patch does not match requested changes."
2188
class PatchMissing(BzrError):
2189
"""Raise a patch type was specified but no patch supplied"""
2191
_fmt = "Patch_type was %(patch_type)s, but no patch was supplied."
2193
def __init__(self, patch_type):
2194
BzrError.__init__(self)
2195
self.patch_type = patch_type
2198
class UnsupportedInventoryKind(BzrError):
2200
_fmt = """Unsupported entry kind %(kind)s"""
2202
def __init__(self, kind):
2206
class BadSubsumeSource(BzrError):
2208
_fmt = "Can't subsume %(other_tree)s into %(tree)s. %(reason)s"
2210
def __init__(self, tree, other_tree, reason):
2212
self.other_tree = other_tree
2213
self.reason = reason
2216
class SubsumeTargetNeedsUpgrade(BzrError):
2218
_fmt = """Subsume target %(other_tree)s needs to be upgraded."""
2220
def __init__(self, other_tree):
2221
self.other_tree = other_tree
2224
class BadReferenceTarget(InternalBzrError):
2226
_fmt = "Can't add reference to %(other_tree)s into %(tree)s." \
2229
def __init__(self, tree, other_tree, reason):
2231
self.other_tree = other_tree
2232
self.reason = reason
2235
class NoSuchTag(BzrError):
2237
_fmt = "No such tag: %(tag_name)s"
2239
def __init__(self, tag_name):
2240
self.tag_name = tag_name
2243
class TagsNotSupported(BzrError):
2245
_fmt = ("Tags not supported by %(branch)s;"
2246
" you may be able to use bzr upgrade --dirstate-tags.")
2248
def __init__(self, branch):
2249
self.branch = branch
2252
class TagAlreadyExists(BzrError):
2254
_fmt = "Tag %(tag_name)s already exists."
2256
def __init__(self, tag_name):
2257
self.tag_name = tag_name
2260
class MalformedBugIdentifier(BzrError):
2262
_fmt = "Did not understand bug identifier %(bug_id)s: %(reason)s"
2264
def __init__(self, bug_id, reason):
2265
self.bug_id = bug_id
2266
self.reason = reason
2269
class UnknownBugTrackerAbbreviation(BzrError):
2271
_fmt = ("Cannot find registered bug tracker called %(abbreviation)s "
2274
def __init__(self, abbreviation, branch):
2275
self.abbreviation = abbreviation
2276
self.branch = branch
2279
class UnexpectedSmartServerResponse(BzrError):
2281
_fmt = "Could not understand response from smart server: %(response_tuple)r"
2283
def __init__(self, response_tuple):
2284
self.response_tuple = response_tuple
2287
class ContainerError(BzrError):
2288
"""Base class of container errors."""
2291
class UnknownContainerFormatError(ContainerError):
2293
_fmt = "Unrecognised container format: %(container_format)r"
2295
def __init__(self, container_format):
2296
self.container_format = container_format
2299
class UnexpectedEndOfContainerError(ContainerError):
2301
_fmt = "Unexpected end of container stream"
2304
class UnknownRecordTypeError(ContainerError):
2306
_fmt = "Unknown record type: %(record_type)r"
2308
def __init__(self, record_type):
2309
self.record_type = record_type
2312
class InvalidRecordError(ContainerError):
2314
_fmt = "Invalid record: %(reason)s"
2316
def __init__(self, reason):
2317
self.reason = reason
2320
class ContainerHasExcessDataError(ContainerError):
2322
_fmt = "Container has data after end marker: %(excess)r"
2324
def __init__(self, excess):
2325
self.excess = excess
2328
class DuplicateRecordNameError(ContainerError):
2330
_fmt = "Container has multiple records with the same name: %(name)s"
2332
def __init__(self, name):
2336
class NoDestinationAddress(InternalBzrError):
2338
_fmt = "Message does not have a destination address."
2341
class SMTPError(BzrError):
2343
_fmt = "SMTP error: %(error)s"
2345
def __init__(self, error):
2349
class NoMessageSupplied(BzrError):
2351
_fmt = "No message supplied."
2354
class UnknownMailClient(BzrError):
2356
_fmt = "Unknown mail client: %(mail_client)s"
2358
def __init__(self, mail_client):
2359
BzrError.__init__(self, mail_client=mail_client)
2362
class MailClientNotFound(BzrError):
2364
_fmt = "Unable to find mail client with the following names:"\
2365
" %(mail_command_list_string)s"
2367
def __init__(self, mail_command_list):
2368
mail_command_list_string = ', '.join(mail_command_list)
2369
BzrError.__init__(self, mail_command_list=mail_command_list,
2370
mail_command_list_string=mail_command_list_string)
2372
class SMTPConnectionRefused(SMTPError):
2374
_fmt = "SMTP connection to %(host)s refused"
2376
def __init__(self, error, host):
2381
class DefaultSMTPConnectionRefused(SMTPConnectionRefused):
2383
_fmt = "Please specify smtp_server. No server at default %(host)s."
2386
class BzrDirError(BzrError):
2388
def __init__(self, bzrdir):
2389
import bzrlib.urlutils as urlutils
2390
display_url = urlutils.unescape_for_display(bzrdir.root_transport.base,
2392
BzrError.__init__(self, bzrdir=bzrdir, display_url=display_url)
2395
class AlreadyBranch(BzrDirError):
2397
_fmt = "'%(display_url)s' is already a branch."
2400
class AlreadyTree(BzrDirError):
2402
_fmt = "'%(display_url)s' is already a tree."
2405
class AlreadyCheckout(BzrDirError):
2407
_fmt = "'%(display_url)s' is already a checkout."
2410
class ReconfigurationNotSupported(BzrDirError):
2412
_fmt = "Requested reconfiguration of '%(display_url)s' is not supported."
2415
class NoBindLocation(BzrDirError):
2417
_fmt = "No location could be found to bind to at %(display_url)s."
2420
class UncommittedChanges(BzrError):
2422
_fmt = 'Working tree "%(display_url)s" has uncommitted changes.'
2424
def __init__(self, tree):
2425
import bzrlib.urlutils as urlutils
2426
display_url = urlutils.unescape_for_display(
2427
tree.bzrdir.root_transport.base, 'ascii')
2428
BzrError.__init__(self, tree=tree, display_url=display_url)