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
internal_error = True
554
# All exceptions from the lock/unlock functions should be from
555
# this exception class. They will be translated as necessary. The
556
# original exception is available as e.original_error
558
# New code should prefer to raise specific subclasses
559
def __init__(self, message):
560
self.message = message
563
class CommitNotPossible(LockError):
565
_fmt = "A commit was attempted but we do not have a write lock open."
571
class AlreadyCommitted(LockError):
573
_fmt = "A rollback was requested, but is not able to be accomplished."
579
class ReadOnlyError(LockError):
581
_fmt = "A write attempt was made in a read only transaction on %(obj)s"
583
def __init__(self, obj):
587
class OutSideTransaction(BzrError):
589
_fmt = "A transaction related operation was attempted after the transaction finished."
592
class ObjectNotLocked(LockError):
594
_fmt = "%(obj)r is not locked"
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
625
internal_error = False
627
def __init__(self, lock):
631
class LockBroken(LockError):
633
_fmt = "Lock was broken while still open: %(lock)s - check storage consistency!"
635
internal_error = False
637
def __init__(self, lock):
641
class LockBreakMismatch(LockError):
643
_fmt = "Lock was released and re-acquired before being broken: %(lock)s: held by %(holder)r, wanted to break %(target)r"
645
internal_error = False
647
def __init__(self, lock, holder, target):
653
class LockNotHeld(LockError):
655
_fmt = "Lock not held: %(lock)s"
657
internal_error = False
659
def __init__(self, lock):
663
class PointlessCommit(BzrError):
665
_fmt = "No changes to commit"
668
class UpgradeReadonly(BzrError):
670
_fmt = "Upgrade URL cannot work with readonly URLs."
673
class UpToDateFormat(BzrError):
675
_fmt = "The branch format %(format)s is already at the most recent format."
677
def __init__(self, format):
678
BzrError.__init__(self)
682
class StrictCommitFailed(Exception):
684
_fmt = "Commit refused because there are unknowns in the tree."
687
class NoSuchRevision(BzrError):
689
_fmt = "Branch %(branch)s has no revision %(revision)s"
691
internal_error = True
693
def __init__(self, branch, revision):
694
BzrError.__init__(self, branch=branch, revision=revision)
697
class NoSuchRevisionSpec(BzrError):
699
_fmt = "No namespace registered for string: %(spec)r"
701
def __init__(self, spec):
702
BzrError.__init__(self, spec=spec)
705
class InvalidRevisionSpec(BzrError):
707
_fmt = "Requested revision: %(spec)r does not exist in branch: %(branch)s%(extra)s"
709
def __init__(self, spec, branch, extra=None):
710
BzrError.__init__(self, branch=branch, spec=spec)
712
self.extra = '\n' + str(extra)
717
class HistoryMissing(BzrError):
719
_fmt = "%(branch)s is missing %(object_type)s {%(object_id)s}"
722
class DivergedBranches(BzrError):
724
_fmt = "These branches have diverged. Use the merge command to reconcile them."""
726
internal_error = False
728
def __init__(self, branch1, branch2):
729
self.branch1 = branch1
730
self.branch2 = branch2
733
class UnrelatedBranches(BzrError):
735
_fmt = "Branches have no common ancestor, and no merge base revision was specified."
737
internal_error = False
740
class NoCommonAncestor(BzrError):
742
_fmt = "Revisions have no common ancestor: %(revision_a)s %(revision_b)s"
744
def __init__(self, revision_a, revision_b):
745
self.revision_a = revision_a
746
self.revision_b = revision_b
749
class NoCommonRoot(BzrError):
751
_fmt = "Revisions are not derived from the same root: " \
752
"%(revision_a)s %(revision_b)s."
754
def __init__(self, revision_a, revision_b):
755
BzrError.__init__(self, revision_a=revision_a, revision_b=revision_b)
758
class NotAncestor(BzrError):
760
_fmt = "Revision %(rev_id)s is not an ancestor of %(not_ancestor_id)s"
762
def __init__(self, rev_id, not_ancestor_id):
763
BzrError.__init__(self, rev_id=rev_id,
764
not_ancestor_id=not_ancestor_id)
767
class InstallFailed(BzrError):
769
def __init__(self, revisions):
770
revision_str = ", ".join(str(r) for r in revisions)
771
msg = "Could not install revisions:\n%s" % revision_str
772
BzrError.__init__(self, msg)
773
self.revisions = revisions
776
class AmbiguousBase(BzrError):
778
def __init__(self, bases):
779
warn("BzrError AmbiguousBase has been deprecated as of bzrlib 0.8.",
781
msg = "The correct base is unclear, because %s are all equally close" %\
783
BzrError.__init__(self, msg)
787
class NoCommits(BzrError):
789
_fmt = "Branch %(branch)s has no commits."
791
def __init__(self, branch):
792
BzrError.__init__(self, branch=branch)
795
class UnlistableStore(BzrError):
797
def __init__(self, store):
798
BzrError.__init__(self, "Store %s is not listable" % store)
802
class UnlistableBranch(BzrError):
804
def __init__(self, br):
805
BzrError.__init__(self, "Stores for branch %s are not listable" % br)
808
class BoundBranchOutOfDate(BzrError):
810
_fmt = "Bound branch %(branch)s is out of date with master branch %(master)s."
812
def __init__(self, branch, master):
813
BzrError.__init__(self)
818
class CommitToDoubleBoundBranch(BzrError):
820
_fmt = "Cannot commit to branch %(branch)s. It is bound to %(master)s, which is bound to %(remote)s."
822
def __init__(self, branch, master, remote):
823
BzrError.__init__(self)
829
class OverwriteBoundBranch(BzrError):
831
_fmt = "Cannot pull --overwrite to a branch which is bound %(branch)s"
833
def __init__(self, branch):
834
BzrError.__init__(self)
838
class BoundBranchConnectionFailure(BzrError):
840
_fmt = "Unable to connect to target of bound branch %(branch)s => %(target)s: %(error)s"
842
def __init__(self, branch, target, error):
843
BzrError.__init__(self)
849
class WeaveError(BzrError):
851
_fmt = "Error in processing weave: %(message)s"
853
def __init__(self, message=None):
854
BzrError.__init__(self)
855
self.message = message
858
class WeaveRevisionAlreadyPresent(WeaveError):
860
_fmt = "Revision {%(revision_id)s} already present in %(weave)s"
862
def __init__(self, revision_id, weave):
864
WeaveError.__init__(self)
865
self.revision_id = revision_id
869
class WeaveRevisionNotPresent(WeaveError):
871
_fmt = "Revision {%(revision_id)s} not present in %(weave)s"
873
def __init__(self, revision_id, weave):
874
WeaveError.__init__(self)
875
self.revision_id = revision_id
879
class WeaveFormatError(WeaveError):
881
_fmt = "Weave invariant violated: %(what)s"
883
def __init__(self, what):
884
WeaveError.__init__(self)
888
class WeaveParentMismatch(WeaveError):
890
_fmt = "Parents are mismatched between two revisions."
893
class WeaveInvalidChecksum(WeaveError):
895
_fmt = "Text did not match it's checksum: %(message)s"
898
class WeaveTextDiffers(WeaveError):
900
_fmt = "Weaves differ on text content. Revision: {%(revision_id)s}, %(weave_a)s, %(weave_b)s"
902
def __init__(self, revision_id, weave_a, weave_b):
903
WeaveError.__init__(self)
904
self.revision_id = revision_id
905
self.weave_a = weave_a
906
self.weave_b = weave_b
909
class WeaveTextDiffers(WeaveError):
911
_fmt = "Weaves differ on text content. Revision: {%(revision_id)s}, %(weave_a)s, %(weave_b)s"
913
def __init__(self, revision_id, weave_a, weave_b):
914
WeaveError.__init__(self)
915
self.revision_id = revision_id
916
self.weave_a = weave_a
917
self.weave_b = weave_b
920
class VersionedFileError(BzrError):
922
_fmt = "Versioned file error"
925
class RevisionNotPresent(VersionedFileError):
927
_fmt = "Revision {%(revision_id)s} not present in %(file_id)s."
929
def __init__(self, revision_id, file_id):
930
VersionedFileError.__init__(self)
931
self.revision_id = revision_id
932
self.file_id = file_id
935
class RevisionAlreadyPresent(VersionedFileError):
937
_fmt = "Revision {%(revision_id)s} already present in %(file_id)s."
939
def __init__(self, revision_id, file_id):
940
VersionedFileError.__init__(self)
941
self.revision_id = revision_id
942
self.file_id = file_id
945
class KnitError(BzrError):
949
internal_error = True
952
class KnitHeaderError(KnitError):
954
_fmt = "Knit header error: %(badline)r unexpected for file %(filename)s"
956
def __init__(self, badline, filename):
957
KnitError.__init__(self)
958
self.badline = badline
959
self.filename = filename
962
class KnitCorrupt(KnitError):
964
_fmt = "Knit %(filename)s corrupt: %(how)s"
966
def __init__(self, filename, how):
967
KnitError.__init__(self)
968
self.filename = filename
972
class KnitIndexUnknownMethod(KnitError):
973
"""Raised when we don't understand the storage method.
975
Currently only 'fulltext' and 'line-delta' are supported.
978
_fmt = ("Knit index %(filename)s does not have a known method"
979
" in options: %(options)r")
981
def __init__(self, filename, options):
982
KnitError.__init__(self)
983
self.filename = filename
984
self.options = options
987
class NoSuchExportFormat(BzrError):
989
_fmt = "Export format %(format)r not supported"
991
def __init__(self, format):
992
BzrError.__init__(self)
996
class TransportError(BzrError):
998
_fmt = "Transport error: %(msg)s %(orig_error)s"
1000
def __init__(self, msg=None, orig_error=None):
1001
if msg is None and orig_error is not None:
1002
msg = str(orig_error)
1003
if orig_error is None:
1008
self.orig_error = orig_error
1009
BzrError.__init__(self)
1012
class TooManyConcurrentRequests(BzrError):
1014
_fmt = ("The medium '%(medium)s' has reached its concurrent request limit. "
1015
"Be sure to finish_writing and finish_reading on the "
1016
"current request that is open.")
1018
internal_error = True
1020
def __init__(self, medium):
1021
self.medium = medium
1024
class SmartProtocolError(TransportError):
1026
_fmt = "Generic bzr smart protocol error: %(details)s"
1028
def __init__(self, details):
1029
self.details = details
1032
# A set of semi-meaningful errors which can be thrown
1033
class TransportNotPossible(TransportError):
1035
_fmt = "Transport operation not possible: %(msg)s %(orig_error)s"
1038
class ConnectionError(TransportError):
1040
_fmt = "Connection error: %(msg)s %(orig_error)s"
1043
class SocketConnectionError(ConnectionError):
1045
_fmt = "%(msg)s %(host)s%(port)s%(orig_error)s"
1047
def __init__(self, host, port=None, msg=None, orig_error=None):
1049
msg = 'Failed to connect to'
1050
if orig_error is None:
1053
orig_error = '; ' + str(orig_error)
1054
ConnectionError.__init__(self, msg=msg, orig_error=orig_error)
1059
self.port = ':%s' % port
1062
class ConnectionReset(TransportError):
1064
_fmt = "Connection closed: %(msg)s %(orig_error)s"
1067
class InvalidRange(TransportError):
1069
_fmt = "Invalid range access in %(path)s at %(offset)s."
1071
def __init__(self, path, offset):
1072
TransportError.__init__(self, ("Invalid range access in %s at %d"
1075
self.offset = offset
1078
class InvalidHttpResponse(TransportError):
1080
_fmt = "Invalid http response for %(path)s: %(msg)s"
1082
def __init__(self, path, msg, orig_error=None):
1084
TransportError.__init__(self, msg, orig_error=orig_error)
1087
class InvalidHttpRange(InvalidHttpResponse):
1089
_fmt = "Invalid http range %(range)r for %(path)s: %(msg)s"
1091
def __init__(self, path, range, msg):
1093
InvalidHttpResponse.__init__(self, path, msg)
1096
class InvalidHttpContentType(InvalidHttpResponse):
1098
_fmt = 'Invalid http Content-type "%(ctype)s" for %(path)s: %(msg)s'
1100
def __init__(self, path, ctype, msg):
1102
InvalidHttpResponse.__init__(self, path, msg)
1105
class ConflictsInTree(BzrError):
1107
_fmt = "Working tree has conflicts."
1110
class ParseConfigError(BzrError):
1112
def __init__(self, errors, filename):
1113
if filename is None:
1115
message = "Error(s) parsing config file %s:\n%s" % \
1116
(filename, ('\n'.join(e.message for e in errors)))
1117
BzrError.__init__(self, message)
1120
class NoEmailInUsername(BzrError):
1122
_fmt = "%(username)r does not seem to contain a reasonable email address"
1124
def __init__(self, username):
1125
BzrError.__init__(self)
1126
self.username = username
1129
class SigningFailed(BzrError):
1131
_fmt = "Failed to gpg sign data with command %(command_line)r"
1133
def __init__(self, command_line):
1134
BzrError.__init__(self, command_line=command_line)
1137
class WorkingTreeNotRevision(BzrError):
1139
_fmt = ("The working tree for %(basedir)s has changed since"
1140
" the last commit, but weave merge requires that it be"
1143
def __init__(self, tree):
1144
BzrError.__init__(self, basedir=tree.basedir)
1147
class CantReprocessAndShowBase(BzrError):
1149
_fmt = "Can't reprocess and show base, because reprocessing obscures " \
1150
"the relationship of conflicting lines to the base"
1153
class GraphCycleError(BzrError):
1155
_fmt = "Cycle in graph %(graph)r"
1157
def __init__(self, graph):
1158
BzrError.__init__(self)
1162
class WritingCompleted(BzrError):
1164
_fmt = ("The MediumRequest '%(request)s' has already had finish_writing "
1165
"called upon it - accept bytes may not be called anymore.")
1167
internal_error = True
1169
def __init__(self, request):
1170
self.request = request
1173
class WritingNotComplete(BzrError):
1175
_fmt = ("The MediumRequest '%(request)s' has not has finish_writing "
1176
"called upon it - until the write phase is complete no "
1177
"data may be read.")
1179
internal_error = True
1181
def __init__(self, request):
1182
self.request = request
1185
class NotConflicted(BzrError):
1187
_fmt = "File %(filename)s is not conflicted."
1189
def __init__(self, filename):
1190
BzrError.__init__(self)
1191
self.filename = filename
1194
class MediumNotConnected(BzrError):
1196
_fmt = """The medium '%(medium)s' is not connected."""
1198
internal_error = True
1200
def __init__(self, medium):
1201
self.medium = medium
1204
class MustUseDecorated(Exception):
1206
_fmt = """A decorating function has requested its original command be used."""
1209
class NoBundleFound(BzrError):
1211
_fmt = "No bundle was found in %(filename)s"
1213
def __init__(self, filename):
1214
BzrError.__init__(self)
1215
self.filename = filename
1218
class BundleNotSupported(BzrError):
1220
_fmt = "Unable to handle bundle version %(version)s: %(msg)s"
1222
def __init__(self, version, msg):
1223
BzrError.__init__(self)
1224
self.version = version
1228
class MissingText(BzrError):
1230
_fmt = "Branch %(base)s is missing revision %(text_revision)s of %(file_id)s"
1232
def __init__(self, branch, text_revision, file_id):
1233
BzrError.__init__(self)
1234
self.branch = branch
1235
self.base = branch.base
1236
self.text_revision = text_revision
1237
self.file_id = file_id
1240
class DuplicateKey(BzrError):
1242
_fmt = "Key %(key)s is already present in map"
1245
class MalformedTransform(BzrError):
1247
_fmt = "Tree transform is malformed %(conflicts)r"
1250
class NoFinalPath(BzrError):
1252
_fmt = ("No final name for trans_id %(trans_id)r\n"
1253
"file-id: %(file_id)r\n"
1254
"root trans-id: %(root_trans_id)r\n")
1256
def __init__(self, trans_id, transform):
1257
self.trans_id = trans_id
1258
self.file_id = transform.final_file_id(trans_id)
1259
self.root_trans_id = transform.root
1262
class BzrBadParameter(BzrError):
1264
_fmt = "Bad parameter: %(param)r"
1266
# This exception should never be thrown, but it is a base class for all
1267
# parameter-to-function errors.
1269
def __init__(self, param):
1270
BzrError.__init__(self)
1274
class BzrBadParameterNotUnicode(BzrBadParameter):
1276
_fmt = "Parameter %(param)s is neither unicode nor utf8."
1279
class ReusingTransform(BzrError):
1281
_fmt = "Attempt to reuse a transform that has already been applied."
1284
class CantMoveRoot(BzrError):
1286
_fmt = "Moving the root directory is not supported at this time"
1289
class BzrBadParameterNotString(BzrBadParameter):
1291
_fmt = "Parameter %(param)s is not a string or unicode string."
1294
class BzrBadParameterMissing(BzrBadParameter):
1296
_fmt = "Parameter $(param)s is required but not present."
1299
class BzrBadParameterUnicode(BzrBadParameter):
1301
_fmt = "Parameter %(param)s is unicode but only byte-strings are permitted."
1304
class BzrBadParameterContainsNewline(BzrBadParameter):
1306
_fmt = "Parameter %(param)s contains a newline."
1309
class DependencyNotPresent(BzrError):
1311
_fmt = 'Unable to import library "%(library)s": %(error)s'
1313
def __init__(self, library, error):
1314
BzrError.__init__(self, library=library, error=error)
1317
class ParamikoNotPresent(DependencyNotPresent):
1319
_fmt = "Unable to import paramiko (required for sftp support): %(error)s"
1321
def __init__(self, error):
1322
DependencyNotPresent.__init__(self, 'paramiko', error)
1325
class PointlessMerge(BzrError):
1327
_fmt = "Nothing to merge."
1330
class UninitializableFormat(BzrError):
1332
_fmt = "Format %(format)s cannot be initialised by this version of bzr."
1334
def __init__(self, format):
1335
BzrError.__init__(self)
1336
self.format = format
1339
class BadConversionTarget(BzrError):
1341
_fmt = "Cannot convert to format %(format)s. %(problem)s"
1343
def __init__(self, problem, format):
1344
BzrError.__init__(self)
1345
self.problem = problem
1346
self.format = format
1349
class NoDiff(BzrError):
1351
_fmt = "Diff is not installed on this machine: %(msg)s"
1353
def __init__(self, msg):
1354
BzrError.__init__(self, msg=msg)
1357
class NoDiff3(BzrError):
1359
_fmt = "Diff3 is not installed on this machine."
1362
class ExistingLimbo(BzrError):
1364
_fmt = """This tree contains left-over files from a failed operation.
1365
Please examine %(limbo_dir)s to see if it contains any files you wish to
1366
keep, and delete it when you are done."""
1368
def __init__(self, limbo_dir):
1369
BzrError.__init__(self)
1370
self.limbo_dir = limbo_dir
1373
class ImmortalLimbo(BzrError):
1375
_fmt = """Unable to delete transform temporary directory $(limbo_dir)s.
1376
Please examine %(limbo_dir)s to see if it contains any files you wish to
1377
keep, and delete it when you are done."""
1379
def __init__(self, limbo_dir):
1380
BzrError.__init__(self)
1381
self.limbo_dir = limbo_dir
1384
class OutOfDateTree(BzrError):
1386
_fmt = "Working tree is out of date, please run 'bzr update'."
1388
def __init__(self, tree):
1389
BzrError.__init__(self)
1393
class MergeModifiedFormatError(BzrError):
1395
_fmt = "Error in merge modified format"
1398
class ConflictFormatError(BzrError):
1400
_fmt = "Format error in conflict listings"
1403
class CorruptRepository(BzrError):
1405
_fmt = """An error has been detected in the repository %(repo_path)s.
1406
Please run bzr reconcile on this repository."""
1408
def __init__(self, repo):
1409
BzrError.__init__(self)
1410
self.repo_path = repo.bzrdir.root_transport.base
1413
class UpgradeRequired(BzrError):
1415
_fmt = "To use this feature you must upgrade your branch at %(path)s."
1417
def __init__(self, path):
1418
BzrError.__init__(self)
1422
class LocalRequiresBoundBranch(BzrError):
1424
_fmt = "Cannot perform local-only commits on unbound branches."
1427
class MissingProgressBarFinish(BzrError):
1429
_fmt = "A nested progress bar was not 'finished' correctly."
1432
class InvalidProgressBarType(BzrError):
1434
_fmt = """Environment variable BZR_PROGRESS_BAR='%(bar_type)s is not a supported type
1435
Select one of: %(valid_types)s"""
1437
def __init__(self, bar_type, valid_types):
1438
BzrError.__init__(self, bar_type=bar_type, valid_types=valid_types)
1441
class UnsupportedOperation(BzrError):
1443
_fmt = "The method %(mname)s is not supported on objects of type %(tname)s."
1445
def __init__(self, method, method_self):
1446
self.method = method
1447
self.mname = method.__name__
1448
self.tname = type(method_self).__name__
1451
class CannotSetRevisionId(UnsupportedOperation):
1452
"""Raised when a commit is attempting to set a revision id but cant."""
1455
class NonAsciiRevisionId(UnsupportedOperation):
1456
"""Raised when a commit is attempting to set a non-ascii revision id but cant."""
1459
class BinaryFile(BzrError):
1461
_fmt = "File is binary but should be text."
1464
class IllegalPath(BzrError):
1466
_fmt = "The path %(path)s is not permitted on this platform"
1468
def __init__(self, path):
1469
BzrError.__init__(self)
1473
class TestamentMismatch(BzrError):
1475
_fmt = """Testament did not match expected value.
1476
For revision_id {%(revision_id)s}, expected {%(expected)s}, measured
1479
def __init__(self, revision_id, expected, measured):
1480
self.revision_id = revision_id
1481
self.expected = expected
1482
self.measured = measured
1485
class NotABundle(BzrError):
1487
_fmt = "Not a bzr revision-bundle: %(text)r"
1489
def __init__(self, text):
1490
BzrError.__init__(self)
1494
class BadBundle(BzrError):
1496
_fmt = "Bad bzr revision-bundle: %(text)r"
1498
def __init__(self, text):
1499
BzrError.__init__(self)
1503
class MalformedHeader(BadBundle):
1505
_fmt = "Malformed bzr revision-bundle header: %(text)r"
1508
class MalformedPatches(BadBundle):
1510
_fmt = "Malformed patches in bzr revision-bundle: %(text)r"
1513
class MalformedFooter(BadBundle):
1515
_fmt = "Malformed footer in bzr revision-bundle: %(text)r"
1518
class UnsupportedEOLMarker(BadBundle):
1520
_fmt = "End of line marker was not \\n in bzr revision-bundle"
1523
# XXX: BadBundle's constructor assumes there's explanatory text,
1524
# but for this there is not
1525
BzrError.__init__(self)
1528
class IncompatibleBundleFormat(BzrError):
1530
_fmt = "Bundle format %(bundle_format)s is incompatible with %(other)s"
1532
def __init__(self, bundle_format, other):
1533
BzrError.__init__(self)
1534
self.bundle_format = bundle_format
1538
class BadInventoryFormat(BzrError):
1540
_fmt = "Root class for inventory serialization errors"
1543
class UnexpectedInventoryFormat(BadInventoryFormat):
1545
_fmt = "The inventory was not in the expected format:\n %(msg)s"
1547
def __init__(self, msg):
1548
BadInventoryFormat.__init__(self, msg=msg)
1551
class NoSmartMedium(BzrError):
1553
_fmt = "The transport '%(transport)s' cannot tunnel the smart protocol."
1555
def __init__(self, transport):
1556
self.transport = transport
1559
class NoSmartServer(NotBranchError):
1561
_fmt = "No smart server available at %(url)s"
1563
def __init__(self, url):
1567
class UnknownSSH(BzrError):
1569
_fmt = "Unrecognised value for BZR_SSH environment variable: %(vendor)s"
1571
def __init__(self, vendor):
1572
BzrError.__init__(self)
1573
self.vendor = vendor
1576
class GhostRevisionUnusableHere(BzrError):
1578
_fmt = "Ghost revision {%(revision_id)s} cannot be used here."
1580
def __init__(self, revision_id):
1581
BzrError.__init__(self)
1582
self.revision_id = revision_id
1585
class IllegalUseOfScopeReplacer(BzrError):
1587
_fmt = "ScopeReplacer object %(name)r was used incorrectly: %(msg)s%(extra)s"
1589
internal_error = True
1591
def __init__(self, name, msg, extra=None):
1592
BzrError.__init__(self)
1596
self.extra = ': ' + str(extra)
1601
class InvalidImportLine(BzrError):
1603
_fmt = "Not a valid import statement: %(msg)\n%(text)s"
1605
internal_error = True
1607
def __init__(self, text, msg):
1608
BzrError.__init__(self)
1613
class ImportNameCollision(BzrError):
1615
_fmt = "Tried to import an object to the same name as an existing object. %(name)s"
1617
internal_error = True
1619
def __init__(self, name):
1620
BzrError.__init__(self)