1
# Copyright (C) 2005, 2006 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.
21
from bzrlib import symbol_versioning
22
from bzrlib.patches import (PatchSyntax,
29
# TODO: is there any value in providing the .args field used by standard
30
# python exceptions? A list of values with no names seems less useful
33
# TODO: Perhaps convert the exception to a string at the moment it's
34
# constructed to make sure it will succeed. But that says nothing about
35
# exceptions that are never raised.
37
# TODO: selftest assertRaises should probably also check that every error
38
# raised can be formatted as a string successfully, and without giving
42
class BzrError(StandardError):
44
Base class for errors raised by bzrlib.
46
:cvar internal_error: if true (or absent) this was probably caused by a
47
bzr bug and should be displayed with a traceback; if False this was
48
probably a user or environment error and they don't need the gory details.
49
(That can be overridden by -Derror on the command line.)
51
:cvar _fmt: Format string to display the error; this is expanded
52
by the instance's dict.
55
internal_error = False
57
def __init__(self, msg=None, **kwds):
58
"""Construct a new BzrError.
60
There are two alternative forms for constructing these objects.
61
Either a preformatted string may be passed, or a set of named
62
arguments can be given. The first is for generic "user" errors which
63
are not intended to be caught and so do not need a specific subclass.
64
The second case is for use with subclasses that provide a _fmt format
65
string to print the arguments.
67
Keyword arguments are taken as parameters to the error, which can
68
be inserted into the format string template. It's recommended
69
that subclasses override the __init__ method to require specific
72
:param msg: If given, this is the literal complete text for the error,
73
not subject to expansion.
75
StandardError.__init__(self)
77
# I was going to deprecate this, but it actually turns out to be
78
# quite handy - mbp 20061103.
79
self._preformatted_string = msg
81
self._preformatted_string = None
82
for key, value in kwds.items():
83
setattr(self, key, value)
86
s = getattr(self, '_preformatted_string', None)
88
# contains a preformatted message; must be cast to plain str
91
fmt = self._get_format_string()
93
s = fmt % self.__dict__
94
# __str__() should always return a 'str' object
95
# never a 'unicode' object.
96
if isinstance(s, unicode):
97
return s.encode('utf8')
99
except (AttributeError, TypeError, NameError, ValueError, KeyError), e:
100
return 'Unprintable exception %s: dict=%r, fmt=%r, error=%s' \
101
% (self.__class__.__name__,
103
getattr(self, '_fmt', None),
106
def _get_format_string(self):
107
"""Return format string for this exception or None"""
108
fmt = getattr(self, '_fmt', None)
111
fmt = getattr(self, '__doc__', None)
113
symbol_versioning.warn("%s uses its docstring as a format, "
114
"it should use _fmt instead" % self.__class__.__name__,
117
return 'Unprintable exception %s: dict=%r, fmt=%r' \
118
% (self.__class__.__name__,
120
getattr(self, '_fmt', None),
124
class BzrNewError(BzrError):
125
"""Deprecated error base class."""
126
# base classes should override the docstring with their human-
127
# readable explanation
129
def __init__(self, *args, **kwds):
130
# XXX: Use the underlying BzrError to always generate the args attribute
131
# if it doesn't exist. We can't use super here, because exceptions are
132
# old-style classes in python2.4 (but new in 2.5). --bmc, 20060426
133
symbol_versioning.warn('BzrNewError was deprecated in bzr 0.13; '
134
'please convert %s to use BzrError instead'
135
% self.__class__.__name__,
138
BzrError.__init__(self, *args)
139
for key, value in kwds.items():
140
setattr(self, key, value)
144
# __str__() should always return a 'str' object
145
# never a 'unicode' object.
146
s = self.__doc__ % self.__dict__
147
if isinstance(s, unicode):
148
return s.encode('utf8')
150
except (TypeError, NameError, ValueError, KeyError), e:
151
return 'Unprintable exception %s(%r): %s' \
152
% (self.__class__.__name__,
153
self.__dict__, str(e))
156
class AlreadyBuilding(BzrError):
158
_fmt = "The tree builder is already building a tree."
161
class BzrCheckError(BzrError):
163
_fmt = "Internal check failed: %(message)s"
165
internal_error = True
167
def __init__(self, message):
168
BzrError.__init__(self)
169
self.message = message
172
class InvalidEntryName(BzrError):
174
_fmt = "Invalid entry name: %(name)s"
176
internal_error = True
178
def __init__(self, name):
179
BzrError.__init__(self)
183
class InvalidRevisionNumber(BzrError):
185
_fmt = "Invalid revision number %(revno)s"
187
def __init__(self, revno):
188
BzrError.__init__(self)
192
class InvalidRevisionId(BzrError):
194
_fmt = "Invalid revision-id {%(revision_id)s} in %(branch)s"
196
def __init__(self, revision_id, branch):
197
# branch can be any string or object with __str__ defined
198
BzrError.__init__(self)
199
self.revision_id = revision_id
203
class NoSuchId(BzrError):
205
_fmt = "The file id %(file_id)s is not present in the tree %(tree)s."
207
def __init__(self, tree, file_id):
208
BzrError.__init__(self)
209
self.file_id = file_id
213
class InventoryModified(BzrError):
215
_fmt = ("The current inventory for the tree %(tree)r has been modified, "
216
"so a clean inventory cannot be read without data loss.")
218
internal_error = True
220
def __init__(self, tree):
224
class NoWorkingTree(BzrError):
226
_fmt = "No WorkingTree exists for %(base)s."
228
def __init__(self, base):
229
BzrError.__init__(self)
233
class NotBuilding(BzrError):
235
_fmt = "Not currently building a tree."
238
class NotLocalUrl(BzrError):
240
_fmt = "%(url)s is not a local path."
242
def __init__(self, url):
246
class WorkingTreeAlreadyPopulated(BzrError):
248
_fmt = """Working tree already populated in %(base)s"""
250
internal_error = True
252
def __init__(self, base):
255
class BzrCommandError(BzrError):
256
"""Error from user command"""
258
internal_error = False
260
# Error from malformed user command; please avoid raising this as a
261
# generic exception not caused by user input.
263
# I think it's a waste of effort to differentiate between errors that
264
# are not intended to be caught anyway. UI code need not subclass
265
# BzrCommandError, and non-UI code should not throw a subclass of
266
# BzrCommandError. ADHB 20051211
267
def __init__(self, msg):
268
# Object.__str__() must return a real string
269
# returning a Unicode string is a python error.
270
if isinstance(msg, unicode):
271
self.msg = msg.encode('utf8')
279
class NotWriteLocked(BzrError):
281
_fmt = """%(not_locked)r is not write locked but needs to be."""
283
def __init__(self, not_locked):
284
self.not_locked = not_locked
287
class BzrOptionError(BzrCommandError):
289
_fmt = "Error in command line options"
292
class BadOptionValue(BzrError):
294
_fmt = """Bad value "%(value)s" for option "%(name)s"."""
296
def __init__(self, name, value):
297
BzrError.__init__(self, name=name, value=value)
300
class StrictCommitFailed(BzrError):
302
_fmt = "Commit refused because there are unknown files in the tree"
305
# XXX: Should be unified with TransportError; they seem to represent the
307
class PathError(BzrError):
309
_fmt = "Generic path error: %(path)r%(extra)s)"
311
def __init__(self, path, extra=None):
312
BzrError.__init__(self)
315
self.extra = ': ' + str(extra)
320
class NoSuchFile(PathError):
322
_fmt = "No such file: %(path)r%(extra)s"
325
class FileExists(PathError):
327
_fmt = "File exists: %(path)r%(extra)s"
330
class DirectoryNotEmpty(PathError):
332
_fmt = "Directory not empty: %(path)r%(extra)s"
335
class ReadingCompleted(BzrError):
337
_fmt = ("The MediumRequest '%(request)s' has already had finish_reading "
338
"called upon it - the request has been completed and no more "
341
internal_error = True
343
def __init__(self, request):
344
self.request = request
347
class ResourceBusy(PathError):
349
_fmt = "Device or resource busy: %(path)r%(extra)s"
352
class PermissionDenied(PathError):
354
_fmt = "Permission denied: %(path)r%(extra)s"
357
class InvalidURL(PathError):
359
_fmt = "Invalid url supplied to transport: %(path)r%(extra)s"
362
class InvalidURLJoin(PathError):
364
_fmt = "Invalid URL join request: %(args)s%(extra)s"
366
def __init__(self, msg, base, args):
367
PathError.__init__(self, base, msg)
368
self.args = [base] + list(args)
371
class UnsupportedProtocol(PathError):
373
_fmt = 'Unsupported protocol for url "%(path)s"%(extra)s'
375
def __init__(self, url, extra):
376
PathError.__init__(self, url, extra=extra)
379
class ShortReadvError(PathError):
381
_fmt = "readv() read %(actual)s bytes rather than %(length)s bytes at %(offset)s for %(path)s%(extra)s"
383
internal_error = True
385
def __init__(self, path, offset, length, actual, extra=None):
386
PathError.__init__(self, path, extra=extra)
392
class PathNotChild(BzrError):
394
_fmt = "Path %(path)r is not a child of path %(base)r%(extra)s"
396
internal_error = True
398
def __init__(self, path, base, extra=None):
399
BzrError.__init__(self)
403
self.extra = ': ' + str(extra)
408
class InvalidNormalization(PathError):
410
_fmt = "Path %(path)r is not unicode normalized"
413
# TODO: This is given a URL; we try to unescape it but doing that from inside
414
# the exception object is a bit undesirable.
415
# TODO: Probably this behavior of should be a common superclass
416
class NotBranchError(PathError):
418
_fmt = "Not a branch: %(path)s"
420
def __init__(self, path):
421
import bzrlib.urlutils as urlutils
422
self.path = urlutils.unescape_for_display(path, 'ascii')
425
class AlreadyBranchError(PathError):
427
_fmt = "Already a branch: %(path)s."
430
class BranchExistsWithoutWorkingTree(PathError):
432
_fmt = "Directory contains a branch, but no working tree \
433
(use bzr checkout if you wish to build a working tree): %(path)s"
436
class AtomicFileAlreadyClosed(PathError):
438
_fmt = "'%(function)s' called on an AtomicFile after it was closed: %(path)s"
440
def __init__(self, path, function):
441
PathError.__init__(self, path=path, extra=None)
442
self.function = function
445
class InaccessibleParent(PathError):
447
_fmt = "Parent not accessible given base %(base)s and relative path %(path)s"
449
def __init__(self, path, base):
450
PathError.__init__(self, path)
454
class NoRepositoryPresent(BzrError):
456
_fmt = "No repository present: %(path)r"
457
def __init__(self, bzrdir):
458
BzrError.__init__(self)
459
self.path = bzrdir.transport.clone('..').base
462
class FileInWrongBranch(BzrError):
464
_fmt = "File %(path)s in not in branch %(branch_base)s."
466
def __init__(self, branch, path):
467
BzrError.__init__(self)
469
self.branch_base = branch.base
473
class UnsupportedFormatError(BzrError):
475
_fmt = "Unsupported branch format: %(format)s"
478
class UnknownFormatError(BzrError):
480
_fmt = "Unknown branch format: %(format)r"
483
class IncompatibleFormat(BzrError):
485
_fmt = "Format %(format)s is not compatible with .bzr version %(bzrdir)s."
487
def __init__(self, format, bzrdir_format):
488
BzrError.__init__(self)
490
self.bzrdir = bzrdir_format
493
class IncompatibleRevision(BzrError):
495
_fmt = "Revision is not compatible with %(repo_format)s"
497
def __init__(self, repo_format):
498
BzrError.__init__(self)
499
self.repo_format = repo_format
502
class NotVersionedError(BzrError):
504
_fmt = "%(path)s is not versioned"
506
def __init__(self, path):
507
BzrError.__init__(self)
511
class PathsNotVersionedError(BzrError):
512
# used when reporting several paths are not versioned
514
_fmt = "Path(s) are not versioned: %(paths_as_string)s"
516
def __init__(self, paths):
517
from bzrlib.osutils import quotefn
518
BzrError.__init__(self)
520
self.paths_as_string = ' '.join([quotefn(p) for p in paths])
523
class PathsDoNotExist(BzrError):
525
_fmt = "Path(s) do not exist: %(paths_as_string)s"
527
# used when reporting that paths are neither versioned nor in the working
530
def __init__(self, paths):
532
from bzrlib.osutils import quotefn
533
BzrError.__init__(self)
535
self.paths_as_string = ' '.join([quotefn(p) for p in paths])
538
class BadFileKindError(BzrError):
540
_fmt = "Cannot operate on %(filename)s of unsupported kind %(kind)s"
543
class ForbiddenControlFileError(BzrError):
545
_fmt = "Cannot operate on %(filename)s because it is a control file"
548
class LockError(BzrError):
550
_fmt = "Lock error: %(message)s"
552
# All exceptions from the lock/unlock functions should be from
553
# this exception class. They will be translated as necessary. The
554
# original exception is available as e.original_error
556
# New code should prefer to raise specific subclasses
557
def __init__(self, message):
558
self.message = message
561
class CommitNotPossible(LockError):
563
_fmt = "A commit was attempted but we do not have a write lock open."
569
class AlreadyCommitted(LockError):
571
_fmt = "A rollback was requested, but is not able to be accomplished."
577
class ReadOnlyError(LockError):
579
_fmt = "A write attempt was made in a read only transaction on %(obj)s"
581
def __init__(self, obj):
585
class OutSideTransaction(BzrError):
587
_fmt = "A transaction related operation was attempted after the transaction finished."
590
class ObjectNotLocked(LockError):
592
_fmt = "%(obj)r is not locked"
594
internal_error = True
596
# this can indicate that any particular object is not locked; see also
597
# LockNotHeld which means that a particular *lock* object is not held by
598
# the caller -- perhaps they should be unified.
599
def __init__(self, obj):
603
class ReadOnlyObjectDirtiedError(ReadOnlyError):
605
_fmt = "Cannot change object %(obj)r in read only transaction"
607
def __init__(self, obj):
611
class UnlockableTransport(LockError):
613
_fmt = "Cannot lock: transport is read only: %(transport)s"
615
def __init__(self, transport):
616
self.transport = transport
619
class LockContention(LockError):
621
_fmt = "Could not acquire lock %(lock)s"
622
# TODO: show full url for lock, combining the transport and relative bits?
624
def __init__(self, lock):
628
class LockBroken(LockError):
630
_fmt = "Lock was broken while still open: %(lock)s - check storage consistency!"
632
def __init__(self, lock):
636
class LockBreakMismatch(LockError):
638
_fmt = "Lock was released and re-acquired before being broken: %(lock)s: held by %(holder)r, wanted to break %(target)r"
640
def __init__(self, lock, holder, target):
646
class LockNotHeld(LockError):
648
_fmt = "Lock not held: %(lock)s"
650
def __init__(self, lock):
654
class PointlessCommit(BzrError):
656
_fmt = "No changes to commit"
659
class UpgradeReadonly(BzrError):
661
_fmt = "Upgrade URL cannot work with readonly URLs."
664
class UpToDateFormat(BzrError):
666
_fmt = "The branch format %(format)s is already at the most recent format."
668
def __init__(self, format):
669
BzrError.__init__(self)
673
class StrictCommitFailed(Exception):
675
_fmt = "Commit refused because there are unknowns in the tree."
678
class NoSuchRevision(BzrError):
680
_fmt = "Branch %(branch)s has no revision %(revision)s"
682
internal_error = True
684
def __init__(self, branch, revision):
685
BzrError.__init__(self, branch=branch, revision=revision)
688
class NoSuchRevisionSpec(BzrError):
690
_fmt = "No namespace registered for string: %(spec)r"
692
def __init__(self, spec):
693
BzrError.__init__(self, spec=spec)
696
class InvalidRevisionSpec(BzrError):
698
_fmt = "Requested revision: %(spec)r does not exist in branch: %(branch)s%(extra)s"
700
def __init__(self, spec, branch, extra=None):
701
BzrError.__init__(self, branch=branch, spec=spec)
703
self.extra = '\n' + str(extra)
708
class HistoryMissing(BzrError):
710
_fmt = "%(branch)s is missing %(object_type)s {%(object_id)s}"
713
class DivergedBranches(BzrError):
715
_fmt = "These branches have diverged. Use the merge command to reconcile them."""
717
internal_error = False
719
def __init__(self, branch1, branch2):
720
self.branch1 = branch1
721
self.branch2 = branch2
724
class UnrelatedBranches(BzrError):
726
_fmt = "Branches have no common ancestor, and no merge base revision was specified."
728
internal_error = False
731
class NoCommonAncestor(BzrError):
733
_fmt = "Revisions have no common ancestor: %(revision_a)s %(revision_b)s"
735
def __init__(self, revision_a, revision_b):
736
self.revision_a = revision_a
737
self.revision_b = revision_b
740
class NoCommonRoot(BzrError):
742
_fmt = "Revisions are not derived from the same root: " \
743
"%(revision_a)s %(revision_b)s."
745
def __init__(self, revision_a, revision_b):
746
BzrError.__init__(self, revision_a=revision_a, revision_b=revision_b)
749
class NotAncestor(BzrError):
751
_fmt = "Revision %(rev_id)s is not an ancestor of %(not_ancestor_id)s"
753
def __init__(self, rev_id, not_ancestor_id):
754
BzrError.__init__(self, rev_id=rev_id,
755
not_ancestor_id=not_ancestor_id)
758
class InstallFailed(BzrError):
760
def __init__(self, revisions):
761
revision_str = ", ".join(str(r) for r in revisions)
762
msg = "Could not install revisions:\n%s" % revision_str
763
BzrError.__init__(self, msg)
764
self.revisions = revisions
767
class AmbiguousBase(BzrError):
769
def __init__(self, bases):
770
warn("BzrError AmbiguousBase has been deprecated as of bzrlib 0.8.",
772
msg = "The correct base is unclear, because %s are all equally close" %\
774
BzrError.__init__(self, msg)
778
class NoCommits(BzrError):
780
_fmt = "Branch %(branch)s has no commits."
782
def __init__(self, branch):
783
BzrError.__init__(self, branch=branch)
786
class UnlistableStore(BzrError):
788
def __init__(self, store):
789
BzrError.__init__(self, "Store %s is not listable" % store)
793
class UnlistableBranch(BzrError):
795
def __init__(self, br):
796
BzrError.__init__(self, "Stores for branch %s are not listable" % br)
799
class BoundBranchOutOfDate(BzrError):
801
_fmt = "Bound branch %(branch)s is out of date with master branch %(master)s."
803
def __init__(self, branch, master):
804
BzrError.__init__(self)
809
class CommitToDoubleBoundBranch(BzrError):
811
_fmt = "Cannot commit to branch %(branch)s. It is bound to %(master)s, which is bound to %(remote)s."
813
def __init__(self, branch, master, remote):
814
BzrError.__init__(self)
820
class OverwriteBoundBranch(BzrError):
822
_fmt = "Cannot pull --overwrite to a branch which is bound %(branch)s"
824
def __init__(self, branch):
825
BzrError.__init__(self)
829
class BoundBranchConnectionFailure(BzrError):
831
_fmt = "Unable to connect to target of bound branch %(branch)s => %(target)s: %(error)s"
833
def __init__(self, branch, target, error):
834
BzrError.__init__(self)
840
class WeaveError(BzrError):
842
_fmt = "Error in processing weave: %(message)s"
844
def __init__(self, message=None):
845
BzrError.__init__(self)
846
self.message = message
849
class WeaveRevisionAlreadyPresent(WeaveError):
851
_fmt = "Revision {%(revision_id)s} already present in %(weave)s"
853
def __init__(self, revision_id, weave):
855
WeaveError.__init__(self)
856
self.revision_id = revision_id
860
class WeaveRevisionNotPresent(WeaveError):
862
_fmt = "Revision {%(revision_id)s} not present in %(weave)s"
864
def __init__(self, revision_id, weave):
865
WeaveError.__init__(self)
866
self.revision_id = revision_id
870
class WeaveFormatError(WeaveError):
872
_fmt = "Weave invariant violated: %(what)s"
874
def __init__(self, what):
875
WeaveError.__init__(self)
879
class WeaveParentMismatch(WeaveError):
881
_fmt = "Parents are mismatched between two revisions."
884
class WeaveInvalidChecksum(WeaveError):
886
_fmt = "Text did not match it's checksum: %(message)s"
889
class WeaveTextDiffers(WeaveError):
891
_fmt = "Weaves differ on text content. Revision: {%(revision_id)s}, %(weave_a)s, %(weave_b)s"
893
def __init__(self, revision_id, weave_a, weave_b):
894
WeaveError.__init__(self)
895
self.revision_id = revision_id
896
self.weave_a = weave_a
897
self.weave_b = weave_b
900
class WeaveTextDiffers(WeaveError):
902
_fmt = "Weaves differ on text content. Revision: {%(revision_id)s}, %(weave_a)s, %(weave_b)s"
904
def __init__(self, revision_id, weave_a, weave_b):
905
WeaveError.__init__(self)
906
self.revision_id = revision_id
907
self.weave_a = weave_a
908
self.weave_b = weave_b
911
class VersionedFileError(BzrError):
913
_fmt = "Versioned file error"
916
class RevisionNotPresent(VersionedFileError):
918
_fmt = "Revision {%(revision_id)s} not present in %(file_id)s."
920
def __init__(self, revision_id, file_id):
921
VersionedFileError.__init__(self)
922
self.revision_id = revision_id
923
self.file_id = file_id
926
class RevisionAlreadyPresent(VersionedFileError):
928
_fmt = "Revision {%(revision_id)s} already present in %(file_id)s."
930
def __init__(self, revision_id, file_id):
931
VersionedFileError.__init__(self)
932
self.revision_id = revision_id
933
self.file_id = file_id
936
class KnitError(BzrError):
940
internal_error = True
943
class KnitHeaderError(KnitError):
945
_fmt = "Knit header error: %(badline)r unexpected for file %(filename)s"
947
def __init__(self, badline, filename):
948
KnitError.__init__(self)
949
self.badline = badline
950
self.filename = filename
953
class KnitCorrupt(KnitError):
955
_fmt = "Knit %(filename)s corrupt: %(how)s"
957
def __init__(self, filename, how):
958
KnitError.__init__(self)
959
self.filename = filename
963
class KnitIndexUnknownMethod(KnitError):
964
"""Raised when we don't understand the storage method.
966
Currently only 'fulltext' and 'line-delta' are supported.
969
_fmt = ("Knit index %(filename)s does not have a known method"
970
" in options: %(options)r")
972
def __init__(self, filename, options):
973
KnitError.__init__(self)
974
self.filename = filename
975
self.options = options
978
class NoSuchExportFormat(BzrError):
980
_fmt = "Export format %(format)r not supported"
982
def __init__(self, format):
983
BzrError.__init__(self)
987
class TransportError(BzrError):
989
_fmt = "Transport error: %(msg)s %(orig_error)s"
991
def __init__(self, msg=None, orig_error=None):
992
if msg is None and orig_error is not None:
993
msg = str(orig_error)
994
if orig_error is None:
999
self.orig_error = orig_error
1000
BzrError.__init__(self)
1003
class TooManyConcurrentRequests(BzrError):
1005
_fmt = ("The medium '%(medium)s' has reached its concurrent request limit. "
1006
"Be sure to finish_writing and finish_reading on the "
1007
"current request that is open.")
1009
internal_error = True
1011
def __init__(self, medium):
1012
self.medium = medium
1015
class SmartProtocolError(TransportError):
1017
_fmt = "Generic bzr smart protocol error: %(details)s"
1019
def __init__(self, details):
1020
self.details = details
1023
# A set of semi-meaningful errors which can be thrown
1024
class TransportNotPossible(TransportError):
1026
_fmt = "Transport operation not possible: %(msg)s %(orig_error)s"
1029
class ConnectionError(TransportError):
1031
_fmt = "Connection error: %(msg)s %(orig_error)s"
1034
class SocketConnectionError(ConnectionError):
1036
_fmt = "%(msg)s %(host)s%(port)s%(orig_error)s"
1038
def __init__(self, host, port=None, msg=None, orig_error=None):
1040
msg = 'Failed to connect to'
1041
if orig_error is None:
1044
orig_error = '; ' + str(orig_error)
1045
ConnectionError.__init__(self, msg=msg, orig_error=orig_error)
1050
self.port = ':%s' % port
1053
class ConnectionReset(TransportError):
1055
_fmt = "Connection closed: %(msg)s %(orig_error)s"
1058
class InvalidRange(TransportError):
1060
_fmt = "Invalid range access in %(path)s at %(offset)s."
1062
def __init__(self, path, offset):
1063
TransportError.__init__(self, ("Invalid range access in %s at %d"
1066
self.offset = offset
1069
class InvalidHttpResponse(TransportError):
1071
_fmt = "Invalid http response for %(path)s: %(msg)s"
1073
def __init__(self, path, msg, orig_error=None):
1075
TransportError.__init__(self, msg, orig_error=orig_error)
1078
class InvalidHttpRange(InvalidHttpResponse):
1080
_fmt = "Invalid http range %(range)r for %(path)s: %(msg)s"
1082
def __init__(self, path, range, msg):
1084
InvalidHttpResponse.__init__(self, path, msg)
1087
class InvalidHttpContentType(InvalidHttpResponse):
1089
_fmt = 'Invalid http Content-type "%(ctype)s" for %(path)s: %(msg)s'
1091
def __init__(self, path, ctype, msg):
1093
InvalidHttpResponse.__init__(self, path, msg)
1096
class ConflictsInTree(BzrError):
1098
_fmt = "Working tree has conflicts."
1101
class ParseConfigError(BzrError):
1103
def __init__(self, errors, filename):
1104
if filename is None:
1106
message = "Error(s) parsing config file %s:\n%s" % \
1107
(filename, ('\n'.join(e.message for e in errors)))
1108
BzrError.__init__(self, message)
1111
class NoEmailInUsername(BzrError):
1113
_fmt = "%(username)r does not seem to contain a reasonable email address"
1115
def __init__(self, username):
1116
BzrError.__init__(self)
1117
self.username = username
1120
class SigningFailed(BzrError):
1122
_fmt = "Failed to gpg sign data with command %(command_line)r"
1124
def __init__(self, command_line):
1125
BzrError.__init__(self, command_line=command_line)
1128
class WorkingTreeNotRevision(BzrError):
1130
_fmt = ("The working tree for %(basedir)s has changed since"
1131
" the last commit, but weave merge requires that it be"
1134
def __init__(self, tree):
1135
BzrError.__init__(self, basedir=tree.basedir)
1138
class CantReprocessAndShowBase(BzrError):
1140
_fmt = "Can't reprocess and show base, because reprocessing obscures " \
1141
"the relationship of conflicting lines to the base"
1144
class GraphCycleError(BzrError):
1146
_fmt = "Cycle in graph %(graph)r"
1148
def __init__(self, graph):
1149
BzrError.__init__(self)
1153
class WritingCompleted(BzrError):
1155
_fmt = ("The MediumRequest '%(request)s' has already had finish_writing "
1156
"called upon it - accept bytes may not be called anymore.")
1158
internal_error = True
1160
def __init__(self, request):
1161
self.request = request
1164
class WritingNotComplete(BzrError):
1166
_fmt = ("The MediumRequest '%(request)s' has not has finish_writing "
1167
"called upon it - until the write phase is complete no "
1168
"data may be read.")
1170
internal_error = True
1172
def __init__(self, request):
1173
self.request = request
1176
class NotConflicted(BzrError):
1178
_fmt = "File %(filename)s is not conflicted."
1180
def __init__(self, filename):
1181
BzrError.__init__(self)
1182
self.filename = filename
1185
class MediumNotConnected(BzrError):
1187
_fmt = """The medium '%(medium)s' is not connected."""
1189
internal_error = True
1191
def __init__(self, medium):
1192
self.medium = medium
1195
class MustUseDecorated(Exception):
1197
_fmt = """A decorating function has requested its original command be used."""
1200
class NoBundleFound(BzrError):
1202
_fmt = "No bundle was found in %(filename)s"
1204
def __init__(self, filename):
1205
BzrError.__init__(self)
1206
self.filename = filename
1209
class BundleNotSupported(BzrError):
1211
_fmt = "Unable to handle bundle version %(version)s: %(msg)s"
1213
def __init__(self, version, msg):
1214
BzrError.__init__(self)
1215
self.version = version
1219
class MissingText(BzrError):
1221
_fmt = "Branch %(base)s is missing revision %(text_revision)s of %(file_id)s"
1223
def __init__(self, branch, text_revision, file_id):
1224
BzrError.__init__(self)
1225
self.branch = branch
1226
self.base = branch.base
1227
self.text_revision = text_revision
1228
self.file_id = file_id
1231
class DuplicateKey(BzrError):
1233
_fmt = "Key %(key)s is already present in map"
1236
class MalformedTransform(BzrError):
1238
_fmt = "Tree transform is malformed %(conflicts)r"
1241
class NoFinalPath(BzrError):
1243
_fmt = ("No final name for trans_id %(trans_id)r\n"
1244
"file-id: %(file_id)r\n"
1245
"root trans-id: %(root_trans_id)r\n")
1247
def __init__(self, trans_id, transform):
1248
self.trans_id = trans_id
1249
self.file_id = transform.final_file_id(trans_id)
1250
self.root_trans_id = transform.root
1253
class BzrBadParameter(BzrError):
1255
_fmt = "Bad parameter: %(param)r"
1257
# This exception should never be thrown, but it is a base class for all
1258
# parameter-to-function errors.
1260
def __init__(self, param):
1261
BzrError.__init__(self)
1265
class BzrBadParameterNotUnicode(BzrBadParameter):
1267
_fmt = "Parameter %(param)s is neither unicode nor utf8."
1270
class ReusingTransform(BzrError):
1272
_fmt = "Attempt to reuse a transform that has already been applied."
1275
class CantMoveRoot(BzrError):
1277
_fmt = "Moving the root directory is not supported at this time"
1280
class BzrBadParameterNotString(BzrBadParameter):
1282
_fmt = "Parameter %(param)s is not a string or unicode string."
1285
class BzrBadParameterMissing(BzrBadParameter):
1287
_fmt = "Parameter $(param)s is required but not present."
1290
class BzrBadParameterUnicode(BzrBadParameter):
1292
_fmt = "Parameter %(param)s is unicode but only byte-strings are permitted."
1295
class BzrBadParameterContainsNewline(BzrBadParameter):
1297
_fmt = "Parameter %(param)s contains a newline."
1300
class DependencyNotPresent(BzrError):
1302
_fmt = 'Unable to import library "%(library)s": %(error)s'
1304
def __init__(self, library, error):
1305
BzrError.__init__(self, library=library, error=error)
1308
class ParamikoNotPresent(DependencyNotPresent):
1310
_fmt = "Unable to import paramiko (required for sftp support): %(error)s"
1312
def __init__(self, error):
1313
DependencyNotPresent.__init__(self, 'paramiko', error)
1316
class PointlessMerge(BzrError):
1318
_fmt = "Nothing to merge."
1321
class UninitializableFormat(BzrError):
1323
_fmt = "Format %(format)s cannot be initialised by this version of bzr."
1325
def __init__(self, format):
1326
BzrError.__init__(self)
1327
self.format = format
1330
class BadConversionTarget(BzrError):
1332
_fmt = "Cannot convert to format %(format)s. %(problem)s"
1334
def __init__(self, problem, format):
1335
BzrError.__init__(self)
1336
self.problem = problem
1337
self.format = format
1340
class NoDiff(BzrError):
1342
_fmt = "Diff is not installed on this machine: %(msg)s"
1344
def __init__(self, msg):
1345
BzrError.__init__(self, msg=msg)
1348
class NoDiff3(BzrError):
1350
_fmt = "Diff3 is not installed on this machine."
1353
class ExistingLimbo(BzrError):
1355
_fmt = """This tree contains left-over files from a failed operation.
1356
Please examine %(limbo_dir)s to see if it contains any files you wish to
1357
keep, and delete it when you are done."""
1359
def __init__(self, limbo_dir):
1360
BzrError.__init__(self)
1361
self.limbo_dir = limbo_dir
1364
class ImmortalLimbo(BzrError):
1366
_fmt = """Unable to delete transform temporary directory $(limbo_dir)s.
1367
Please examine %(limbo_dir)s to see if it contains any files you wish to
1368
keep, and delete it when you are done."""
1370
def __init__(self, limbo_dir):
1371
BzrError.__init__(self)
1372
self.limbo_dir = limbo_dir
1375
class OutOfDateTree(BzrError):
1377
_fmt = "Working tree is out of date, please run 'bzr update'."
1379
def __init__(self, tree):
1380
BzrError.__init__(self)
1384
class MergeModifiedFormatError(BzrError):
1386
_fmt = "Error in merge modified format"
1389
class ConflictFormatError(BzrError):
1391
_fmt = "Format error in conflict listings"
1394
class CorruptRepository(BzrError):
1396
_fmt = """An error has been detected in the repository %(repo_path)s.
1397
Please run bzr reconcile on this repository."""
1399
def __init__(self, repo):
1400
BzrError.__init__(self)
1401
self.repo_path = repo.bzrdir.root_transport.base
1404
class UpgradeRequired(BzrError):
1406
_fmt = "To use this feature you must upgrade your branch at %(path)s."
1408
def __init__(self, path):
1409
BzrError.__init__(self)
1413
class LocalRequiresBoundBranch(BzrError):
1415
_fmt = "Cannot perform local-only commits on unbound branches."
1418
class MissingProgressBarFinish(BzrError):
1420
_fmt = "A nested progress bar was not 'finished' correctly."
1423
class InvalidProgressBarType(BzrError):
1425
_fmt = """Environment variable BZR_PROGRESS_BAR='%(bar_type)s is not a supported type
1426
Select one of: %(valid_types)s"""
1428
def __init__(self, bar_type, valid_types):
1429
BzrError.__init__(self, bar_type=bar_type, valid_types=valid_types)
1432
class UnsupportedOperation(BzrError):
1434
_fmt = "The method %(mname)s is not supported on objects of type %(tname)s."
1436
def __init__(self, method, method_self):
1437
self.method = method
1438
self.mname = method.__name__
1439
self.tname = type(method_self).__name__
1442
class CannotSetRevisionId(UnsupportedOperation):
1443
"""Raised when a commit is attempting to set a revision id but cant."""
1446
class NonAsciiRevisionId(UnsupportedOperation):
1447
"""Raised when a commit is attempting to set a non-ascii revision id but cant."""
1450
class BinaryFile(BzrError):
1452
_fmt = "File is binary but should be text."
1455
class IllegalPath(BzrError):
1457
_fmt = "The path %(path)s is not permitted on this platform"
1459
def __init__(self, path):
1460
BzrError.__init__(self)
1464
class TestamentMismatch(BzrError):
1466
_fmt = """Testament did not match expected value.
1467
For revision_id {%(revision_id)s}, expected {%(expected)s}, measured
1470
def __init__(self, revision_id, expected, measured):
1471
self.revision_id = revision_id
1472
self.expected = expected
1473
self.measured = measured
1476
class NotABundle(BzrError):
1478
_fmt = "Not a bzr revision-bundle: %(text)r"
1480
def __init__(self, text):
1481
BzrError.__init__(self)
1485
class BadBundle(BzrError):
1487
_fmt = "Bad bzr revision-bundle: %(text)r"
1489
def __init__(self, text):
1490
BzrError.__init__(self)
1494
class MalformedHeader(BadBundle):
1496
_fmt = "Malformed bzr revision-bundle header: %(text)r"
1499
class MalformedPatches(BadBundle):
1501
_fmt = "Malformed patches in bzr revision-bundle: %(text)r"
1504
class MalformedFooter(BadBundle):
1506
_fmt = "Malformed footer in bzr revision-bundle: %(text)r"
1509
class UnsupportedEOLMarker(BadBundle):
1511
_fmt = "End of line marker was not \\n in bzr revision-bundle"
1514
# XXX: BadBundle's constructor assumes there's explanatory text,
1515
# but for this there is not
1516
BzrError.__init__(self)
1519
class IncompatibleBundleFormat(BzrError):
1521
_fmt = "Bundle format %(bundle_format)s is incompatible with %(other)s"
1523
def __init__(self, bundle_format, other):
1524
BzrError.__init__(self)
1525
self.bundle_format = bundle_format
1529
class BadInventoryFormat(BzrError):
1531
_fmt = "Root class for inventory serialization errors"
1534
class UnexpectedInventoryFormat(BadInventoryFormat):
1536
_fmt = "The inventory was not in the expected format:\n %(msg)s"
1538
def __init__(self, msg):
1539
BadInventoryFormat.__init__(self, msg=msg)
1542
class NoSmartMedium(BzrError):
1544
_fmt = "The transport '%(transport)s' cannot tunnel the smart protocol."
1546
def __init__(self, transport):
1547
self.transport = transport
1550
class NoSmartServer(NotBranchError):
1552
_fmt = "No smart server available at %(url)s"
1554
def __init__(self, url):
1558
class UnknownSSH(BzrError):
1560
_fmt = "Unrecognised value for BZR_SSH environment variable: %(vendor)s"
1562
def __init__(self, vendor):
1563
BzrError.__init__(self)
1564
self.vendor = vendor
1567
class GhostRevisionUnusableHere(BzrError):
1569
_fmt = "Ghost revision {%(revision_id)s} cannot be used here."
1571
def __init__(self, revision_id):
1572
BzrError.__init__(self)
1573
self.revision_id = revision_id
1576
class IllegalUseOfScopeReplacer(BzrError):
1578
_fmt = "ScopeReplacer object %(name)r was used incorrectly: %(msg)s%(extra)s"
1580
internal_error = True
1582
def __init__(self, name, msg, extra=None):
1583
BzrError.__init__(self)
1587
self.extra = ': ' + str(extra)
1592
class InvalidImportLine(BzrError):
1594
_fmt = "Not a valid import statement: %(msg)\n%(text)s"
1596
internal_error = True
1598
def __init__(self, text, msg):
1599
BzrError.__init__(self)
1604
class ImportNameCollision(BzrError):
1606
_fmt = "Tried to import an object to the same name as an existing object. %(name)s"
1608
internal_error = True
1610
def __init__(self, name):
1611
BzrError.__init__(self)