85
34
# constructed to make sure it will succeed. But that says nothing about
86
35
# exceptions that are never raised.
88
# TODO: Convert all the other error classes here to BzrNewError, and eliminate
91
# TODO: The pattern (from hct) of using classes docstrings as message
92
# templates is cute but maybe not such a great idea - perhaps should have a
93
# separate static message_template.
37
# TODO: selftest assertRaises should probably also check that every error
38
# raised can be formatted as a string successfully, and without giving
96
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)
100
85
def __str__(self):
101
# XXX: Should we show the exception class in
102
# exceptions that don't provide their own message?
103
# maybe it should be done at a higher level
104
## n = self.__class__.__name__ + ': '
106
if len(self.args) == 1:
107
return str(self.args[0])
108
elif len(self.args) == 2:
109
# further explanation or suggestions
111
return n + '\n '.join([self.args[0]] + self.args[1])
113
return n + "%r" % self
115
return n + `self.args`
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),
118
124
class BzrNewError(BzrError):
125
"""Deprecated error base class."""
120
126
# base classes should override the docstring with their human-
121
127
# readable explanation
142
153
self.__dict__, str(e))
145
class AlreadyBuilding(BzrNewError):
146
"""The tree builder is already building a tree."""
149
class BzrCheckError(BzrNewError):
150
"""Internal check failed: %(message)s"""
152
is_user_error = False
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
154
167
def __init__(self, message):
155
BzrNewError.__init__(self)
168
BzrError.__init__(self)
156
169
self.message = message
159
class InvalidEntryName(BzrNewError):
160
"""Invalid entry name: %(name)s"""
172
class InvalidEntryName(BzrError):
174
_fmt = "Invalid entry name: %(name)s"
162
is_user_error = False
176
internal_error = True
164
178
def __init__(self, name):
165
BzrNewError.__init__(self)
179
BzrError.__init__(self)
169
class InvalidRevisionNumber(BzrNewError):
170
"""Invalid revision number %(revno)d"""
183
class InvalidRevisionNumber(BzrError):
185
_fmt = "Invalid revision number %(revno)s"
171
187
def __init__(self, revno):
172
BzrNewError.__init__(self)
188
BzrError.__init__(self)
173
189
self.revno = revno
176
class InvalidRevisionId(BzrNewError):
177
"""Invalid revision-id {%(revision_id)s} in %(branch)s"""
192
class InvalidRevisionId(BzrError):
194
_fmt = "Invalid revision-id {%(revision_id)s} in %(branch)s"
179
196
def __init__(self, revision_id, branch):
180
197
# branch can be any string or object with __str__ defined
181
BzrNewError.__init__(self)
198
BzrError.__init__(self)
182
199
self.revision_id = revision_id
183
200
self.branch = branch
186
class InventoryModified(BzrNewError):
187
"""The current inventory for the tree %(tree)r has been modified, so a clean inventory cannot be read without data loss."""
189
def __init__(self, tree):
190
BzrNewError.__init__(self)
194
class NoSuchId(BzrNewError):
195
"""The file id %(file_id)s is not present in the tree %(tree)s."""
203
class NoSuchId(BzrError):
205
_fmt = "The file id %(file_id)s is not present in the tree %(tree)s."
197
207
def __init__(self, tree, file_id):
198
BzrNewError.__init__(self)
208
BzrError.__init__(self)
199
209
self.file_id = file_id
203
class NoWorkingTree(BzrNewError):
204
"""No WorkingTree exists for %(base)s."""
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."
206
228
def __init__(self, base):
207
BzrNewError.__init__(self)
229
BzrError.__init__(self)
211
class WorkingTreeAlreadyPopulated(BzrNewError):
212
"""Working tree already populated in %(base)s"""
214
is_user_error = False
217
class NotBuilding(BzrNewError):
218
"""Not currently building a tree."""
221
class NotLocalUrl(BzrNewError):
222
"""%(url)s is not a local path."""
233
class NotBuilding(BzrError):
235
_fmt = "Not currently building a tree."
238
class NotLocalUrl(BzrError):
240
_fmt = "%(url)s is not a local path."
224
242
def __init__(self, url):
225
BzrNewError.__init__(self)
229
class NotWriteLocked(BzrNewError):
230
"""%(not_locked)r is not write locked but needs to be."""
232
def __init__(self, not_locked):
233
BzrNewError.__init__(self)
234
self.not_locked = not_locked
237
class BzrCommandError(BzrNewError):
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):
238
256
"""Error from user command"""
258
internal_error = False
242
260
# Error from malformed user command; please avoid raising this as a
243
261
# generic exception not caused by user input.
391
437
class InaccessibleParent(PathError):
392
"""Parent not accessible given base %(base)s and relative path %(path)s"""
439
_fmt = "Parent not accessible given base %(base)s and relative path %(path)s"
394
441
def __init__(self, path, base):
395
442
PathError.__init__(self, path)
399
class NoRepositoryPresent(BzrNewError):
400
"""No repository present: %(path)r"""
446
class NoRepositoryPresent(BzrError):
448
_fmt = "No repository present: %(path)r"
401
449
def __init__(self, bzrdir):
402
BzrNewError.__init__(self)
450
BzrError.__init__(self)
403
451
self.path = bzrdir.transport.clone('..').base
406
class FileInWrongBranch(BzrNewError):
407
"""File %(path)s in not in branch %(branch_base)s."""
454
class FileInWrongBranch(BzrError):
456
_fmt = "File %(path)s in not in branch %(branch_base)s."
409
458
def __init__(self, branch, path):
410
BzrNewError.__init__(self)
459
BzrError.__init__(self)
411
460
self.branch = branch
412
461
self.branch_base = branch.base
416
class UnsupportedFormatError(BzrNewError):
417
"""Unsupported branch format: %(format)s"""
420
class UnknownFormatError(BzrNewError):
421
"""Unknown branch format: %(format)r"""
424
class IncompatibleFormat(BzrNewError):
425
"""Format %(format)s is not compatible with .bzr version %(bzrdir)s."""
465
class UnsupportedFormatError(BzrError):
467
_fmt = "Unsupported branch format: %(format)s"
470
class UnknownFormatError(BzrError):
472
_fmt = "Unknown branch format: %(format)r"
475
class IncompatibleFormat(BzrError):
477
_fmt = "Format %(format)s is not compatible with .bzr version %(bzrdir)s."
427
479
def __init__(self, format, bzrdir_format):
428
BzrNewError.__init__(self)
480
BzrError.__init__(self)
429
481
self.format = format
430
482
self.bzrdir = bzrdir_format
433
class IncompatibleRevision(BzrNewError):
434
"""Revision is not compatible with %(repo_format)s"""
485
class IncompatibleRevision(BzrError):
487
_fmt = "Revision is not compatible with %(repo_format)s"
436
489
def __init__(self, repo_format):
437
BzrNewError.__init__(self)
490
BzrError.__init__(self)
438
491
self.repo_format = repo_format
441
class NotVersionedError(BzrNewError):
442
"""%(path)s is not versioned"""
494
class NotVersionedError(BzrError):
496
_fmt = "%(path)s is not versioned"
443
498
def __init__(self, path):
444
BzrNewError.__init__(self)
499
BzrError.__init__(self)
448
class PathsNotVersionedError(BzrNewError):
503
class PathsNotVersionedError(BzrError):
449
504
# used when reporting several paths are not versioned
450
"""Path(s) are not versioned: %(paths_as_string)s"""
506
_fmt = "Path(s) are not versioned: %(paths_as_string)s"
452
508
def __init__(self, paths):
453
509
from bzrlib.osutils import quotefn
454
BzrNewError.__init__(self)
510
BzrError.__init__(self)
455
511
self.paths = paths
456
512
self.paths_as_string = ' '.join([quotefn(p) for p in paths])
459
class PathsDoNotExist(BzrNewError):
460
"""Path(s) do not exist: %(paths_as_string)s"""
515
class PathsDoNotExist(BzrError):
517
_fmt = "Path(s) do not exist: %(paths_as_string)s"
462
519
# used when reporting that paths are neither versioned nor in the working
559
638
class LockNotHeld(LockError):
560
"""Lock not held: %(lock)s"""
640
_fmt = "Lock not held: %(lock)s"
561
642
def __init__(self, lock):
565
class PointlessCommit(BzrNewError):
566
"""No changes to commit"""
569
class UpgradeReadonly(BzrNewError):
570
"""Upgrade URL cannot work with readonly URL's."""
573
class UpToDateFormat(BzrNewError):
574
"""The branch format %(format)s is already at the most recent format."""
646
class PointlessCommit(BzrError):
648
_fmt = "No changes to commit"
651
class UpgradeReadonly(BzrError):
653
_fmt = "Upgrade URL cannot work with readonly URLs."
656
class UpToDateFormat(BzrError):
658
_fmt = "The branch format %(format)s is already at the most recent format."
576
660
def __init__(self, format):
577
BzrNewError.__init__(self)
661
BzrError.__init__(self)
578
662
self.format = format
581
665
class StrictCommitFailed(Exception):
582
"""Commit refused because there are unknowns in the tree."""
585
class NoSuchRevision(BzrNewError):
586
"""Branch %(branch)s has no revision %(revision)s"""
588
is_user_error = False
667
_fmt = "Commit refused because there are unknowns in the tree."
670
class NoSuchRevision(BzrError):
672
_fmt = "Branch %(branch)s has no revision %(revision)s"
674
internal_error = True
590
676
def __init__(self, branch, revision):
591
BzrNewError.__init__(self, branch=branch, revision=revision)
594
class NoSuchRevisionSpec(BzrNewError):
595
"""No namespace registered for string: %(spec)r"""
677
BzrError.__init__(self, branch=branch, revision=revision)
680
class NoSuchRevisionSpec(BzrError):
682
_fmt = "No namespace registered for string: %(spec)r"
597
684
def __init__(self, spec):
598
BzrNewError.__init__(self, spec=spec)
601
class InvalidRevisionSpec(BzrNewError):
602
"""Requested revision: '%(spec)s' does not exist in branch:
603
%(branch)s%(extra)s"""
685
BzrError.__init__(self, spec=spec)
688
class InvalidRevisionSpec(BzrError):
690
_fmt = "Requested revision: %(spec)r does not exist in branch: %(branch)s%(extra)s"
605
692
def __init__(self, spec, branch, extra=None):
606
BzrNewError.__init__(self, branch=branch, spec=spec)
693
BzrError.__init__(self, branch=branch, spec=spec)
608
695
self.extra = '\n' + str(extra)
677
767
self.bases = bases
680
class NoCommits(BzrNewError):
681
"""Branch %(branch)s has no commits."""
770
class NoCommits(BzrError):
772
_fmt = "Branch %(branch)s has no commits."
683
774
def __init__(self, branch):
684
BzrNewError.__init__(self, branch=branch)
775
BzrError.__init__(self, branch=branch)
687
778
class UnlistableStore(BzrError):
688
780
def __init__(self, store):
689
781
BzrError.__init__(self, "Store %s is not listable" % store)
693
785
class UnlistableBranch(BzrError):
694
787
def __init__(self, br):
695
788
BzrError.__init__(self, "Stores for branch %s are not listable" % br)
698
class BoundBranchOutOfDate(BzrNewError):
699
"""Bound branch %(branch)s is out of date with master branch %(master)s."""
791
class BoundBranchOutOfDate(BzrError):
793
_fmt = "Bound branch %(branch)s is out of date with master branch %(master)s."
700
795
def __init__(self, branch, master):
701
BzrNewError.__init__(self)
796
BzrError.__init__(self)
702
797
self.branch = branch
703
798
self.master = master
706
class CommitToDoubleBoundBranch(BzrNewError):
707
"""Cannot commit to branch %(branch)s. It is bound to %(master)s, which is bound to %(remote)s."""
801
class CommitToDoubleBoundBranch(BzrError):
803
_fmt = "Cannot commit to branch %(branch)s. It is bound to %(master)s, which is bound to %(remote)s."
708
805
def __init__(self, branch, master, remote):
709
BzrNewError.__init__(self)
806
BzrError.__init__(self)
710
807
self.branch = branch
711
808
self.master = master
712
809
self.remote = remote
715
class OverwriteBoundBranch(BzrNewError):
716
"""Cannot pull --overwrite to a branch which is bound %(branch)s"""
812
class OverwriteBoundBranch(BzrError):
814
_fmt = "Cannot pull --overwrite to a branch which is bound %(branch)s"
717
816
def __init__(self, branch):
718
BzrNewError.__init__(self)
817
BzrError.__init__(self)
719
818
self.branch = branch
722
class BoundBranchConnectionFailure(BzrNewError):
723
"""Unable to connect to target of bound branch %(branch)s => %(target)s: %(error)s"""
821
class BoundBranchConnectionFailure(BzrError):
823
_fmt = "Unable to connect to target of bound branch %(branch)s => %(target)s: %(error)s"
724
825
def __init__(self, branch, target, error):
725
BzrNewError.__init__(self)
826
BzrError.__init__(self)
726
827
self.branch = branch
727
828
self.target = target
728
829
self.error = error
731
class WeaveError(BzrNewError):
732
"""Error in processing weave: %(message)s"""
832
class WeaveError(BzrError):
834
_fmt = "Error in processing weave: %(message)s"
734
836
def __init__(self, message=None):
735
BzrNewError.__init__(self)
837
BzrError.__init__(self)
736
838
self.message = message
739
841
class WeaveRevisionAlreadyPresent(WeaveError):
740
"""Revision {%(revision_id)s} already present in %(weave)s"""
843
_fmt = "Revision {%(revision_id)s} already present in %(weave)s"
741
845
def __init__(self, revision_id, weave):
743
847
WeaveError.__init__(self)
951
1082
BzrError.__init__(self, message)
954
class NoEmailInUsername(BzrNewError):
955
"""%(username)r does not seem to contain a reasonable email address"""
1085
class NoEmailInUsername(BzrError):
1087
_fmt = "%(username)r does not seem to contain a reasonable email address"
957
1089
def __init__(self, username):
958
BzrNewError.__init__(self)
1090
BzrError.__init__(self)
959
1091
self.username = username
962
1094
class SigningFailed(BzrError):
1096
_fmt = "Failed to gpg sign data with command %(command_line)r"
963
1098
def __init__(self, command_line):
964
BzrError.__init__(self, "Failed to gpg sign data with command '%s'"
1099
BzrError.__init__(self, command_line=command_line)
968
1102
class WorkingTreeNotRevision(BzrError):
1104
_fmt = ("The working tree for %(basedir)s has changed since"
1105
" the last commit, but weave merge requires that it be"
969
1108
def __init__(self, tree):
970
BzrError.__init__(self, "The working tree for %s has changed since"
971
" last commit, but weave merge requires that it be"
972
" unchanged." % tree.basedir)
975
class WritingCompleted(BzrNewError):
976
"""The MediumRequest '%(request)s' has already had finish_writing called upon it - accept bytes may not be called anymore."""
978
is_user_error = False
980
def __init__(self, request):
981
BzrNewError.__init__(self)
982
self.request = request
985
class WritingNotComplete(BzrNewError):
986
"""The MediumRequest '%(request)s' has not has finish_writing called upon it - until the write phase is complete no data may be read."""
988
is_user_error = False
990
def __init__(self, request):
991
BzrNewError.__init__(self)
992
self.request = request
995
class CantReprocessAndShowBase(BzrNewError):
996
"""Can't reprocess and show base.
997
Reprocessing obscures relationship of conflicting lines to base."""
1000
class GraphCycleError(BzrNewError):
1001
"""Cycle in graph %(graph)r"""
1109
BzrError.__init__(self, basedir=tree.basedir)
1112
class CantReprocessAndShowBase(BzrError):
1114
_fmt = "Can't reprocess and show base, because reprocessing obscures " \
1115
"the relationship of conflicting lines to the base"
1118
class GraphCycleError(BzrError):
1120
_fmt = "Cycle in graph %(graph)r"
1002
1122
def __init__(self, graph):
1003
BzrNewError.__init__(self)
1123
BzrError.__init__(self)
1004
1124
self.graph = graph
1007
class NotConflicted(BzrNewError):
1008
"""File %(filename)s is not conflicted."""
1127
class WritingCompleted(BzrError):
1129
_fmt = ("The MediumRequest '%(request)s' has already had finish_writing "
1130
"called upon it - accept bytes may not be called anymore.")
1132
internal_error = True
1134
def __init__(self, request):
1135
self.request = request
1138
class WritingNotComplete(BzrError):
1140
_fmt = ("The MediumRequest '%(request)s' has not has finish_writing "
1141
"called upon it - until the write phase is complete no "
1142
"data may be read.")
1144
internal_error = True
1146
def __init__(self, request):
1147
self.request = request
1150
class NotConflicted(BzrError):
1152
_fmt = "File %(filename)s is not conflicted."
1010
1154
def __init__(self, filename):
1011
BzrNewError.__init__(self)
1155
BzrError.__init__(self)
1012
1156
self.filename = filename
1015
class MediumNotConnected(BzrNewError):
1016
"""The medium '%(medium)s' is not connected."""
1159
class MediumNotConnected(BzrError):
1161
_fmt = """The medium '%(medium)s' is not connected."""
1163
internal_error = True
1018
1165
def __init__(self, medium):
1019
BzrNewError.__init__(self)
1020
1166
self.medium = medium
1023
1169
class MustUseDecorated(Exception):
1024
"""A decorating function has requested its original command be used.
1026
This should never escape bzr, so does not need to be printable.
1030
class NoBundleFound(BzrNewError):
1031
"""No bundle was found in %(filename)s"""
1171
_fmt = """A decorating function has requested its original command be used."""
1174
class NoBundleFound(BzrError):
1176
_fmt = "No bundle was found in %(filename)s"
1032
1178
def __init__(self, filename):
1033
BzrNewError.__init__(self)
1179
BzrError.__init__(self)
1034
1180
self.filename = filename
1037
class BundleNotSupported(BzrNewError):
1038
"""Unable to handle bundle version %(version)s: %(msg)s"""
1183
class BundleNotSupported(BzrError):
1185
_fmt = "Unable to handle bundle version %(version)s: %(msg)s"
1039
1187
def __init__(self, version, msg):
1040
BzrNewError.__init__(self)
1188
BzrError.__init__(self)
1041
1189
self.version = version
1045
class MissingText(BzrNewError):
1046
"""Branch %(base)s is missing revision %(text_revision)s of %(file_id)s"""
1193
class MissingText(BzrError):
1195
_fmt = "Branch %(base)s is missing revision %(text_revision)s of %(file_id)s"
1048
1197
def __init__(self, branch, text_revision, file_id):
1049
BzrNewError.__init__(self)
1198
BzrError.__init__(self)
1050
1199
self.branch = branch
1051
1200
self.base = branch.base
1052
1201
self.text_revision = text_revision
1053
1202
self.file_id = file_id
1056
class DuplicateKey(BzrNewError):
1057
"""Key %(key)s is already present in map"""
1060
class MalformedTransform(BzrNewError):
1061
"""Tree transform is malformed %(conflicts)r"""
1064
class NoFinalPath(BzrNewError):
1065
"""No final name for trans_id %(trans_id)r
1066
file-id: %(file_id)r"
1067
root trans-id: %(root_trans_id)r
1205
class DuplicateKey(BzrError):
1207
_fmt = "Key %(key)s is already present in map"
1210
class MalformedTransform(BzrError):
1212
_fmt = "Tree transform is malformed %(conflicts)r"
1215
class NoFinalPath(BzrError):
1217
_fmt = ("No final name for trans_id %(trans_id)r\n"
1218
"file-id: %(file_id)r\n"
1219
"root trans-id: %(root_trans_id)r\n")
1070
1221
def __init__(self, trans_id, transform):
1071
1222
self.trans_id = trans_id
1073
1224
self.root_trans_id = transform.root
1076
class BzrBadParameter(BzrNewError):
1077
"""A bad parameter : %(param)s is not usable.
1079
This exception should never be thrown, but it is a base class for all
1080
parameter-to-function errors.
1227
class BzrBadParameter(BzrError):
1229
_fmt = "Bad parameter: %(param)r"
1231
# This exception should never be thrown, but it is a base class for all
1232
# parameter-to-function errors.
1082
1234
def __init__(self, param):
1083
BzrNewError.__init__(self)
1235
BzrError.__init__(self)
1084
1236
self.param = param
1087
1239
class BzrBadParameterNotUnicode(BzrBadParameter):
1088
"""Parameter %(param)s is neither unicode nor utf8."""
1091
class ReusingTransform(BzrNewError):
1092
"""Attempt to reuse a transform that has already been applied."""
1095
class CantMoveRoot(BzrNewError):
1096
"""Moving the root directory is not supported at this time"""
1241
_fmt = "Parameter %(param)s is neither unicode nor utf8."
1244
class ReusingTransform(BzrError):
1246
_fmt = "Attempt to reuse a transform that has already been applied."
1249
class CantMoveRoot(BzrError):
1251
_fmt = "Moving the root directory is not supported at this time"
1099
1254
class BzrBadParameterNotString(BzrBadParameter):
1100
"""Parameter %(param)s is not a string or unicode string."""
1256
_fmt = "Parameter %(param)s is not a string or unicode string."
1103
1259
class BzrBadParameterMissing(BzrBadParameter):
1104
"""Parameter $(param)s is required but not present."""
1261
_fmt = "Parameter $(param)s is required but not present."
1107
1264
class BzrBadParameterUnicode(BzrBadParameter):
1108
"""Parameter %(param)s is unicode but only byte-strings are permitted."""
1266
_fmt = "Parameter %(param)s is unicode but only byte-strings are permitted."
1111
1269
class BzrBadParameterContainsNewline(BzrBadParameter):
1112
"""Parameter %(param)s contains a newline."""
1115
class DependencyNotPresent(BzrNewError):
1116
"""Unable to import library "%(library)s": %(error)s"""
1271
_fmt = "Parameter %(param)s contains a newline."
1274
class DependencyNotPresent(BzrError):
1276
_fmt = 'Unable to import library "%(library)s": %(error)s'
1118
1278
def __init__(self, library, error):
1119
BzrNewError.__init__(self, library=library, error=error)
1279
BzrError.__init__(self, library=library, error=error)
1122
1282
class ParamikoNotPresent(DependencyNotPresent):
1123
"""Unable to import paramiko (required for sftp support): %(error)s"""
1284
_fmt = "Unable to import paramiko (required for sftp support): %(error)s"
1125
1286
def __init__(self, error):
1126
1287
DependencyNotPresent.__init__(self, 'paramiko', error)
1129
class PointlessMerge(BzrNewError):
1130
"""Nothing to merge."""
1133
class UninitializableFormat(BzrNewError):
1134
"""Format %(format)s cannot be initialised by this version of bzr."""
1290
class PointlessMerge(BzrError):
1292
_fmt = "Nothing to merge."
1295
class UninitializableFormat(BzrError):
1297
_fmt = "Format %(format)s cannot be initialised by this version of bzr."
1136
1299
def __init__(self, format):
1137
BzrNewError.__init__(self)
1300
BzrError.__init__(self)
1138
1301
self.format = format
1141
class BadConversionTarget(BzrNewError):
1142
"""Cannot convert to format %(format)s. %(problem)s"""
1304
class BadConversionTarget(BzrError):
1306
_fmt = "Cannot convert to format %(format)s. %(problem)s"
1144
1308
def __init__(self, problem, format):
1145
BzrNewError.__init__(self)
1309
BzrError.__init__(self)
1146
1310
self.problem = problem
1147
1311
self.format = format
1150
class NoDiff(BzrNewError):
1151
"""Diff is not installed on this machine: %(msg)s"""
1314
class NoDiff(BzrError):
1316
_fmt = "Diff is not installed on this machine: %(msg)s"
1153
1318
def __init__(self, msg):
1154
BzrNewError.__init__(self, msg=msg)
1157
class NoDiff3(BzrNewError):
1158
"""Diff3 is not installed on this machine."""
1161
class ExistingLimbo(BzrNewError):
1162
"""This tree contains left-over files from a failed operation.
1163
Please examine %(limbo_dir)s to see if it contains any files you wish to
1164
keep, and delete it when you are done.
1166
def __init__(self, limbo_dir):
1167
BzrNewError.__init__(self)
1168
self.limbo_dir = limbo_dir
1171
class ImmortalLimbo(BzrNewError):
1172
"""Unable to delete transform temporary directory $(limbo_dir)s.
1173
Please examine %(limbo_dir)s to see if it contains any files you wish to
1174
keep, and delete it when you are done.
1176
def __init__(self, limbo_dir):
1177
BzrNewError.__init__(self)
1178
self.limbo_dir = limbo_dir
1181
class OutOfDateTree(BzrNewError):
1182
"""Working tree is out of date, please run 'bzr update'."""
1319
BzrError.__init__(self, msg=msg)
1322
class NoDiff3(BzrError):
1324
_fmt = "Diff3 is not installed on this machine."
1327
class ExistingLimbo(BzrError):
1329
_fmt = """This tree contains left-over files from a failed operation.
1330
Please examine %(limbo_dir)s to see if it contains any files you wish to
1331
keep, and delete it when you are done."""
1333
def __init__(self, limbo_dir):
1334
BzrError.__init__(self)
1335
self.limbo_dir = limbo_dir
1338
class ImmortalLimbo(BzrError):
1340
_fmt = """Unable to delete transform temporary directory $(limbo_dir)s.
1341
Please examine %(limbo_dir)s to see if it contains any files you wish to
1342
keep, and delete it when you are done."""
1344
def __init__(self, limbo_dir):
1345
BzrError.__init__(self)
1346
self.limbo_dir = limbo_dir
1349
class OutOfDateTree(BzrError):
1351
_fmt = "Working tree is out of date, please run 'bzr update'."
1184
1353
def __init__(self, tree):
1185
BzrNewError.__init__(self)
1354
BzrError.__init__(self)
1186
1355
self.tree = tree
1189
class MergeModifiedFormatError(BzrNewError):
1190
"""Error in merge modified format"""
1193
class ConflictFormatError(BzrNewError):
1194
"""Format error in conflict listings"""
1197
class CorruptRepository(BzrNewError):
1198
"""An error has been detected in the repository %(repo_path)s.
1358
class MergeModifiedFormatError(BzrError):
1360
_fmt = "Error in merge modified format"
1363
class ConflictFormatError(BzrError):
1365
_fmt = "Format error in conflict listings"
1368
class CorruptRepository(BzrError):
1370
_fmt = """An error has been detected in the repository %(repo_path)s.
1199
1371
Please run bzr reconcile on this repository."""
1201
1373
def __init__(self, repo):
1202
BzrNewError.__init__(self)
1374
BzrError.__init__(self)
1203
1375
self.repo_path = repo.bzrdir.root_transport.base
1206
class UpgradeRequired(BzrNewError):
1207
"""To use this feature you must upgrade your branch at %(path)s."""
1378
class UpgradeRequired(BzrError):
1380
_fmt = "To use this feature you must upgrade your branch at %(path)s."
1209
1382
def __init__(self, path):
1210
BzrNewError.__init__(self)
1383
BzrError.__init__(self)
1211
1384
self.path = path
1214
class LocalRequiresBoundBranch(BzrNewError):
1215
"""Cannot perform local-only commits on unbound branches."""
1218
class MissingProgressBarFinish(BzrNewError):
1219
"""A nested progress bar was not 'finished' correctly."""
1222
class InvalidProgressBarType(BzrNewError):
1223
"""Environment variable BZR_PROGRESS_BAR='%(bar_type)s is not a supported type
1387
class LocalRequiresBoundBranch(BzrError):
1389
_fmt = "Cannot perform local-only commits on unbound branches."
1392
class MissingProgressBarFinish(BzrError):
1394
_fmt = "A nested progress bar was not 'finished' correctly."
1397
class InvalidProgressBarType(BzrError):
1399
_fmt = """Environment variable BZR_PROGRESS_BAR='%(bar_type)s is not a supported type
1224
1400
Select one of: %(valid_types)s"""
1226
1402
def __init__(self, bar_type, valid_types):
1227
BzrNewError.__init__(self, bar_type=bar_type, valid_types=valid_types)
1230
class UnsupportedOperation(BzrNewError):
1231
"""The method %(mname)s is not supported on objects of type %(tname)s."""
1403
BzrError.__init__(self, bar_type=bar_type, valid_types=valid_types)
1406
class UnsupportedOperation(BzrError):
1408
_fmt = "The method %(mname)s is not supported on objects of type %(tname)s."
1232
1410
def __init__(self, method, method_self):
1233
1411
self.method = method
1234
1412
self.mname = method.__name__
1235
1413
self.tname = type(method_self).__name__
1238
class BinaryFile(BzrNewError):
1239
"""File is binary but should be text."""
1242
class IllegalPath(BzrNewError):
1243
"""The path %(path)s is not permitted on this platform"""
1416
class BinaryFile(BzrError):
1418
_fmt = "File is binary but should be text."
1421
class IllegalPath(BzrError):
1423
_fmt = "The path %(path)s is not permitted on this platform"
1245
1425
def __init__(self, path):
1246
BzrNewError.__init__(self)
1426
BzrError.__init__(self)
1247
1427
self.path = path
1250
class TestamentMismatch(BzrNewError):
1251
"""Testament did not match expected value.
1430
class TestamentMismatch(BzrError):
1432
_fmt = """Testament did not match expected value.
1252
1433
For revision_id {%(revision_id)s}, expected {%(expected)s}, measured
1255
1436
def __init__(self, revision_id, expected, measured):
1256
1437
self.revision_id = revision_id
1257
1438
self.expected = expected
1258
1439
self.measured = measured
1261
class NotABundle(BzrNewError):
1262
"""Not a bzr revision-bundle: %(text)r"""
1442
class NotABundle(BzrError):
1444
_fmt = "Not a bzr revision-bundle: %(text)r"
1264
1446
def __init__(self, text):
1265
BzrNewError.__init__(self)
1447
BzrError.__init__(self)
1266
1448
self.text = text
1269
class BadBundle(BzrNewError):
1270
"""Bad bzr revision-bundle: %(text)r"""
1451
class BadBundle(BzrError):
1453
_fmt = "Bad bzr revision-bundle: %(text)r"
1272
1455
def __init__(self, text):
1273
BzrNewError.__init__(self)
1456
BzrError.__init__(self)
1274
1457
self.text = text
1277
1460
class MalformedHeader(BadBundle):
1278
"""Malformed bzr revision-bundle header: %(text)r"""
1280
def __init__(self, text):
1281
BzrNewError.__init__(self)
1462
_fmt = "Malformed bzr revision-bundle header: %(text)r"
1285
1465
class MalformedPatches(BadBundle):
1286
"""Malformed patches in bzr revision-bundle: %(text)r"""
1288
def __init__(self, text):
1289
BzrNewError.__init__(self)
1467
_fmt = "Malformed patches in bzr revision-bundle: %(text)r"
1293
1470
class MalformedFooter(BadBundle):
1294
"""Malformed footer in bzr revision-bundle: %(text)r"""
1296
def __init__(self, text):
1297
BzrNewError.__init__(self)
1472
_fmt = "Malformed footer in bzr revision-bundle: %(text)r"
1301
1475
class UnsupportedEOLMarker(BadBundle):
1302
"""End of line marker was not \\n in bzr revision-bundle"""
1477
_fmt = "End of line marker was not \\n in bzr revision-bundle"
1304
1479
def __init__(self):
1305
BzrNewError.__init__(self)
1308
class IncompatibleFormat(BzrNewError):
1309
"""Bundle format %(bundle_format)s is incompatible with %(other)s"""
1480
# XXX: BadBundle's constructor assumes there's explanatory text,
1481
# but for this there is not
1482
BzrError.__init__(self)
1485
class IncompatibleBundleFormat(BzrError):
1487
_fmt = "Bundle format %(bundle_format)s is incompatible with %(other)s"
1311
1489
def __init__(self, bundle_format, other):
1312
BzrNewError.__init__(self)
1490
BzrError.__init__(self)
1313
1491
self.bundle_format = bundle_format
1314
1492
self.other = other
1317
class BadInventoryFormat(BzrNewError):
1318
"""Root class for inventory serialization errors"""
1495
class BadInventoryFormat(BzrError):
1497
_fmt = "Root class for inventory serialization errors"
1321
1500
class UnexpectedInventoryFormat(BadInventoryFormat):
1322
"""The inventory was not in the expected format:\n %(msg)s"""
1502
_fmt = "The inventory was not in the expected format:\n %(msg)s"
1324
1504
def __init__(self, msg):
1325
1505
BadInventoryFormat.__init__(self, msg=msg)
1328
class NoSmartMedium(BzrNewError):
1329
"""The transport '%(transport)s' cannot tunnel the smart protocol."""
1508
class NoSmartMedium(BzrError):
1510
_fmt = "The transport '%(transport)s' cannot tunnel the smart protocol."
1331
1512
def __init__(self, transport):
1332
BzrNewError.__init__(self)
1333
1513
self.transport = transport
1336
1516
class NoSmartServer(NotBranchError):
1337
"""No smart server available at %(url)s"""
1518
_fmt = "No smart server available at %(url)s"
1339
1520
def __init__(self, url):
1343
class UnknownSSH(BzrNewError):
1344
"""Unrecognised value for BZR_SSH environment variable: %(vendor)s"""
1524
class UnknownSSH(BzrError):
1526
_fmt = "Unrecognised value for BZR_SSH environment variable: %(vendor)s"
1346
1528
def __init__(self, vendor):
1347
BzrNewError.__init__(self)
1529
BzrError.__init__(self)
1348
1530
self.vendor = vendor
1351
class GhostRevisionUnusableHere(BzrNewError):
1352
"""Ghost revision {%(revision_id)s} cannot be used here."""
1533
class GhostRevisionUnusableHere(BzrError):
1535
_fmt = "Ghost revision {%(revision_id)s} cannot be used here."
1354
1537
def __init__(self, revision_id):
1355
BzrNewError.__init__(self)
1538
BzrError.__init__(self)
1356
1539
self.revision_id = revision_id
1359
class IllegalUseOfScopeReplacer(BzrNewError):
1360
"""ScopeReplacer object %(name)r was used incorrectly: %(msg)s%(extra)s"""
1362
is_user_error = False
1542
class IllegalUseOfScopeReplacer(BzrError):
1544
_fmt = "ScopeReplacer object %(name)r was used incorrectly: %(msg)s%(extra)s"
1546
internal_error = True
1364
1548
def __init__(self, name, msg, extra=None):
1365
BzrNewError.__init__(self)
1549
BzrError.__init__(self)
1366
1550
self.name = name