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)
676
766
self.bases = bases
679
class NoCommits(BzrNewError):
680
"""Branch %(branch)s has no commits."""
769
class NoCommits(BzrError):
771
_fmt = "Branch %(branch)s has no commits."
682
773
def __init__(self, branch):
683
BzrNewError.__init__(self, branch=branch)
774
BzrError.__init__(self, branch=branch)
686
777
class UnlistableStore(BzrError):
687
779
def __init__(self, store):
688
780
BzrError.__init__(self, "Store %s is not listable" % store)
692
784
class UnlistableBranch(BzrError):
693
786
def __init__(self, br):
694
787
BzrError.__init__(self, "Stores for branch %s are not listable" % br)
697
class BoundBranchOutOfDate(BzrNewError):
698
"""Bound branch %(branch)s is out of date with master branch %(master)s."""
790
class BoundBranchOutOfDate(BzrError):
792
_fmt = "Bound branch %(branch)s is out of date with master branch %(master)s."
699
794
def __init__(self, branch, master):
700
BzrNewError.__init__(self)
795
BzrError.__init__(self)
701
796
self.branch = branch
702
797
self.master = master
705
class CommitToDoubleBoundBranch(BzrNewError):
706
"""Cannot commit to branch %(branch)s. It is bound to %(master)s, which is bound to %(remote)s."""
800
class CommitToDoubleBoundBranch(BzrError):
802
_fmt = "Cannot commit to branch %(branch)s. It is bound to %(master)s, which is bound to %(remote)s."
707
804
def __init__(self, branch, master, remote):
708
BzrNewError.__init__(self)
805
BzrError.__init__(self)
709
806
self.branch = branch
710
807
self.master = master
711
808
self.remote = remote
714
class OverwriteBoundBranch(BzrNewError):
715
"""Cannot pull --overwrite to a branch which is bound %(branch)s"""
811
class OverwriteBoundBranch(BzrError):
813
_fmt = "Cannot pull --overwrite to a branch which is bound %(branch)s"
716
815
def __init__(self, branch):
717
BzrNewError.__init__(self)
816
BzrError.__init__(self)
718
817
self.branch = branch
721
class BoundBranchConnectionFailure(BzrNewError):
722
"""Unable to connect to target of bound branch %(branch)s => %(target)s: %(error)s"""
820
class BoundBranchConnectionFailure(BzrError):
822
_fmt = "Unable to connect to target of bound branch %(branch)s => %(target)s: %(error)s"
723
824
def __init__(self, branch, target, error):
724
BzrNewError.__init__(self)
825
BzrError.__init__(self)
725
826
self.branch = branch
726
827
self.target = target
727
828
self.error = error
730
class WeaveError(BzrNewError):
731
"""Error in processing weave: %(message)s"""
831
class WeaveError(BzrError):
833
_fmt = "Error in processing weave: %(message)s"
733
835
def __init__(self, message=None):
734
BzrNewError.__init__(self)
836
BzrError.__init__(self)
735
837
self.message = message
738
840
class WeaveRevisionAlreadyPresent(WeaveError):
739
"""Revision {%(revision_id)s} already present in %(weave)s"""
842
_fmt = "Revision {%(revision_id)s} already present in %(weave)s"
740
844
def __init__(self, revision_id, weave):
742
846
WeaveError.__init__(self)
950
1081
BzrError.__init__(self, message)
953
class NoEmailInUsername(BzrNewError):
954
"""%(username)r does not seem to contain a reasonable email address"""
1084
class NoEmailInUsername(BzrError):
1086
_fmt = "%(username)r does not seem to contain a reasonable email address"
956
1088
def __init__(self, username):
957
BzrNewError.__init__(self)
1089
BzrError.__init__(self)
958
1090
self.username = username
961
1093
class SigningFailed(BzrError):
1095
_fmt = "Failed to gpg sign data with command %(command_line)r"
962
1097
def __init__(self, command_line):
963
BzrError.__init__(self, "Failed to gpg sign data with command '%s'"
1098
BzrError.__init__(self, command_line=command_line)
967
1101
class WorkingTreeNotRevision(BzrError):
1103
_fmt = ("The working tree for %(basedir)s has changed since"
1104
" the last commit, but weave merge requires that it be"
968
1107
def __init__(self, tree):
969
BzrError.__init__(self, "The working tree for %s has changed since"
970
" last commit, but weave merge requires that it be"
971
" unchanged." % tree.basedir)
974
class WritingCompleted(BzrNewError):
975
"""The MediumRequest '%(request)s' has already had finish_writing called upon it - accept bytes may not be called anymore."""
977
is_user_error = False
979
def __init__(self, request):
980
BzrNewError.__init__(self)
981
self.request = request
984
class WritingNotComplete(BzrNewError):
985
"""The MediumRequest '%(request)s' has not has finish_writing called upon it - until the write phase is complete no data may be read."""
987
is_user_error = False
989
def __init__(self, request):
990
BzrNewError.__init__(self)
991
self.request = request
994
class CantReprocessAndShowBase(BzrNewError):
995
"""Can't reprocess and show base.
996
Reprocessing obscures relationship of conflicting lines to base."""
999
class GraphCycleError(BzrNewError):
1000
"""Cycle in graph %(graph)r"""
1108
BzrError.__init__(self, basedir=tree.basedir)
1111
class CantReprocessAndShowBase(BzrError):
1113
_fmt = "Can't reprocess and show base, because reprocessing obscures " \
1114
"the relationship of conflicting lines to the base"
1117
class GraphCycleError(BzrError):
1119
_fmt = "Cycle in graph %(graph)r"
1001
1121
def __init__(self, graph):
1002
BzrNewError.__init__(self)
1122
BzrError.__init__(self)
1003
1123
self.graph = graph
1006
class NotConflicted(BzrNewError):
1007
"""File %(filename)s is not conflicted."""
1126
class WritingCompleted(BzrError):
1128
_fmt = ("The MediumRequest '%(request)s' has already had finish_writing "
1129
"called upon it - accept bytes may not be called anymore.")
1131
internal_error = True
1133
def __init__(self, request):
1134
self.request = request
1137
class WritingNotComplete(BzrError):
1139
_fmt = ("The MediumRequest '%(request)s' has not has finish_writing "
1140
"called upon it - until the write phase is complete no "
1141
"data may be read.")
1143
internal_error = True
1145
def __init__(self, request):
1146
self.request = request
1149
class NotConflicted(BzrError):
1151
_fmt = "File %(filename)s is not conflicted."
1009
1153
def __init__(self, filename):
1010
BzrNewError.__init__(self)
1154
BzrError.__init__(self)
1011
1155
self.filename = filename
1014
class MediumNotConnected(BzrNewError):
1015
"""The medium '%(medium)s' is not connected."""
1158
class MediumNotConnected(BzrError):
1160
_fmt = """The medium '%(medium)s' is not connected."""
1162
internal_error = True
1017
1164
def __init__(self, medium):
1018
BzrNewError.__init__(self)
1019
1165
self.medium = medium
1022
1168
class MustUseDecorated(Exception):
1023
"""A decorating function has requested its original command be used.
1025
This should never escape bzr, so does not need to be printable.
1029
class NoBundleFound(BzrNewError):
1030
"""No bundle was found in %(filename)s"""
1170
_fmt = """A decorating function has requested its original command be used."""
1173
class NoBundleFound(BzrError):
1175
_fmt = "No bundle was found in %(filename)s"
1031
1177
def __init__(self, filename):
1032
BzrNewError.__init__(self)
1178
BzrError.__init__(self)
1033
1179
self.filename = filename
1036
class BundleNotSupported(BzrNewError):
1037
"""Unable to handle bundle version %(version)s: %(msg)s"""
1182
class BundleNotSupported(BzrError):
1184
_fmt = "Unable to handle bundle version %(version)s: %(msg)s"
1038
1186
def __init__(self, version, msg):
1039
BzrNewError.__init__(self)
1187
BzrError.__init__(self)
1040
1188
self.version = version
1044
class MissingText(BzrNewError):
1045
"""Branch %(base)s is missing revision %(text_revision)s of %(file_id)s"""
1192
class MissingText(BzrError):
1194
_fmt = "Branch %(base)s is missing revision %(text_revision)s of %(file_id)s"
1047
1196
def __init__(self, branch, text_revision, file_id):
1048
BzrNewError.__init__(self)
1197
BzrError.__init__(self)
1049
1198
self.branch = branch
1050
1199
self.base = branch.base
1051
1200
self.text_revision = text_revision
1052
1201
self.file_id = file_id
1055
class DuplicateKey(BzrNewError):
1056
"""Key %(key)s is already present in map"""
1059
class MalformedTransform(BzrNewError):
1060
"""Tree transform is malformed %(conflicts)r"""
1063
class NoFinalPath(BzrNewError):
1064
"""No final name for trans_id %(trans_id)r
1065
file-id: %(file_id)r"
1066
root trans-id: %(root_trans_id)r
1204
class DuplicateKey(BzrError):
1206
_fmt = "Key %(key)s is already present in map"
1209
class MalformedTransform(BzrError):
1211
_fmt = "Tree transform is malformed %(conflicts)r"
1214
class NoFinalPath(BzrError):
1216
_fmt = ("No final name for trans_id %(trans_id)r\n"
1217
"file-id: %(file_id)r\n"
1218
"root trans-id: %(root_trans_id)r\n")
1069
1220
def __init__(self, trans_id, transform):
1070
1221
self.trans_id = trans_id
1072
1223
self.root_trans_id = transform.root
1075
class BzrBadParameter(BzrNewError):
1076
"""A bad parameter : %(param)s is not usable.
1078
This exception should never be thrown, but it is a base class for all
1079
parameter-to-function errors.
1226
class BzrBadParameter(BzrError):
1228
_fmt = "Bad parameter: %(param)r"
1230
# This exception should never be thrown, but it is a base class for all
1231
# parameter-to-function errors.
1081
1233
def __init__(self, param):
1082
BzrNewError.__init__(self)
1234
BzrError.__init__(self)
1083
1235
self.param = param
1086
1238
class BzrBadParameterNotUnicode(BzrBadParameter):
1087
"""Parameter %(param)s is neither unicode nor utf8."""
1090
class ReusingTransform(BzrNewError):
1091
"""Attempt to reuse a transform that has already been applied."""
1094
class CantMoveRoot(BzrNewError):
1095
"""Moving the root directory is not supported at this time"""
1240
_fmt = "Parameter %(param)s is neither unicode nor utf8."
1243
class ReusingTransform(BzrError):
1245
_fmt = "Attempt to reuse a transform that has already been applied."
1248
class CantMoveRoot(BzrError):
1250
_fmt = "Moving the root directory is not supported at this time"
1098
1253
class BzrBadParameterNotString(BzrBadParameter):
1099
"""Parameter %(param)s is not a string or unicode string."""
1255
_fmt = "Parameter %(param)s is not a string or unicode string."
1102
1258
class BzrBadParameterMissing(BzrBadParameter):
1103
"""Parameter $(param)s is required but not present."""
1260
_fmt = "Parameter $(param)s is required but not present."
1106
1263
class BzrBadParameterUnicode(BzrBadParameter):
1107
"""Parameter %(param)s is unicode but only byte-strings are permitted."""
1265
_fmt = "Parameter %(param)s is unicode but only byte-strings are permitted."
1110
1268
class BzrBadParameterContainsNewline(BzrBadParameter):
1111
"""Parameter %(param)s contains a newline."""
1114
class DependencyNotPresent(BzrNewError):
1115
"""Unable to import library "%(library)s": %(error)s"""
1270
_fmt = "Parameter %(param)s contains a newline."
1273
class DependencyNotPresent(BzrError):
1275
_fmt = 'Unable to import library "%(library)s": %(error)s'
1117
1277
def __init__(self, library, error):
1118
BzrNewError.__init__(self, library=library, error=error)
1278
BzrError.__init__(self, library=library, error=error)
1121
1281
class ParamikoNotPresent(DependencyNotPresent):
1122
"""Unable to import paramiko (required for sftp support): %(error)s"""
1283
_fmt = "Unable to import paramiko (required for sftp support): %(error)s"
1124
1285
def __init__(self, error):
1125
1286
DependencyNotPresent.__init__(self, 'paramiko', error)
1128
class PointlessMerge(BzrNewError):
1129
"""Nothing to merge."""
1132
class UninitializableFormat(BzrNewError):
1133
"""Format %(format)s cannot be initialised by this version of bzr."""
1289
class PointlessMerge(BzrError):
1291
_fmt = "Nothing to merge."
1294
class UninitializableFormat(BzrError):
1296
_fmt = "Format %(format)s cannot be initialised by this version of bzr."
1135
1298
def __init__(self, format):
1136
BzrNewError.__init__(self)
1299
BzrError.__init__(self)
1137
1300
self.format = format
1140
class BadConversionTarget(BzrNewError):
1141
"""Cannot convert to format %(format)s. %(problem)s"""
1303
class BadConversionTarget(BzrError):
1305
_fmt = "Cannot convert to format %(format)s. %(problem)s"
1143
1307
def __init__(self, problem, format):
1144
BzrNewError.__init__(self)
1308
BzrError.__init__(self)
1145
1309
self.problem = problem
1146
1310
self.format = format
1149
class NoDiff(BzrNewError):
1150
"""Diff is not installed on this machine: %(msg)s"""
1313
class NoDiff(BzrError):
1315
_fmt = "Diff is not installed on this machine: %(msg)s"
1152
1317
def __init__(self, msg):
1153
BzrNewError.__init__(self, msg=msg)
1156
class NoDiff3(BzrNewError):
1157
"""Diff3 is not installed on this machine."""
1160
class ExistingLimbo(BzrNewError):
1161
"""This tree contains left-over files from a failed operation.
1162
Please examine %(limbo_dir)s to see if it contains any files you wish to
1163
keep, and delete it when you are done.
1165
def __init__(self, limbo_dir):
1166
BzrNewError.__init__(self)
1167
self.limbo_dir = limbo_dir
1170
class ImmortalLimbo(BzrNewError):
1171
"""Unable to delete transform temporary directory $(limbo_dir)s.
1172
Please examine %(limbo_dir)s to see if it contains any files you wish to
1173
keep, and delete it when you are done.
1175
def __init__(self, limbo_dir):
1176
BzrNewError.__init__(self)
1177
self.limbo_dir = limbo_dir
1180
class OutOfDateTree(BzrNewError):
1181
"""Working tree is out of date, please run 'bzr update'."""
1318
BzrError.__init__(self, msg=msg)
1321
class NoDiff3(BzrError):
1323
_fmt = "Diff3 is not installed on this machine."
1326
class ExistingLimbo(BzrError):
1328
_fmt = """This tree contains left-over files from a failed operation.
1329
Please examine %(limbo_dir)s to see if it contains any files you wish to
1330
keep, and delete it when you are done."""
1332
def __init__(self, limbo_dir):
1333
BzrError.__init__(self)
1334
self.limbo_dir = limbo_dir
1337
class ImmortalLimbo(BzrError):
1339
_fmt = """Unable to delete transform temporary directory $(limbo_dir)s.
1340
Please examine %(limbo_dir)s to see if it contains any files you wish to
1341
keep, and delete it when you are done."""
1343
def __init__(self, limbo_dir):
1344
BzrError.__init__(self)
1345
self.limbo_dir = limbo_dir
1348
class OutOfDateTree(BzrError):
1350
_fmt = "Working tree is out of date, please run 'bzr update'."
1183
1352
def __init__(self, tree):
1184
BzrNewError.__init__(self)
1353
BzrError.__init__(self)
1185
1354
self.tree = tree
1188
class MergeModifiedFormatError(BzrNewError):
1189
"""Error in merge modified format"""
1192
class ConflictFormatError(BzrNewError):
1193
"""Format error in conflict listings"""
1196
class CorruptRepository(BzrNewError):
1197
"""An error has been detected in the repository %(repo_path)s.
1357
class MergeModifiedFormatError(BzrError):
1359
_fmt = "Error in merge modified format"
1362
class ConflictFormatError(BzrError):
1364
_fmt = "Format error in conflict listings"
1367
class CorruptRepository(BzrError):
1369
_fmt = """An error has been detected in the repository %(repo_path)s.
1198
1370
Please run bzr reconcile on this repository."""
1200
1372
def __init__(self, repo):
1201
BzrNewError.__init__(self)
1373
BzrError.__init__(self)
1202
1374
self.repo_path = repo.bzrdir.root_transport.base
1205
class UpgradeRequired(BzrNewError):
1206
"""To use this feature you must upgrade your branch at %(path)s."""
1377
class UpgradeRequired(BzrError):
1379
_fmt = "To use this feature you must upgrade your branch at %(path)s."
1208
1381
def __init__(self, path):
1209
BzrNewError.__init__(self)
1382
BzrError.__init__(self)
1210
1383
self.path = path
1213
class LocalRequiresBoundBranch(BzrNewError):
1214
"""Cannot perform local-only commits on unbound branches."""
1217
class MissingProgressBarFinish(BzrNewError):
1218
"""A nested progress bar was not 'finished' correctly."""
1221
class InvalidProgressBarType(BzrNewError):
1222
"""Environment variable BZR_PROGRESS_BAR='%(bar_type)s is not a supported type
1386
class LocalRequiresBoundBranch(BzrError):
1388
_fmt = "Cannot perform local-only commits on unbound branches."
1391
class MissingProgressBarFinish(BzrError):
1393
_fmt = "A nested progress bar was not 'finished' correctly."
1396
class InvalidProgressBarType(BzrError):
1398
_fmt = """Environment variable BZR_PROGRESS_BAR='%(bar_type)s is not a supported type
1223
1399
Select one of: %(valid_types)s"""
1225
1401
def __init__(self, bar_type, valid_types):
1226
BzrNewError.__init__(self, bar_type=bar_type, valid_types=valid_types)
1229
class UnsupportedOperation(BzrNewError):
1230
"""The method %(mname)s is not supported on objects of type %(tname)s."""
1402
BzrError.__init__(self, bar_type=bar_type, valid_types=valid_types)
1405
class UnsupportedOperation(BzrError):
1407
_fmt = "The method %(mname)s is not supported on objects of type %(tname)s."
1231
1409
def __init__(self, method, method_self):
1232
1410
self.method = method
1233
1411
self.mname = method.__name__
1234
1412
self.tname = type(method_self).__name__
1237
class BinaryFile(BzrNewError):
1238
"""File is binary but should be text."""
1241
class IllegalPath(BzrNewError):
1242
"""The path %(path)s is not permitted on this platform"""
1415
class BinaryFile(BzrError):
1417
_fmt = "File is binary but should be text."
1420
class IllegalPath(BzrError):
1422
_fmt = "The path %(path)s is not permitted on this platform"
1244
1424
def __init__(self, path):
1245
BzrNewError.__init__(self)
1425
BzrError.__init__(self)
1246
1426
self.path = path
1249
class TestamentMismatch(BzrNewError):
1250
"""Testament did not match expected value.
1429
class TestamentMismatch(BzrError):
1431
_fmt = """Testament did not match expected value.
1251
1432
For revision_id {%(revision_id)s}, expected {%(expected)s}, measured
1254
1435
def __init__(self, revision_id, expected, measured):
1255
1436
self.revision_id = revision_id
1256
1437
self.expected = expected
1257
1438
self.measured = measured
1260
class NotABundle(BzrNewError):
1261
"""Not a bzr revision-bundle: %(text)r"""
1441
class NotABundle(BzrError):
1443
_fmt = "Not a bzr revision-bundle: %(text)r"
1263
1445
def __init__(self, text):
1264
BzrNewError.__init__(self)
1446
BzrError.__init__(self)
1265
1447
self.text = text
1268
class BadBundle(BzrNewError):
1269
"""Bad bzr revision-bundle: %(text)r"""
1450
class BadBundle(BzrError):
1452
_fmt = "Bad bzr revision-bundle: %(text)r"
1271
1454
def __init__(self, text):
1272
BzrNewError.__init__(self)
1455
BzrError.__init__(self)
1273
1456
self.text = text
1276
1459
class MalformedHeader(BadBundle):
1277
"""Malformed bzr revision-bundle header: %(text)r"""
1279
def __init__(self, text):
1280
BzrNewError.__init__(self)
1461
_fmt = "Malformed bzr revision-bundle header: %(text)r"
1284
1464
class MalformedPatches(BadBundle):
1285
"""Malformed patches in bzr revision-bundle: %(text)r"""
1287
def __init__(self, text):
1288
BzrNewError.__init__(self)
1466
_fmt = "Malformed patches in bzr revision-bundle: %(text)r"
1292
1469
class MalformedFooter(BadBundle):
1293
"""Malformed footer in bzr revision-bundle: %(text)r"""
1295
def __init__(self, text):
1296
BzrNewError.__init__(self)
1471
_fmt = "Malformed footer in bzr revision-bundle: %(text)r"
1300
1474
class UnsupportedEOLMarker(BadBundle):
1301
"""End of line marker was not \\n in bzr revision-bundle"""
1476
_fmt = "End of line marker was not \\n in bzr revision-bundle"
1303
1478
def __init__(self):
1304
BzrNewError.__init__(self)
1307
class IncompatibleFormat(BzrNewError):
1308
"""Bundle format %(bundle_format)s is incompatible with %(other)s"""
1479
# XXX: BadBundle's constructor assumes there's explanatory text,
1480
# but for this there is not
1481
BzrError.__init__(self)
1484
class IncompatibleBundleFormat(BzrError):
1486
_fmt = "Bundle format %(bundle_format)s is incompatible with %(other)s"
1310
1488
def __init__(self, bundle_format, other):
1311
BzrNewError.__init__(self)
1489
BzrError.__init__(self)
1312
1490
self.bundle_format = bundle_format
1313
1491
self.other = other
1316
class BadInventoryFormat(BzrNewError):
1317
"""Root class for inventory serialization errors"""
1494
class BadInventoryFormat(BzrError):
1496
_fmt = "Root class for inventory serialization errors"
1320
1499
class UnexpectedInventoryFormat(BadInventoryFormat):
1321
"""The inventory was not in the expected format:\n %(msg)s"""
1501
_fmt = "The inventory was not in the expected format:\n %(msg)s"
1323
1503
def __init__(self, msg):
1324
1504
BadInventoryFormat.__init__(self, msg=msg)
1327
class NoSmartMedium(BzrNewError):
1328
"""The transport '%(transport)s' cannot tunnel the smart protocol."""
1507
class NoSmartMedium(BzrError):
1509
_fmt = "The transport '%(transport)s' cannot tunnel the smart protocol."
1330
1511
def __init__(self, transport):
1331
BzrNewError.__init__(self)
1332
1512
self.transport = transport
1335
1515
class NoSmartServer(NotBranchError):
1336
"""No smart server available at %(url)s"""
1517
_fmt = "No smart server available at %(url)s"
1338
1519
def __init__(self, url):
1342
class UnknownSSH(BzrNewError):
1343
"""Unrecognised value for BZR_SSH environment variable: %(vendor)s"""
1523
class UnknownSSH(BzrError):
1525
_fmt = "Unrecognised value for BZR_SSH environment variable: %(vendor)s"
1345
1527
def __init__(self, vendor):
1346
BzrNewError.__init__(self)
1528
BzrError.__init__(self)
1347
1529
self.vendor = vendor
1350
class GhostRevisionUnusableHere(BzrNewError):
1351
"""Ghost revision {%(revision_id)s} cannot be used here."""
1532
class GhostRevisionUnusableHere(BzrError):
1534
_fmt = "Ghost revision {%(revision_id)s} cannot be used here."
1353
1536
def __init__(self, revision_id):
1354
BzrNewError.__init__(self)
1537
BzrError.__init__(self)
1355
1538
self.revision_id = revision_id
1358
class IllegalUseOfScopeReplacer(BzrNewError):
1359
"""ScopeReplacer object %(name)r was used incorrectly: %(msg)s%(extra)s"""
1361
is_user_error = False
1541
class IllegalUseOfScopeReplacer(BzrError):
1543
_fmt = "ScopeReplacer object %(name)r was used incorrectly: %(msg)s%(extra)s"
1545
internal_error = True
1363
1547
def __init__(self, name, msg, extra=None):
1364
BzrNewError.__init__(self)
1548
BzrError.__init__(self)
1365
1549
self.name = name