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 DisabledMethod(BzrNewError):
160
"""The smart server method '%(class_name)s' is disabled."""
162
is_user_error = False
172
class DisabledMethod(BzrError):
174
_fmt = "The smart server method '%(class_name)s' is disabled."
176
internal_error = True
164
178
def __init__(self, class_name):
165
BzrNewError.__init__(self)
179
BzrError.__init__(self)
166
180
self.class_name = class_name
169
class InvalidEntryName(BzrNewError):
170
"""Invalid entry name: %(name)s"""
183
class InvalidEntryName(BzrError):
185
_fmt = "Invalid entry name: %(name)s"
172
is_user_error = False
187
internal_error = True
174
189
def __init__(self, name):
175
BzrNewError.__init__(self)
190
BzrError.__init__(self)
179
class InvalidRevisionNumber(BzrNewError):
180
"""Invalid revision number %(revno)d"""
194
class InvalidRevisionNumber(BzrError):
196
_fmt = "Invalid revision number %(revno)s"
181
198
def __init__(self, revno):
182
BzrNewError.__init__(self)
199
BzrError.__init__(self)
183
200
self.revno = revno
186
class InvalidRevisionId(BzrNewError):
187
"""Invalid revision-id {%(revision_id)s} in %(branch)s"""
203
class InvalidRevisionId(BzrError):
205
_fmt = "Invalid revision-id {%(revision_id)s} in %(branch)s"
189
207
def __init__(self, revision_id, branch):
190
208
# branch can be any string or object with __str__ defined
191
BzrNewError.__init__(self)
209
BzrError.__init__(self)
192
210
self.revision_id = revision_id
193
211
self.branch = branch
196
class InventoryModified(BzrNewError):
197
"""The current inventory for the tree %(tree)r has been modified, so a clean inventory cannot be read without data loss."""
199
def __init__(self, tree):
200
BzrNewError.__init__(self)
204
class NoSuchId(BzrNewError):
205
"""The file id %(file_id)s is not present in the tree %(tree)s."""
214
class NoSuchId(BzrError):
216
_fmt = "The file id %(file_id)s is not present in the tree %(tree)s."
207
218
def __init__(self, tree, file_id):
208
BzrNewError.__init__(self)
219
BzrError.__init__(self)
209
220
self.file_id = file_id
213
class NoWorkingTree(BzrNewError):
214
"""No WorkingTree exists for %(base)s."""
224
class InventoryModified(BzrError):
226
_fmt = ("The current inventory for the tree %(tree)r has been modified, "
227
"so a clean inventory cannot be read without data loss.")
229
internal_error = True
231
def __init__(self, tree):
235
class NoWorkingTree(BzrError):
237
_fmt = "No WorkingTree exists for %(base)s."
216
239
def __init__(self, base):
217
BzrNewError.__init__(self)
240
BzrError.__init__(self)
221
class NotBuilding(BzrNewError):
222
"""Not currently building a tree."""
225
class NotLocalUrl(BzrNewError):
226
"""%(url)s is not a local path."""
244
class NotBuilding(BzrError):
246
_fmt = "Not currently building a tree."
249
class NotLocalUrl(BzrError):
251
_fmt = "%(url)s is not a local path."
228
253
def __init__(self, url):
229
BzrNewError.__init__(self)
233
class NotWriteLocked(BzrNewError):
234
"""%(not_locked)r is not write locked but needs to be."""
236
def __init__(self, not_locked):
237
BzrNewError.__init__(self)
238
self.not_locked = not_locked
241
class BzrCommandError(BzrNewError):
257
class WorkingTreeAlreadyPopulated(BzrError):
259
_fmt = """Working tree already populated in %(base)s"""
261
internal_error = True
263
def __init__(self, base):
266
class BzrCommandError(BzrError):
242
267
"""Error from user command"""
269
internal_error = False
246
271
# Error from malformed user command; please avoid raising this as a
247
272
# generic exception not caused by user input.
395
448
class InaccessibleParent(PathError):
396
"""Parent not accessible given base %(base)s and relative path %(path)s"""
450
_fmt = "Parent not accessible given base %(base)s and relative path %(path)s"
398
452
def __init__(self, path, base):
399
453
PathError.__init__(self, path)
403
class NoRepositoryPresent(BzrNewError):
404
"""No repository present: %(path)r"""
457
class NoRepositoryPresent(BzrError):
459
_fmt = "No repository present: %(path)r"
405
460
def __init__(self, bzrdir):
406
BzrNewError.__init__(self)
461
BzrError.__init__(self)
407
462
self.path = bzrdir.transport.clone('..').base
410
class FileInWrongBranch(BzrNewError):
411
"""File %(path)s in not in branch %(branch_base)s."""
465
class FileInWrongBranch(BzrError):
467
_fmt = "File %(path)s in not in branch %(branch_base)s."
413
469
def __init__(self, branch, path):
414
BzrNewError.__init__(self)
470
BzrError.__init__(self)
415
471
self.branch = branch
416
472
self.branch_base = branch.base
420
class UnsupportedFormatError(BzrNewError):
421
"""Unsupported branch format: %(format)s"""
424
class UnknownFormatError(BzrNewError):
425
"""Unknown branch format: %(format)r"""
428
class IncompatibleFormat(BzrNewError):
429
"""Format %(format)s is not compatible with .bzr version %(bzrdir)s."""
476
class UnsupportedFormatError(BzrError):
478
_fmt = "Unsupported branch format: %(format)s"
481
class UnknownFormatError(BzrError):
483
_fmt = "Unknown branch format: %(format)r"
486
class IncompatibleFormat(BzrError):
488
_fmt = "Format %(format)s is not compatible with .bzr version %(bzrdir)s."
431
490
def __init__(self, format, bzrdir_format):
432
BzrNewError.__init__(self)
491
BzrError.__init__(self)
433
492
self.format = format
434
493
self.bzrdir = bzrdir_format
437
class IncompatibleRevision(BzrNewError):
438
"""Revision is not compatible with %(repo_format)s"""
496
class IncompatibleRevision(BzrError):
498
_fmt = "Revision is not compatible with %(repo_format)s"
440
500
def __init__(self, repo_format):
441
BzrNewError.__init__(self)
501
BzrError.__init__(self)
442
502
self.repo_format = repo_format
445
class NotVersionedError(BzrNewError):
446
"""%(path)s is not versioned"""
505
class NotVersionedError(BzrError):
507
_fmt = "%(path)s is not versioned"
447
509
def __init__(self, path):
448
BzrNewError.__init__(self)
510
BzrError.__init__(self)
452
class PathsNotVersionedError(BzrNewError):
514
class PathsNotVersionedError(BzrError):
453
515
# used when reporting several paths are not versioned
454
"""Path(s) are not versioned: %(paths_as_string)s"""
517
_fmt = "Path(s) are not versioned: %(paths_as_string)s"
456
519
def __init__(self, paths):
457
520
from bzrlib.osutils import quotefn
458
BzrNewError.__init__(self)
521
BzrError.__init__(self)
459
522
self.paths = paths
460
523
self.paths_as_string = ' '.join([quotefn(p) for p in paths])
463
class PathsDoNotExist(BzrNewError):
464
"""Path(s) do not exist: %(paths_as_string)s"""
526
class PathsDoNotExist(BzrError):
528
_fmt = "Path(s) do not exist: %(paths_as_string)s"
466
530
# used when reporting that paths are neither versioned nor in the working
563
649
class LockNotHeld(LockError):
564
"""Lock not held: %(lock)s"""
651
_fmt = "Lock not held: %(lock)s"
565
653
def __init__(self, lock):
569
class PointlessCommit(BzrNewError):
570
"""No changes to commit"""
573
class UpgradeReadonly(BzrNewError):
574
"""Upgrade URL cannot work with readonly URL's."""
577
class UpToDateFormat(BzrNewError):
578
"""The branch format %(format)s is already at the most recent format."""
657
class PointlessCommit(BzrError):
659
_fmt = "No changes to commit"
662
class UpgradeReadonly(BzrError):
664
_fmt = "Upgrade URL cannot work with readonly URLs."
667
class UpToDateFormat(BzrError):
669
_fmt = "The branch format %(format)s is already at the most recent format."
580
671
def __init__(self, format):
581
BzrNewError.__init__(self)
672
BzrError.__init__(self)
582
673
self.format = format
585
676
class StrictCommitFailed(Exception):
586
"""Commit refused because there are unknowns in the tree."""
589
class NoSuchRevision(BzrNewError):
590
"""Branch %(branch)s has no revision %(revision)s"""
592
is_user_error = False
678
_fmt = "Commit refused because there are unknowns in the tree."
681
class NoSuchRevision(BzrError):
683
_fmt = "Branch %(branch)s has no revision %(revision)s"
685
internal_error = True
594
687
def __init__(self, branch, revision):
595
BzrNewError.__init__(self, branch=branch, revision=revision)
598
class NoSuchRevisionSpec(BzrNewError):
599
"""No namespace registered for string: %(spec)r"""
688
BzrError.__init__(self, branch=branch, revision=revision)
691
class NoSuchRevisionSpec(BzrError):
693
_fmt = "No namespace registered for string: %(spec)r"
601
695
def __init__(self, spec):
602
BzrNewError.__init__(self, spec=spec)
605
class InvalidRevisionSpec(BzrNewError):
606
"""Requested revision: '%(spec)s' does not exist in branch:
607
%(branch)s%(extra)s"""
696
BzrError.__init__(self, spec=spec)
699
class InvalidRevisionSpec(BzrError):
701
_fmt = "Requested revision: %(spec)r does not exist in branch: %(branch)s%(extra)s"
609
703
def __init__(self, spec, branch, extra=None):
610
BzrNewError.__init__(self, branch=branch, spec=spec)
704
BzrError.__init__(self, branch=branch, spec=spec)
612
706
self.extra = '\n' + str(extra)
680
778
self.bases = bases
683
class NoCommits(BzrNewError):
684
"""Branch %(branch)s has no commits."""
781
class NoCommits(BzrError):
783
_fmt = "Branch %(branch)s has no commits."
686
785
def __init__(self, branch):
687
BzrNewError.__init__(self, branch=branch)
786
BzrError.__init__(self, branch=branch)
690
789
class UnlistableStore(BzrError):
691
791
def __init__(self, store):
692
792
BzrError.__init__(self, "Store %s is not listable" % store)
696
796
class UnlistableBranch(BzrError):
697
798
def __init__(self, br):
698
799
BzrError.__init__(self, "Stores for branch %s are not listable" % br)
701
class BoundBranchOutOfDate(BzrNewError):
702
"""Bound branch %(branch)s is out of date with master branch %(master)s."""
802
class BoundBranchOutOfDate(BzrError):
804
_fmt = "Bound branch %(branch)s is out of date with master branch %(master)s."
703
806
def __init__(self, branch, master):
704
BzrNewError.__init__(self)
807
BzrError.__init__(self)
705
808
self.branch = branch
706
809
self.master = master
709
class CommitToDoubleBoundBranch(BzrNewError):
710
"""Cannot commit to branch %(branch)s. It is bound to %(master)s, which is bound to %(remote)s."""
812
class CommitToDoubleBoundBranch(BzrError):
814
_fmt = "Cannot commit to branch %(branch)s. It is bound to %(master)s, which is bound to %(remote)s."
711
816
def __init__(self, branch, master, remote):
712
BzrNewError.__init__(self)
817
BzrError.__init__(self)
713
818
self.branch = branch
714
819
self.master = master
715
820
self.remote = remote
718
class OverwriteBoundBranch(BzrNewError):
719
"""Cannot pull --overwrite to a branch which is bound %(branch)s"""
823
class OverwriteBoundBranch(BzrError):
825
_fmt = "Cannot pull --overwrite to a branch which is bound %(branch)s"
720
827
def __init__(self, branch):
721
BzrNewError.__init__(self)
828
BzrError.__init__(self)
722
829
self.branch = branch
725
class BoundBranchConnectionFailure(BzrNewError):
726
"""Unable to connect to target of bound branch %(branch)s => %(target)s: %(error)s"""
832
class BoundBranchConnectionFailure(BzrError):
834
_fmt = "Unable to connect to target of bound branch %(branch)s => %(target)s: %(error)s"
727
836
def __init__(self, branch, target, error):
728
BzrNewError.__init__(self)
837
BzrError.__init__(self)
729
838
self.branch = branch
730
839
self.target = target
731
840
self.error = error
734
class WeaveError(BzrNewError):
735
"""Error in processing weave: %(message)s"""
843
class WeaveError(BzrError):
845
_fmt = "Error in processing weave: %(message)s"
737
847
def __init__(self, message=None):
738
BzrNewError.__init__(self)
848
BzrError.__init__(self)
739
849
self.message = message
742
852
class WeaveRevisionAlreadyPresent(WeaveError):
743
"""Revision {%(revision_id)s} already present in %(weave)s"""
854
_fmt = "Revision {%(revision_id)s} already present in %(weave)s"
744
856
def __init__(self, revision_id, weave):
746
858
WeaveError.__init__(self)
954
1093
BzrError.__init__(self, message)
957
class NoEmailInUsername(BzrNewError):
958
"""%(username)r does not seem to contain a reasonable email address"""
1096
class NoEmailInUsername(BzrError):
1098
_fmt = "%(username)r does not seem to contain a reasonable email address"
960
1100
def __init__(self, username):
961
BzrNewError.__init__(self)
1101
BzrError.__init__(self)
962
1102
self.username = username
965
1105
class SigningFailed(BzrError):
1107
_fmt = "Failed to gpg sign data with command %(command_line)r"
966
1109
def __init__(self, command_line):
967
BzrError.__init__(self, "Failed to gpg sign data with command '%s'"
1110
BzrError.__init__(self, command_line=command_line)
971
1113
class WorkingTreeNotRevision(BzrError):
1115
_fmt = ("The working tree for %(basedir)s has changed since"
1116
" the last commit, but weave merge requires that it be"
972
1119
def __init__(self, tree):
973
BzrError.__init__(self, "The working tree for %s has changed since"
974
" last commit, but weave merge requires that it be"
975
" unchanged." % tree.basedir)
978
class WritingCompleted(BzrNewError):
979
"""The MediumRequest '%(request)s' has already had finish_writing called upon it - accept bytes may not be called anymore."""
981
is_user_error = False
983
def __init__(self, request):
984
BzrNewError.__init__(self)
985
self.request = request
988
class WritingNotComplete(BzrNewError):
989
"""The MediumRequest '%(request)s' has not has finish_writing called upon it - until the write phase is complete no data may be read."""
991
is_user_error = False
993
def __init__(self, request):
994
BzrNewError.__init__(self)
995
self.request = request
998
class CantReprocessAndShowBase(BzrNewError):
999
"""Can't reprocess and show base.
1000
Reprocessing obscures relationship of conflicting lines to base."""
1003
class GraphCycleError(BzrNewError):
1004
"""Cycle in graph %(graph)r"""
1120
BzrError.__init__(self, basedir=tree.basedir)
1123
class CantReprocessAndShowBase(BzrError):
1125
_fmt = "Can't reprocess and show base, because reprocessing obscures " \
1126
"the relationship of conflicting lines to the base"
1129
class GraphCycleError(BzrError):
1131
_fmt = "Cycle in graph %(graph)r"
1005
1133
def __init__(self, graph):
1006
BzrNewError.__init__(self)
1134
BzrError.__init__(self)
1007
1135
self.graph = graph
1010
class NotConflicted(BzrNewError):
1011
"""File %(filename)s is not conflicted."""
1138
class WritingCompleted(BzrError):
1140
_fmt = ("The MediumRequest '%(request)s' has already had finish_writing "
1141
"called upon it - accept bytes may not be called anymore.")
1143
internal_error = True
1145
def __init__(self, request):
1146
self.request = request
1149
class WritingNotComplete(BzrError):
1151
_fmt = ("The MediumRequest '%(request)s' has not has finish_writing "
1152
"called upon it - until the write phase is complete no "
1153
"data may be read.")
1155
internal_error = True
1157
def __init__(self, request):
1158
self.request = request
1161
class NotConflicted(BzrError):
1163
_fmt = "File %(filename)s is not conflicted."
1013
1165
def __init__(self, filename):
1014
BzrNewError.__init__(self)
1166
BzrError.__init__(self)
1015
1167
self.filename = filename
1018
class MediumNotConnected(BzrNewError):
1019
"""The medium '%(medium)s' is not connected."""
1170
class MediumNotConnected(BzrError):
1172
_fmt = """The medium '%(medium)s' is not connected."""
1174
internal_error = True
1021
1176
def __init__(self, medium):
1022
BzrNewError.__init__(self)
1023
1177
self.medium = medium
1026
1180
class MustUseDecorated(Exception):
1027
"""A decorating function has requested its original command be used.
1029
This should never escape bzr, so does not need to be printable.
1033
class NoBundleFound(BzrNewError):
1034
"""No bundle was found in %(filename)s"""
1182
_fmt = """A decorating function has requested its original command be used."""
1185
class NoBundleFound(BzrError):
1187
_fmt = "No bundle was found in %(filename)s"
1035
1189
def __init__(self, filename):
1036
BzrNewError.__init__(self)
1190
BzrError.__init__(self)
1037
1191
self.filename = filename
1040
class BundleNotSupported(BzrNewError):
1041
"""Unable to handle bundle version %(version)s: %(msg)s"""
1194
class BundleNotSupported(BzrError):
1196
_fmt = "Unable to handle bundle version %(version)s: %(msg)s"
1042
1198
def __init__(self, version, msg):
1043
BzrNewError.__init__(self)
1199
BzrError.__init__(self)
1044
1200
self.version = version
1048
class MissingText(BzrNewError):
1049
"""Branch %(base)s is missing revision %(text_revision)s of %(file_id)s"""
1204
class MissingText(BzrError):
1206
_fmt = "Branch %(base)s is missing revision %(text_revision)s of %(file_id)s"
1051
1208
def __init__(self, branch, text_revision, file_id):
1052
BzrNewError.__init__(self)
1209
BzrError.__init__(self)
1053
1210
self.branch = branch
1054
1211
self.base = branch.base
1055
1212
self.text_revision = text_revision
1056
1213
self.file_id = file_id
1059
class DuplicateKey(BzrNewError):
1060
"""Key %(key)s is already present in map"""
1063
class MalformedTransform(BzrNewError):
1064
"""Tree transform is malformed %(conflicts)r"""
1067
class NoFinalPath(BzrNewError):
1068
"""No final name for trans_id %(trans_id)r
1069
file-id: %(file_id)r"
1070
root trans-id: %(root_trans_id)r
1216
class DuplicateKey(BzrError):
1218
_fmt = "Key %(key)s is already present in map"
1221
class MalformedTransform(BzrError):
1223
_fmt = "Tree transform is malformed %(conflicts)r"
1226
class NoFinalPath(BzrError):
1228
_fmt = ("No final name for trans_id %(trans_id)r\n"
1229
"file-id: %(file_id)r\n"
1230
"root trans-id: %(root_trans_id)r\n")
1073
1232
def __init__(self, trans_id, transform):
1074
1233
self.trans_id = trans_id
1076
1235
self.root_trans_id = transform.root
1079
class BzrBadParameter(BzrNewError):
1080
"""A bad parameter : %(param)s is not usable.
1082
This exception should never be thrown, but it is a base class for all
1083
parameter-to-function errors.
1238
class BzrBadParameter(BzrError):
1240
_fmt = "Bad parameter: %(param)r"
1242
# This exception should never be thrown, but it is a base class for all
1243
# parameter-to-function errors.
1085
1245
def __init__(self, param):
1086
BzrNewError.__init__(self)
1246
BzrError.__init__(self)
1087
1247
self.param = param
1090
1250
class BzrBadParameterNotUnicode(BzrBadParameter):
1091
"""Parameter %(param)s is neither unicode nor utf8."""
1094
class ReusingTransform(BzrNewError):
1095
"""Attempt to reuse a transform that has already been applied."""
1098
class CantMoveRoot(BzrNewError):
1099
"""Moving the root directory is not supported at this time"""
1252
_fmt = "Parameter %(param)s is neither unicode nor utf8."
1255
class ReusingTransform(BzrError):
1257
_fmt = "Attempt to reuse a transform that has already been applied."
1260
class CantMoveRoot(BzrError):
1262
_fmt = "Moving the root directory is not supported at this time"
1102
1265
class BzrBadParameterNotString(BzrBadParameter):
1103
"""Parameter %(param)s is not a string or unicode string."""
1267
_fmt = "Parameter %(param)s is not a string or unicode string."
1106
1270
class BzrBadParameterMissing(BzrBadParameter):
1107
"""Parameter $(param)s is required but not present."""
1272
_fmt = "Parameter $(param)s is required but not present."
1110
1275
class BzrBadParameterUnicode(BzrBadParameter):
1111
"""Parameter %(param)s is unicode but only byte-strings are permitted."""
1277
_fmt = "Parameter %(param)s is unicode but only byte-strings are permitted."
1114
1280
class BzrBadParameterContainsNewline(BzrBadParameter):
1115
"""Parameter %(param)s contains a newline."""
1118
class DependencyNotPresent(BzrNewError):
1119
"""Unable to import library "%(library)s": %(error)s"""
1282
_fmt = "Parameter %(param)s contains a newline."
1285
class DependencyNotPresent(BzrError):
1287
_fmt = 'Unable to import library "%(library)s": %(error)s'
1121
1289
def __init__(self, library, error):
1122
BzrNewError.__init__(self, library=library, error=error)
1290
BzrError.__init__(self, library=library, error=error)
1125
1293
class ParamikoNotPresent(DependencyNotPresent):
1126
"""Unable to import paramiko (required for sftp support): %(error)s"""
1295
_fmt = "Unable to import paramiko (required for sftp support): %(error)s"
1128
1297
def __init__(self, error):
1129
1298
DependencyNotPresent.__init__(self, 'paramiko', error)
1132
class PointlessMerge(BzrNewError):
1133
"""Nothing to merge."""
1136
class UninitializableFormat(BzrNewError):
1137
"""Format %(format)s cannot be initialised by this version of bzr."""
1301
class PointlessMerge(BzrError):
1303
_fmt = "Nothing to merge."
1306
class UninitializableFormat(BzrError):
1308
_fmt = "Format %(format)s cannot be initialised by this version of bzr."
1139
1310
def __init__(self, format):
1140
BzrNewError.__init__(self)
1311
BzrError.__init__(self)
1141
1312
self.format = format
1144
class BadConversionTarget(BzrNewError):
1145
"""Cannot convert to format %(format)s. %(problem)s"""
1315
class BadConversionTarget(BzrError):
1317
_fmt = "Cannot convert to format %(format)s. %(problem)s"
1147
1319
def __init__(self, problem, format):
1148
BzrNewError.__init__(self)
1320
BzrError.__init__(self)
1149
1321
self.problem = problem
1150
1322
self.format = format
1153
class NoDiff(BzrNewError):
1154
"""Diff is not installed on this machine: %(msg)s"""
1325
class NoDiff(BzrError):
1327
_fmt = "Diff is not installed on this machine: %(msg)s"
1156
1329
def __init__(self, msg):
1157
BzrNewError.__init__(self, msg=msg)
1160
class NoDiff3(BzrNewError):
1161
"""Diff3 is not installed on this machine."""
1164
class ExistingLimbo(BzrNewError):
1165
"""This tree contains left-over files from a failed operation.
1166
Please examine %(limbo_dir)s to see if it contains any files you wish to
1167
keep, and delete it when you are done.
1169
def __init__(self, limbo_dir):
1170
BzrNewError.__init__(self)
1171
self.limbo_dir = limbo_dir
1174
class ImmortalLimbo(BzrNewError):
1175
"""Unable to delete transform temporary directory $(limbo_dir)s.
1176
Please examine %(limbo_dir)s to see if it contains any files you wish to
1177
keep, and delete it when you are done.
1179
def __init__(self, limbo_dir):
1180
BzrNewError.__init__(self)
1181
self.limbo_dir = limbo_dir
1184
class OutOfDateTree(BzrNewError):
1185
"""Working tree is out of date, please run 'bzr update'."""
1330
BzrError.__init__(self, msg=msg)
1333
class NoDiff3(BzrError):
1335
_fmt = "Diff3 is not installed on this machine."
1338
class ExistingLimbo(BzrError):
1340
_fmt = """This tree contains left-over files from a failed operation.
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 ImmortalLimbo(BzrError):
1351
_fmt = """Unable to delete transform temporary directory $(limbo_dir)s.
1352
Please examine %(limbo_dir)s to see if it contains any files you wish to
1353
keep, and delete it when you are done."""
1355
def __init__(self, limbo_dir):
1356
BzrError.__init__(self)
1357
self.limbo_dir = limbo_dir
1360
class OutOfDateTree(BzrError):
1362
_fmt = "Working tree is out of date, please run 'bzr update'."
1187
1364
def __init__(self, tree):
1188
BzrNewError.__init__(self)
1365
BzrError.__init__(self)
1189
1366
self.tree = tree
1192
class MergeModifiedFormatError(BzrNewError):
1193
"""Error in merge modified format"""
1196
class ConflictFormatError(BzrNewError):
1197
"""Format error in conflict listings"""
1200
class CorruptRepository(BzrNewError):
1201
"""An error has been detected in the repository %(repo_path)s.
1369
class MergeModifiedFormatError(BzrError):
1371
_fmt = "Error in merge modified format"
1374
class ConflictFormatError(BzrError):
1376
_fmt = "Format error in conflict listings"
1379
class CorruptRepository(BzrError):
1381
_fmt = """An error has been detected in the repository %(repo_path)s.
1202
1382
Please run bzr reconcile on this repository."""
1204
1384
def __init__(self, repo):
1205
BzrNewError.__init__(self)
1385
BzrError.__init__(self)
1206
1386
self.repo_path = repo.bzrdir.root_transport.base
1209
class UpgradeRequired(BzrNewError):
1210
"""To use this feature you must upgrade your branch at %(path)s."""
1389
class UpgradeRequired(BzrError):
1391
_fmt = "To use this feature you must upgrade your branch at %(path)s."
1212
1393
def __init__(self, path):
1213
BzrNewError.__init__(self)
1394
BzrError.__init__(self)
1214
1395
self.path = path
1217
class LocalRequiresBoundBranch(BzrNewError):
1218
"""Cannot perform local-only commits on unbound branches."""
1221
class MissingProgressBarFinish(BzrNewError):
1222
"""A nested progress bar was not 'finished' correctly."""
1225
class InvalidProgressBarType(BzrNewError):
1226
"""Environment variable BZR_PROGRESS_BAR='%(bar_type)s is not a supported type
1398
class LocalRequiresBoundBranch(BzrError):
1400
_fmt = "Cannot perform local-only commits on unbound branches."
1403
class MissingProgressBarFinish(BzrError):
1405
_fmt = "A nested progress bar was not 'finished' correctly."
1408
class InvalidProgressBarType(BzrError):
1410
_fmt = """Environment variable BZR_PROGRESS_BAR='%(bar_type)s is not a supported type
1227
1411
Select one of: %(valid_types)s"""
1229
1413
def __init__(self, bar_type, valid_types):
1230
BzrNewError.__init__(self, bar_type=bar_type, valid_types=valid_types)
1233
class UnsupportedOperation(BzrNewError):
1234
"""The method %(mname)s is not supported on objects of type %(tname)s."""
1414
BzrError.__init__(self, bar_type=bar_type, valid_types=valid_types)
1417
class UnsupportedOperation(BzrError):
1419
_fmt = "The method %(mname)s is not supported on objects of type %(tname)s."
1235
1421
def __init__(self, method, method_self):
1236
1422
self.method = method
1237
1423
self.mname = method.__name__
1238
1424
self.tname = type(method_self).__name__
1241
class BinaryFile(BzrNewError):
1242
"""File is binary but should be text."""
1245
class IllegalPath(BzrNewError):
1246
"""The path %(path)s is not permitted on this platform"""
1427
class BinaryFile(BzrError):
1429
_fmt = "File is binary but should be text."
1432
class IllegalPath(BzrError):
1434
_fmt = "The path %(path)s is not permitted on this platform"
1248
1436
def __init__(self, path):
1249
BzrNewError.__init__(self)
1437
BzrError.__init__(self)
1250
1438
self.path = path
1253
class TestamentMismatch(BzrNewError):
1254
"""Testament did not match expected value.
1441
class TestamentMismatch(BzrError):
1443
_fmt = """Testament did not match expected value.
1255
1444
For revision_id {%(revision_id)s}, expected {%(expected)s}, measured
1258
1447
def __init__(self, revision_id, expected, measured):
1259
1448
self.revision_id = revision_id
1260
1449
self.expected = expected
1261
1450
self.measured = measured
1264
class NotABundle(BzrNewError):
1265
"""Not a bzr revision-bundle: %(text)r"""
1453
class NotABundle(BzrError):
1455
_fmt = "Not a bzr revision-bundle: %(text)r"
1267
1457
def __init__(self, text):
1268
BzrNewError.__init__(self)
1458
BzrError.__init__(self)
1269
1459
self.text = text
1272
class BadBundle(BzrNewError):
1273
"""Bad bzr revision-bundle: %(text)r"""
1462
class BadBundle(BzrError):
1464
_fmt = "Bad bzr revision-bundle: %(text)r"
1275
1466
def __init__(self, text):
1276
BzrNewError.__init__(self)
1467
BzrError.__init__(self)
1277
1468
self.text = text
1280
1471
class MalformedHeader(BadBundle):
1281
"""Malformed bzr revision-bundle header: %(text)r"""
1283
def __init__(self, text):
1284
BzrNewError.__init__(self)
1473
_fmt = "Malformed bzr revision-bundle header: %(text)r"
1288
1476
class MalformedPatches(BadBundle):
1289
"""Malformed patches in bzr revision-bundle: %(text)r"""
1291
def __init__(self, text):
1292
BzrNewError.__init__(self)
1478
_fmt = "Malformed patches in bzr revision-bundle: %(text)r"
1296
1481
class MalformedFooter(BadBundle):
1297
"""Malformed footer in bzr revision-bundle: %(text)r"""
1299
def __init__(self, text):
1300
BzrNewError.__init__(self)
1483
_fmt = "Malformed footer in bzr revision-bundle: %(text)r"
1304
1486
class UnsupportedEOLMarker(BadBundle):
1305
"""End of line marker was not \\n in bzr revision-bundle"""
1488
_fmt = "End of line marker was not \\n in bzr revision-bundle"
1307
1490
def __init__(self):
1308
BzrNewError.__init__(self)
1311
class IncompatibleFormat(BzrNewError):
1312
"""Bundle format %(bundle_format)s is incompatible with %(other)s"""
1491
# XXX: BadBundle's constructor assumes there's explanatory text,
1492
# but for this there is not
1493
BzrError.__init__(self)
1496
class IncompatibleBundleFormat(BzrError):
1498
_fmt = "Bundle format %(bundle_format)s is incompatible with %(other)s"
1314
1500
def __init__(self, bundle_format, other):
1315
BzrNewError.__init__(self)
1501
BzrError.__init__(self)
1316
1502
self.bundle_format = bundle_format
1317
1503
self.other = other
1320
class BadInventoryFormat(BzrNewError):
1321
"""Root class for inventory serialization errors"""
1506
class BadInventoryFormat(BzrError):
1508
_fmt = "Root class for inventory serialization errors"
1324
1511
class UnexpectedInventoryFormat(BadInventoryFormat):
1325
"""The inventory was not in the expected format:\n %(msg)s"""
1513
_fmt = "The inventory was not in the expected format:\n %(msg)s"
1327
1515
def __init__(self, msg):
1328
1516
BadInventoryFormat.__init__(self, msg=msg)
1331
class NoSmartMedium(BzrNewError):
1332
"""The transport '%(transport)s' cannot tunnel the smart protocol."""
1519
class NoSmartMedium(BzrError):
1521
_fmt = "The transport '%(transport)s' cannot tunnel the smart protocol."
1334
1523
def __init__(self, transport):
1335
BzrNewError.__init__(self)
1336
1524
self.transport = transport
1339
1527
class NoSmartServer(NotBranchError):
1340
"""No smart server available at %(url)s"""
1529
_fmt = "No smart server available at %(url)s"
1342
1531
def __init__(self, url):
1346
class UnknownSSH(BzrNewError):
1347
"""Unrecognised value for BZR_SSH environment variable: %(vendor)s"""
1535
class UnknownSSH(BzrError):
1537
_fmt = "Unrecognised value for BZR_SSH environment variable: %(vendor)s"
1349
1539
def __init__(self, vendor):
1350
BzrNewError.__init__(self)
1540
BzrError.__init__(self)
1351
1541
self.vendor = vendor
1354
class GhostRevisionUnusableHere(BzrNewError):
1355
"""Ghost revision {%(revision_id)s} cannot be used here."""
1544
class GhostRevisionUnusableHere(BzrError):
1546
_fmt = "Ghost revision {%(revision_id)s} cannot be used here."
1357
1548
def __init__(self, revision_id):
1358
BzrNewError.__init__(self)
1549
BzrError.__init__(self)
1359
1550
self.revision_id = revision_id
1362
class IllegalUseOfScopeReplacer(BzrNewError):
1363
"""ScopeReplacer object %(name)r was used incorrectly: %(msg)s%(extra)s"""
1365
is_user_error = False
1553
class IllegalUseOfScopeReplacer(BzrError):
1555
_fmt = "ScopeReplacer object %(name)r was used incorrectly: %(msg)s%(extra)s"
1557
internal_error = True
1367
1559
def __init__(self, name, msg, extra=None):
1368
BzrNewError.__init__(self)
1560
BzrError.__init__(self)
1369
1561
self.name = name