85
39
# constructed to make sure it will succeed. But that says nothing about
86
40
# 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.
42
# TODO: selftest assertRaises should probably also check that every error
43
# raised can be formatted as a string successfully, and without giving
96
47
class BzrError(StandardError):
49
Base class for errors raised by bzrlib.
51
:cvar internal_error: if true (or absent) this was probably caused by a
52
bzr bug and should be displayed with a traceback; if False this was
53
probably a user or environment error and they don't need the gory details.
54
(That can be overridden by -Derror on the command line.)
56
:cvar _fmt: Format string to display the error; this is expanded
57
by the instance's dict.
60
internal_error = False
62
def __init__(self, msg=None, **kwds):
63
"""Construct a new BzrError.
65
There are two alternative forms for constructing these objects.
66
Either a preformatted string may be passed, or a set of named
67
arguments can be given. The first is for generic "user" errors which
68
are not intended to be caught and so do not need a specific subclass.
69
The second case is for use with subclasses that provide a _fmt format
70
string to print the arguments.
72
Keyword arguments are taken as parameters to the error, which can
73
be inserted into the format string template. It's recommended
74
that subclasses override the __init__ method to require specific
77
:param msg: If given, this is the literal complete text for the error,
78
not subject to expansion.
80
StandardError.__init__(self)
82
# I was going to deprecate this, but it actually turns out to be
83
# quite handy - mbp 20061103.
84
self._preformatted_string = msg
86
self._preformatted_string = None
87
for key, value in kwds.items():
88
setattr(self, key, value)
100
90
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`
91
s = getattr(self, '_preformatted_string', None)
93
# contains a preformatted message; must be cast to plain str
96
fmt = self._get_format_string()
98
s = fmt % self.__dict__
99
# __str__() should always return a 'str' object
100
# never a 'unicode' object.
101
if isinstance(s, unicode):
102
return s.encode('utf8')
104
except (AttributeError, TypeError, NameError, ValueError, KeyError), e:
105
return 'Unprintable exception %s: dict=%r, fmt=%r, error=%r' \
106
% (self.__class__.__name__,
108
getattr(self, '_fmt', None),
111
def _get_format_string(self):
112
"""Return format string for this exception or None"""
113
fmt = getattr(self, '_fmt', None)
116
fmt = getattr(self, '__doc__', None)
118
symbol_versioning.warn("%s uses its docstring as a format, "
119
"it should use _fmt instead" % self.__class__.__name__,
122
return 'Unprintable exception %s: dict=%r, fmt=%r' \
123
% (self.__class__.__name__,
125
getattr(self, '_fmt', None),
118
129
class BzrNewError(BzrError):
130
"""Deprecated error base class."""
120
131
# base classes should override the docstring with their human-
121
132
# readable explanation
123
134
def __init__(self, *args, **kwds):
124
# XXX: Use the underlying BzrError to always generate the args attribute
125
# if it doesn't exist. We can't use super here, because exceptions are
126
# old-style classes in python2.4 (but new in 2.5). --bmc, 20060426
135
# XXX: Use the underlying BzrError to always generate the args
136
# attribute if it doesn't exist. We can't use super here, because
137
# exceptions are old-style classes in python2.4 (but new in 2.5).
139
symbol_versioning.warn('BzrNewError was deprecated in bzr 0.13; '
140
'please convert %s to use BzrError instead'
141
% self.__class__.__name__,
127
144
BzrError.__init__(self, *args)
128
145
for key, value in kwds.items():
129
146
setattr(self, key, value)
137
154
return s.encode('utf8')
139
156
except (TypeError, NameError, ValueError, KeyError), e:
140
return 'Unprintable exception %s(%r): %s' \
157
return 'Unprintable exception %s(%r): %r' \
141
158
% (self.__class__.__name__,
142
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
162
class AlreadyBuilding(BzrError):
164
_fmt = "The tree builder is already building a tree."
167
class BzrCheckError(BzrError):
169
_fmt = "Internal check failed: %(message)s"
171
internal_error = True
154
173
def __init__(self, message):
155
BzrNewError.__init__(self)
174
BzrError.__init__(self)
156
175
self.message = message
159
class InvalidEntryName(BzrNewError):
160
"""Invalid entry name: %(name)s"""
162
is_user_error = False
178
class DisabledMethod(BzrError):
180
_fmt = "The smart server method '%(class_name)s' is disabled."
182
internal_error = True
184
def __init__(self, class_name):
185
BzrError.__init__(self)
186
self.class_name = class_name
189
class InvalidEntryName(BzrError):
191
_fmt = "Invalid entry name: %(name)s"
193
internal_error = True
164
195
def __init__(self, name):
165
BzrNewError.__init__(self)
196
BzrError.__init__(self)
169
class InvalidRevisionNumber(BzrNewError):
170
"""Invalid revision number %(revno)d"""
200
class InvalidRevisionNumber(BzrError):
202
_fmt = "Invalid revision number %(revno)s"
171
204
def __init__(self, revno):
172
BzrNewError.__init__(self)
205
BzrError.__init__(self)
173
206
self.revno = revno
176
class InvalidRevisionId(BzrNewError):
177
"""Invalid revision-id {%(revision_id)s} in %(branch)s"""
209
class InvalidRevisionId(BzrError):
211
_fmt = "Invalid revision-id {%(revision_id)s} in %(branch)s"
179
213
def __init__(self, revision_id, branch):
180
214
# branch can be any string or object with __str__ defined
181
BzrNewError.__init__(self)
215
BzrError.__init__(self)
182
216
self.revision_id = revision_id
183
217
self.branch = branch
186
class NoSuchId(BzrNewError):
187
"""The file id %(file_id)s is not present in the tree %(tree)s."""
219
class ReservedId(BzrError):
221
_fmt = "Reserved revision-id {%(revision_id)s}"
223
def __init__(self, revision_id):
224
self.revision_id = revision_id
227
class NoHelpTopic(BzrError):
229
_fmt = ("No help could be found for '%(topic)s'. "
230
"Please use 'bzr help topics' to obtain a list of topics.")
232
def __init__(self, topic):
236
class NoSuchId(BzrError):
238
_fmt = "The file id %(file_id)s is not present in the tree %(tree)s."
189
240
def __init__(self, tree, file_id):
190
BzrNewError.__init__(self)
241
BzrError.__init__(self)
191
242
self.file_id = file_id
195
class NoWorkingTree(BzrNewError):
196
"""No WorkingTree exists for %(base)s."""
246
class InventoryModified(BzrError):
248
_fmt = ("The current inventory for the tree %(tree)r has been modified,"
249
" so a clean inventory cannot be read without data loss.")
251
internal_error = True
253
def __init__(self, tree):
257
class NoWorkingTree(BzrError):
259
_fmt = "No WorkingTree exists for %(base)s."
198
261
def __init__(self, base):
199
BzrNewError.__init__(self)
262
BzrError.__init__(self)
203
class NotBuilding(BzrNewError):
204
"""Not currently building a tree."""
207
class NotLocalUrl(BzrNewError):
208
"""%(url)s is not a local path."""
266
class NotBuilding(BzrError):
268
_fmt = "Not currently building a tree."
271
class NotLocalUrl(BzrError):
273
_fmt = "%(url)s is not a local path."
210
275
def __init__(self, url):
211
BzrNewError.__init__(self)
215
class BzrCommandError(BzrNewError):
279
class WorkingTreeAlreadyPopulated(BzrError):
281
_fmt = """Working tree already populated in %(base)s"""
283
internal_error = True
285
def __init__(self, base):
288
class BzrCommandError(BzrError):
216
289
"""Error from user command"""
291
internal_error = False
220
293
# Error from malformed user command; please avoid raising this as a
221
294
# generic exception not caused by user input.
359
525
class InaccessibleParent(PathError):
360
"""Parent not accessible given base %(base)s and relative path %(path)s"""
527
_fmt = ("Parent not accessible given base %(base)s and"
528
" relative path %(path)s")
362
530
def __init__(self, path, base):
363
531
PathError.__init__(self, path)
367
class NoRepositoryPresent(BzrNewError):
368
"""No repository present: %(path)r"""
535
class NoRepositoryPresent(BzrError):
537
_fmt = "No repository present: %(path)r"
369
538
def __init__(self, bzrdir):
370
BzrNewError.__init__(self)
539
BzrError.__init__(self)
371
540
self.path = bzrdir.transport.clone('..').base
374
class FileInWrongBranch(BzrNewError):
375
"""File %(path)s in not in branch %(branch_base)s."""
543
class FileInWrongBranch(BzrError):
545
_fmt = "File %(path)s in not in branch %(branch_base)s."
377
547
def __init__(self, branch, path):
378
BzrNewError.__init__(self)
548
BzrError.__init__(self)
379
549
self.branch = branch
380
550
self.branch_base = branch.base
384
class UnsupportedFormatError(BzrNewError):
385
"""Unsupported branch format: %(format)s"""
388
class UnknownFormatError(BzrNewError):
389
"""Unknown branch format: %(format)r"""
392
class IncompatibleFormat(BzrNewError):
393
"""Format %(format)s is not compatible with .bzr version %(bzrdir)s."""
554
class UnsupportedFormatError(BzrError):
556
_fmt = "Unsupported branch format: %(format)s\nPlease run 'bzr upgrade'"
559
class UnknownFormatError(BzrError):
561
_fmt = "Unknown branch format: %(format)r"
564
class IncompatibleFormat(BzrError):
566
_fmt = "Format %(format)s is not compatible with .bzr version %(bzrdir)s."
395
568
def __init__(self, format, bzrdir_format):
396
BzrNewError.__init__(self)
569
BzrError.__init__(self)
397
570
self.format = format
398
571
self.bzrdir = bzrdir_format
401
class IncompatibleRevision(BzrNewError):
402
"""Revision is not compatible with %(repo_format)s"""
574
class IncompatibleRepositories(BzrError):
576
_fmt = "Repository %(target)s is not compatible with repository"\
579
def __init__(self, source, target):
580
BzrError.__init__(self, target=target, source=source)
583
class IncompatibleRevision(BzrError):
585
_fmt = "Revision is not compatible with %(repo_format)s"
404
587
def __init__(self, repo_format):
405
BzrNewError.__init__(self)
588
BzrError.__init__(self)
406
589
self.repo_format = repo_format
409
class NotVersionedError(BzrNewError):
410
"""%(path)s is not versioned"""
411
def __init__(self, path):
412
BzrNewError.__init__(self)
416
class PathsNotVersionedError(BzrNewError):
417
# used when reporting several paths are not versioned
418
"""Path(s) are not versioned: %(paths_as_string)s"""
592
class AlreadyVersionedError(BzrError):
593
"""Used when a path is expected not to be versioned, but it is."""
595
_fmt = "%(context_info)s%(path)s is already versioned"
597
def __init__(self, path, context_info=None):
598
"""Construct a new AlreadyVersionedError.
600
:param path: This is the path which is versioned,
601
which should be in a user friendly form.
602
:param context_info: If given, this is information about the context,
603
which could explain why this is expected to not be versioned.
605
BzrError.__init__(self)
607
if context_info is None:
608
self.context_info = ''
610
self.context_info = context_info + ". "
613
class NotVersionedError(BzrError):
614
"""Used when a path is expected to be versioned, but it is not."""
616
_fmt = "%(context_info)s%(path)s is not versioned"
618
def __init__(self, path, context_info=None):
619
"""Construct a new NotVersionedError.
621
:param path: This is the path which is not versioned,
622
which should be in a user friendly form.
623
:param context_info: If given, this is information about the context,
624
which could explain why this is expected to be versioned.
626
BzrError.__init__(self)
628
if context_info is None:
629
self.context_info = ''
631
self.context_info = context_info + ". "
634
class PathsNotVersionedError(BzrError):
635
"""Used when reporting several paths which are not versioned"""
637
_fmt = "Path(s) are not versioned: %(paths_as_string)s"
420
639
def __init__(self, paths):
421
640
from bzrlib.osutils import quotefn
422
BzrNewError.__init__(self)
641
BzrError.__init__(self)
423
642
self.paths = paths
424
643
self.paths_as_string = ' '.join([quotefn(p) for p in paths])
427
class PathsDoNotExist(BzrNewError):
428
"""Path(s) do not exist: %(paths_as_string)s"""
646
class PathsDoNotExist(BzrError):
648
_fmt = "Path(s) do not exist: %(paths_as_string)s%(extra)s"
430
650
# used when reporting that paths are neither versioned nor in the working
433
def __init__(self, paths):
653
def __init__(self, paths, extra=None):
434
654
# circular import
435
655
from bzrlib.osutils import quotefn
436
BzrNewError.__init__(self)
656
BzrError.__init__(self)
437
657
self.paths = paths
438
658
self.paths_as_string = ' '.join([quotefn(p) for p in paths])
441
class BadFileKindError(BzrNewError):
442
"""Cannot operate on %(filename)s of unsupported kind %(kind)s"""
445
class ForbiddenControlFileError(BzrNewError):
446
"""Cannot operate on %(filename)s because it is a control file"""
449
class LockError(BzrNewError):
450
"""Lock error: %(message)s"""
660
self.extra = ': ' + str(extra)
665
class BadFileKindError(BzrError):
667
_fmt = 'Cannot operate on "%(filename)s" of unsupported kind "%(kind)s"'
669
def __init__(self, filename, kind):
670
BzrError.__init__(self, filename=filename, kind=kind)
673
class ForbiddenControlFileError(BzrError):
675
_fmt = "Cannot operate on %(filename)s because it is a control file"
678
class LockError(BzrError):
680
_fmt = "Lock error: %(msg)s"
682
internal_error = True
451
684
# All exceptions from the lock/unlock functions should be from
452
685
# this exception class. They will be translated as necessary. The
453
686
# original exception is available as e.original_error
455
688
# New code should prefer to raise specific subclasses
456
689
def __init__(self, message):
457
self.message = message
690
# Python 2.5 uses a slot for StandardError.message,
691
# so use a different variable name
692
# so it is exposed in self.__dict__
696
class LockActive(LockError):
698
_fmt = "The lock for '%(lock_description)s' is in use and cannot be broken."
700
internal_error = False
702
def __init__(self, lock_description):
703
self.lock_description = lock_description
460
706
class CommitNotPossible(LockError):
461
"""A commit was attempted but we do not have a write lock open."""
708
_fmt = "A commit was attempted but we do not have a write lock open."
462
710
def __init__(self):
466
714
class AlreadyCommitted(LockError):
467
"""A rollback was requested, but is not able to be accomplished."""
716
_fmt = "A rollback was requested, but is not able to be accomplished."
468
718
def __init__(self):
472
722
class ReadOnlyError(LockError):
473
"""A write attempt was made in a read only transaction on %(obj)s"""
724
_fmt = "A write attempt was made in a read only transaction on %(obj)s"
726
# TODO: There should also be an error indicating that you need a write
727
# lock and don't have any lock at all... mbp 20070226
474
729
def __init__(self, obj):
478
class OutSideTransaction(BzrNewError):
479
"""A transaction related operation was attempted after the transaction finished."""
733
class ReadOnlyLockError(LockError):
735
_fmt = "Cannot acquire write lock on %(fname)s. %(msg)s"
737
def __init__(self, fname, msg):
738
LockError.__init__(self, '')
743
class OutSideTransaction(BzrError):
745
_fmt = ("A transaction related operation was attempted after"
746
" the transaction finished.")
482
749
class ObjectNotLocked(LockError):
483
"""%(obj)r is not locked"""
485
is_user_error = False
751
_fmt = "%(obj)r is not locked"
487
753
# this can indicate that any particular object is not locked; see also
488
754
# LockNotHeld which means that a particular *lock* object is not held by
527
812
class LockNotHeld(LockError):
528
"""Lock not held: %(lock)s"""
814
_fmt = "Lock not held: %(lock)s"
816
internal_error = False
529
818
def __init__(self, lock):
533
class PointlessCommit(BzrNewError):
534
"""No changes to commit"""
537
class UpgradeReadonly(BzrNewError):
538
"""Upgrade URL cannot work with readonly URL's."""
541
class UpToDateFormat(BzrNewError):
542
"""The branch format %(format)s is already at the most recent format."""
822
class TokenLockingNotSupported(LockError):
824
_fmt = "The object %(obj)s does not support token specifying a token when locking."
826
internal_error = True
828
def __init__(self, obj):
832
class TokenMismatch(LockBroken):
834
_fmt = "The lock token %(given_token)r does not match lock token %(lock_token)r."
836
internal_error = True
838
def __init__(self, given_token, lock_token):
839
self.given_token = given_token
840
self.lock_token = lock_token
843
class PointlessCommit(BzrError):
845
_fmt = "No changes to commit"
848
class CannotCommitSelectedFileMerge(BzrError):
850
_fmt = 'Selected-file commit of merges is not supported yet:'\
851
' files %(files_str)s'
853
def __init__(self, files):
854
files_str = ', '.join(files)
855
BzrError.__init__(self, files=files, files_str=files_str)
858
class UpgradeReadonly(BzrError):
860
_fmt = "Upgrade URL cannot work with readonly URLs."
863
class UpToDateFormat(BzrError):
865
_fmt = "The branch format %(format)s is already at the most recent format."
544
867
def __init__(self, format):
545
BzrNewError.__init__(self)
868
BzrError.__init__(self)
546
869
self.format = format
549
872
class StrictCommitFailed(Exception):
550
"""Commit refused because there are unknowns in the tree."""
553
class NoSuchRevision(BzrNewError):
554
"""Branch %(branch)s has no revision %(revision)s"""
556
is_user_error = False
874
_fmt = "Commit refused because there are unknowns in the tree."
877
class NoSuchRevision(BzrError):
879
_fmt = "Branch %(branch)s has no revision %(revision)s"
881
internal_error = True
558
883
def __init__(self, branch, revision):
559
BzrNewError.__init__(self, branch=branch, revision=revision)
562
class NoSuchRevisionSpec(BzrNewError):
563
"""No namespace registered for string: %(spec)r"""
884
BzrError.__init__(self, branch=branch, revision=revision)
887
class NotLeftParentDescendant(BzrError):
889
_fmt = ("Revision %(old_revision)s is not the left parent of"
890
" %(new_revision)s, but branch %(branch_location)s expects this")
892
internal_error = True
894
def __init__(self, branch, old_revision, new_revision):
895
BzrError.__init__(self, branch_location=branch.base,
896
old_revision=old_revision,
897
new_revision=new_revision)
900
class NoSuchRevisionSpec(BzrError):
902
_fmt = "No namespace registered for string: %(spec)r"
565
904
def __init__(self, spec):
566
BzrNewError.__init__(self, spec=spec)
569
class InvalidRevisionSpec(BzrNewError):
570
"""Requested revision: '%(spec)s' does not exist in branch:
571
%(branch)s%(extra)s"""
905
BzrError.__init__(self, spec=spec)
908
class NoSuchRevisionInTree(NoSuchRevision):
909
"""When using Tree.revision_tree, and the revision is not accessible."""
911
_fmt = "The revision id %(revision_id)s is not present in the tree %(tree)s."
913
def __init__(self, tree, revision_id):
914
BzrError.__init__(self)
916
self.revision_id = revision_id
919
class InvalidRevisionSpec(BzrError):
921
_fmt = ("Requested revision: %(spec)r does not exist in branch:"
922
" %(branch)s%(extra)s")
573
924
def __init__(self, spec, branch, extra=None):
574
BzrNewError.__init__(self, branch=branch, spec=spec)
925
BzrError.__init__(self, branch=branch, spec=spec)
576
927
self.extra = '\n' + str(extra)
613
988
class NoCommonRoot(BzrError):
990
_fmt = ("Revisions are not derived from the same root: "
991
"%(revision_a)s %(revision_b)s.")
614
993
def __init__(self, revision_a, revision_b):
615
msg = "Revisions are not derived from the same root: %s %s." \
616
% (revision_a, revision_b)
617
BzrError.__init__(self, msg)
994
BzrError.__init__(self, revision_a=revision_a, revision_b=revision_b)
621
997
class NotAncestor(BzrError):
999
_fmt = "Revision %(rev_id)s is not an ancestor of %(not_ancestor_id)s"
622
1001
def __init__(self, rev_id, not_ancestor_id):
623
msg = "Revision %s is not an ancestor of %s" % (not_ancestor_id,
625
BzrError.__init__(self, msg)
627
self.not_ancestor_id = not_ancestor_id
1002
BzrError.__init__(self, rev_id=rev_id,
1003
not_ancestor_id=not_ancestor_id)
630
1006
class InstallFailed(BzrError):
631
1008
def __init__(self, revisions):
632
msg = "Could not install revisions:\n%s" % " ,".join(revisions)
1009
revision_str = ", ".join(str(r) for r in revisions)
1010
msg = "Could not install revisions:\n%s" % revision_str
633
1011
BzrError.__init__(self, msg)
634
1012
self.revisions = revisions
637
1015
class AmbiguousBase(BzrError):
638
1017
def __init__(self, bases):
639
1018
warn("BzrError AmbiguousBase has been deprecated as of bzrlib 0.8.",
640
1019
DeprecationWarning)
641
msg = "The correct base is unclear, because %s are all equally close" %\
1020
msg = ("The correct base is unclear, because %s are all equally close"
643
1022
BzrError.__init__(self, msg)
644
1023
self.bases = bases
647
class NoCommits(BzrNewError):
648
"""Branch %(branch)s has no commits."""
1026
class NoCommits(BzrError):
1028
_fmt = "Branch %(branch)s has no commits."
650
1030
def __init__(self, branch):
651
BzrNewError.__init__(self, branch=branch)
1031
BzrError.__init__(self, branch=branch)
654
1034
class UnlistableStore(BzrError):
655
1036
def __init__(self, store):
656
1037
BzrError.__init__(self, "Store %s is not listable" % store)
660
1041
class UnlistableBranch(BzrError):
661
1043
def __init__(self, br):
662
1044
BzrError.__init__(self, "Stores for branch %s are not listable" % br)
665
class BoundBranchOutOfDate(BzrNewError):
666
"""Bound branch %(branch)s is out of date with master branch %(master)s."""
1047
class BoundBranchOutOfDate(BzrError):
1049
_fmt = ("Bound branch %(branch)s is out of date"
1050
" with master branch %(master)s.")
667
1052
def __init__(self, branch, master):
668
BzrNewError.__init__(self)
1053
BzrError.__init__(self)
669
1054
self.branch = branch
670
1055
self.master = master
673
class CommitToDoubleBoundBranch(BzrNewError):
674
"""Cannot commit to branch %(branch)s. It is bound to %(master)s, which is bound to %(remote)s."""
1058
class CommitToDoubleBoundBranch(BzrError):
1060
_fmt = ("Cannot commit to branch %(branch)s."
1061
" It is bound to %(master)s, which is bound to %(remote)s.")
675
1063
def __init__(self, branch, master, remote):
676
BzrNewError.__init__(self)
1064
BzrError.__init__(self)
677
1065
self.branch = branch
678
1066
self.master = master
679
1067
self.remote = remote
682
class OverwriteBoundBranch(BzrNewError):
683
"""Cannot pull --overwrite to a branch which is bound %(branch)s"""
1070
class OverwriteBoundBranch(BzrError):
1072
_fmt = "Cannot pull --overwrite to a branch which is bound %(branch)s"
684
1074
def __init__(self, branch):
685
BzrNewError.__init__(self)
1075
BzrError.__init__(self)
686
1076
self.branch = branch
689
class BoundBranchConnectionFailure(BzrNewError):
690
"""Unable to connect to target of bound branch %(branch)s => %(target)s: %(error)s"""
1079
class BoundBranchConnectionFailure(BzrError):
1081
_fmt = ("Unable to connect to target of bound branch %(branch)s"
1082
" => %(target)s: %(error)s")
691
1084
def __init__(self, branch, target, error):
692
BzrNewError.__init__(self)
1085
BzrError.__init__(self)
693
1086
self.branch = branch
694
1087
self.target = target
695
1088
self.error = error
698
class WeaveError(BzrNewError):
699
"""Error in processing weave: %(message)s"""
1091
class WeaveError(BzrError):
1093
_fmt = "Error in processing weave: %(message)s"
701
1095
def __init__(self, message=None):
702
BzrNewError.__init__(self)
1096
BzrError.__init__(self)
703
1097
self.message = message
706
1100
class WeaveRevisionAlreadyPresent(WeaveError):
707
"""Revision {%(revision_id)s} already present in %(weave)s"""
1102
_fmt = "Revision {%(revision_id)s} already present in %(weave)s"
708
1104
def __init__(self, revision_id, weave):
710
1106
WeaveError.__init__(self)
890
1414
BzrError.__init__(self, message)
1417
class NoEmailInUsername(BzrError):
1419
_fmt = "%(username)r does not seem to contain a reasonable email address"
1421
def __init__(self, username):
1422
BzrError.__init__(self)
1423
self.username = username
893
1426
class SigningFailed(BzrError):
1428
_fmt = "Failed to gpg sign data with command %(command_line)r"
894
1430
def __init__(self, command_line):
895
BzrError.__init__(self, "Failed to gpg sign data with command '%s'"
1431
BzrError.__init__(self, command_line=command_line)
899
1434
class WorkingTreeNotRevision(BzrError):
1436
_fmt = ("The working tree for %(basedir)s has changed since"
1437
" the last commit, but weave merge requires that it be"
900
1440
def __init__(self, tree):
901
BzrError.__init__(self, "The working tree for %s has changed since"
902
" last commit, but weave merge requires that it be"
903
" unchanged." % tree.basedir)
906
class CantReprocessAndShowBase(BzrNewError):
907
"""Can't reprocess and show base.
908
Reprocessing obscures relationship of conflicting lines to base."""
911
class GraphCycleError(BzrNewError):
912
"""Cycle in graph %(graph)r"""
1441
BzrError.__init__(self, basedir=tree.basedir)
1444
class CantReprocessAndShowBase(BzrError):
1446
_fmt = ("Can't reprocess and show base, because reprocessing obscures "
1447
"the relationship of conflicting lines to the base")
1450
class GraphCycleError(BzrError):
1452
_fmt = "Cycle in graph %(graph)r"
913
1454
def __init__(self, graph):
914
BzrNewError.__init__(self)
1455
BzrError.__init__(self)
915
1456
self.graph = graph
918
class NotConflicted(BzrNewError):
919
"""File %(filename)s is not conflicted."""
1459
class WritingCompleted(BzrError):
1461
_fmt = ("The MediumRequest '%(request)s' has already had finish_writing "
1462
"called upon it - accept bytes may not be called anymore.")
1464
internal_error = True
1466
def __init__(self, request):
1467
self.request = request
1470
class WritingNotComplete(BzrError):
1472
_fmt = ("The MediumRequest '%(request)s' has not has finish_writing "
1473
"called upon it - until the write phase is complete no "
1474
"data may be read.")
1476
internal_error = True
1478
def __init__(self, request):
1479
self.request = request
1482
class NotConflicted(BzrError):
1484
_fmt = "File %(filename)s is not conflicted."
921
1486
def __init__(self, filename):
922
BzrNewError.__init__(self)
1487
BzrError.__init__(self)
923
1488
self.filename = filename
1491
class MediumNotConnected(BzrError):
1493
_fmt = """The medium '%(medium)s' is not connected."""
1495
internal_error = True
1497
def __init__(self, medium):
1498
self.medium = medium
926
1501
class MustUseDecorated(Exception):
927
"""A decorating function has requested its original command be used.
929
This should never escape bzr, so does not need to be printable.
933
class NoBundleFound(BzrNewError):
934
"""No bundle was found in %(filename)s"""
1503
_fmt = "A decorating function has requested its original command be used."
1506
class NoBundleFound(BzrError):
1508
_fmt = "No bundle was found in %(filename)s"
935
1510
def __init__(self, filename):
936
BzrNewError.__init__(self)
1511
BzrError.__init__(self)
937
1512
self.filename = filename
940
class BundleNotSupported(BzrNewError):
941
"""Unable to handle bundle version %(version)s: %(msg)s"""
1515
class BundleNotSupported(BzrError):
1517
_fmt = "Unable to handle bundle version %(version)s: %(msg)s"
942
1519
def __init__(self, version, msg):
943
BzrNewError.__init__(self)
1520
BzrError.__init__(self)
944
1521
self.version = version
948
class MissingText(BzrNewError):
949
"""Branch %(base)s is missing revision %(text_revision)s of %(file_id)s"""
1525
class MissingText(BzrError):
1527
_fmt = ("Branch %(base)s is missing revision"
1528
" %(text_revision)s of %(file_id)s")
951
1530
def __init__(self, branch, text_revision, file_id):
952
BzrNewError.__init__(self)
1531
BzrError.__init__(self)
953
1532
self.branch = branch
954
1533
self.base = branch.base
955
1534
self.text_revision = text_revision
956
1535
self.file_id = file_id
959
class DuplicateKey(BzrNewError):
960
"""Key %(key)s is already present in map"""
963
class MalformedTransform(BzrNewError):
964
"""Tree transform is malformed %(conflicts)r"""
967
class BzrBadParameter(BzrNewError):
968
"""A bad parameter : %(param)s is not usable.
970
This exception should never be thrown, but it is a base class for all
971
parameter-to-function errors.
1538
class DuplicateFileId(BzrError):
1540
_fmt = "File id {%(file_id)s} already exists in inventory as %(entry)s"
1542
def __init__(self, file_id, entry):
1543
BzrError.__init__(self)
1544
self.file_id = file_id
1548
class DuplicateKey(BzrError):
1550
_fmt = "Key %(key)s is already present in map"
1553
class DuplicateHelpPrefix(BzrError):
1555
_fmt = "The prefix %(prefix)s is in the help search path twice."
1557
def __init__(self, prefix):
1558
self.prefix = prefix
1561
class MalformedTransform(BzrError):
1563
_fmt = "Tree transform is malformed %(conflicts)r"
1566
class NoFinalPath(BzrError):
1568
_fmt = ("No final name for trans_id %(trans_id)r\n"
1569
"file-id: %(file_id)r\n"
1570
"root trans-id: %(root_trans_id)r\n")
1572
def __init__(self, trans_id, transform):
1573
self.trans_id = trans_id
1574
self.file_id = transform.final_file_id(trans_id)
1575
self.root_trans_id = transform.root
1578
class BzrBadParameter(BzrError):
1580
_fmt = "Bad parameter: %(param)r"
1582
# This exception should never be thrown, but it is a base class for all
1583
# parameter-to-function errors.
973
1585
def __init__(self, param):
974
BzrNewError.__init__(self)
1586
BzrError.__init__(self)
975
1587
self.param = param
978
1590
class BzrBadParameterNotUnicode(BzrBadParameter):
979
"""Parameter %(param)s is neither unicode nor utf8."""
982
class ReusingTransform(BzrNewError):
983
"""Attempt to reuse a transform that has already been applied."""
986
class CantMoveRoot(BzrNewError):
987
"""Moving the root directory is not supported at this time"""
1592
_fmt = "Parameter %(param)s is neither unicode nor utf8."
1595
class ReusingTransform(BzrError):
1597
_fmt = "Attempt to reuse a transform that has already been applied."
1600
class CantMoveRoot(BzrError):
1602
_fmt = "Moving the root directory is not supported at this time"
1605
class BzrMoveFailedError(BzrError):
1607
_fmt = "Could not move %(from_path)s%(operator)s %(to_path)s%(extra)s"
1609
def __init__(self, from_path='', to_path='', extra=None):
1610
BzrError.__init__(self)
1612
self.extra = ': ' + str(extra)
1616
has_from = len(from_path) > 0
1617
has_to = len(to_path) > 0
1619
self.from_path = osutils.splitpath(from_path)[-1]
1624
self.to_path = osutils.splitpath(to_path)[-1]
1629
if has_from and has_to:
1630
self.operator = " =>"
1632
self.from_path = "from " + from_path
1634
self.operator = "to"
1636
self.operator = "file"
1639
class BzrRenameFailedError(BzrMoveFailedError):
1641
_fmt = "Could not rename %(from_path)s%(operator)s %(to_path)s%(extra)s"
1643
def __init__(self, from_path, to_path, extra=None):
1644
BzrMoveFailedError.__init__(self, from_path, to_path, extra)
1646
class BzrRemoveChangedFilesError(BzrError):
1647
"""Used when user is trying to remove changed files."""
1649
_fmt = ("Can't remove changed or unknown files:\n%(changes_as_text)s"
1650
"Use --keep to not delete them, or --force to delete them regardless.")
1652
def __init__(self, tree_delta):
1653
BzrError.__init__(self)
1654
self.changes_as_text = tree_delta.get_changes_as_text()
1655
#self.paths_as_string = '\n'.join(changed_files)
1656
#self.paths_as_string = '\n'.join([quotefn(p) for p in changed_files])
990
1659
class BzrBadParameterNotString(BzrBadParameter):
991
"""Parameter %(param)s is not a string or unicode string."""
1661
_fmt = "Parameter %(param)s is not a string or unicode string."
994
1664
class BzrBadParameterMissing(BzrBadParameter):
995
"""Parameter $(param)s is required but not present."""
1666
_fmt = "Parameter $(param)s is required but not present."
998
1669
class BzrBadParameterUnicode(BzrBadParameter):
999
"""Parameter %(param)s is unicode but only byte-strings are permitted."""
1671
_fmt = ("Parameter %(param)s is unicode but"
1672
" only byte-strings are permitted.")
1002
1675
class BzrBadParameterContainsNewline(BzrBadParameter):
1003
"""Parameter %(param)s contains a newline."""
1006
class DependencyNotPresent(BzrNewError):
1007
"""Unable to import library "%(library)s": %(error)s"""
1677
_fmt = "Parameter %(param)s contains a newline."
1680
class DependencyNotPresent(BzrError):
1682
_fmt = 'Unable to import library "%(library)s": %(error)s'
1009
1684
def __init__(self, library, error):
1010
BzrNewError.__init__(self, library=library, error=error)
1685
BzrError.__init__(self, library=library, error=error)
1013
1688
class ParamikoNotPresent(DependencyNotPresent):
1014
"""Unable to import paramiko (required for sftp support): %(error)s"""
1690
_fmt = "Unable to import paramiko (required for sftp support): %(error)s"
1016
1692
def __init__(self, error):
1017
1693
DependencyNotPresent.__init__(self, 'paramiko', error)
1020
class PointlessMerge(BzrNewError):
1021
"""Nothing to merge."""
1024
class UninitializableFormat(BzrNewError):
1025
"""Format %(format)s cannot be initialised by this version of bzr."""
1696
class PointlessMerge(BzrError):
1698
_fmt = "Nothing to merge."
1701
class UninitializableFormat(BzrError):
1703
_fmt = "Format %(format)s cannot be initialised by this version of bzr."
1027
1705
def __init__(self, format):
1028
BzrNewError.__init__(self)
1706
BzrError.__init__(self)
1029
1707
self.format = format
1032
class BadConversionTarget(BzrNewError):
1033
"""Cannot convert to format %(format)s. %(problem)s"""
1710
class BadConversionTarget(BzrError):
1712
_fmt = "Cannot convert to format %(format)s. %(problem)s"
1035
1714
def __init__(self, problem, format):
1036
BzrNewError.__init__(self)
1715
BzrError.__init__(self)
1037
1716
self.problem = problem
1038
1717
self.format = format
1041
class NoDiff(BzrNewError):
1042
"""Diff is not installed on this machine: %(msg)s"""
1720
class NoDiff(BzrError):
1722
_fmt = "Diff is not installed on this machine: %(msg)s"
1044
1724
def __init__(self, msg):
1045
BzrNewError.__init__(self, msg=msg)
1048
class NoDiff3(BzrNewError):
1049
"""Diff3 is not installed on this machine."""
1052
class ExistingLimbo(BzrNewError):
1053
"""This tree contains left-over files from a failed operation.
1054
Please examine %(limbo_dir)s to see if it contains any files you wish to
1055
keep, and delete it when you are done.
1057
def __init__(self, limbo_dir):
1058
BzrNewError.__init__(self)
1059
self.limbo_dir = limbo_dir
1062
class ImmortalLimbo(BzrNewError):
1063
"""Unable to delete transform temporary directory $(limbo_dir)s.
1064
Please examine %(limbo_dir)s to see if it contains any files you wish to
1065
keep, and delete it when you are done.
1067
def __init__(self, limbo_dir):
1068
BzrNewError.__init__(self)
1069
self.limbo_dir = limbo_dir
1072
class OutOfDateTree(BzrNewError):
1073
"""Working tree is out of date, please run 'bzr update'."""
1725
BzrError.__init__(self, msg=msg)
1728
class NoDiff3(BzrError):
1730
_fmt = "Diff3 is not installed on this machine."
1733
class ExistingLimbo(BzrError):
1735
_fmt = """This tree contains left-over files from a failed operation.
1736
Please examine %(limbo_dir)s to see if it contains any files you wish to
1737
keep, and delete it when you are done."""
1739
def __init__(self, limbo_dir):
1740
BzrError.__init__(self)
1741
self.limbo_dir = limbo_dir
1744
class ImmortalLimbo(BzrError):
1746
_fmt = """Unable to delete transform temporary directory $(limbo_dir)s.
1747
Please examine %(limbo_dir)s to see if it contains any files you wish to
1748
keep, and delete it when you are done."""
1750
def __init__(self, limbo_dir):
1751
BzrError.__init__(self)
1752
self.limbo_dir = limbo_dir
1755
class OutOfDateTree(BzrError):
1757
_fmt = "Working tree is out of date, please run 'bzr update'."
1075
1759
def __init__(self, tree):
1076
BzrNewError.__init__(self)
1760
BzrError.__init__(self)
1077
1761
self.tree = tree
1080
class MergeModifiedFormatError(BzrNewError):
1081
"""Error in merge modified format"""
1084
class ConflictFormatError(BzrNewError):
1085
"""Format error in conflict listings"""
1088
class CorruptRepository(BzrNewError):
1089
"""An error has been detected in the repository %(repo_path)s.
1090
Please run bzr reconcile on this repository."""
1764
class PublicBranchOutOfDate(BzrError):
1766
_fmt = 'Public branch "%(public_location)s" lacks revision '\
1769
def __init__(self, public_location, revstring):
1770
import bzrlib.urlutils as urlutils
1771
public_location = urlutils.unescape_for_display(public_location,
1773
BzrError.__init__(self, public_location=public_location,
1774
revstring=revstring)
1777
class MergeModifiedFormatError(BzrError):
1779
_fmt = "Error in merge modified format"
1782
class ConflictFormatError(BzrError):
1784
_fmt = "Format error in conflict listings"
1787
class CorruptRepository(BzrError):
1789
_fmt = ("An error has been detected in the repository %(repo_path)s.\n"
1790
"Please run bzr reconcile on this repository.")
1092
1792
def __init__(self, repo):
1093
BzrNewError.__init__(self)
1793
BzrError.__init__(self)
1094
1794
self.repo_path = repo.bzrdir.root_transport.base
1097
class UpgradeRequired(BzrNewError):
1098
"""To use this feature you must upgrade your branch at %(path)s."""
1797
class UpgradeRequired(BzrError):
1799
_fmt = "To use this feature you must upgrade your branch at %(path)s."
1100
1801
def __init__(self, path):
1101
BzrNewError.__init__(self)
1802
BzrError.__init__(self)
1102
1803
self.path = path
1105
class LocalRequiresBoundBranch(BzrNewError):
1106
"""Cannot perform local-only commits on unbound branches."""
1109
class MissingProgressBarFinish(BzrNewError):
1110
"""A nested progress bar was not 'finished' correctly."""
1113
class InvalidProgressBarType(BzrNewError):
1114
"""Environment variable BZR_PROGRESS_BAR='%(bar_type)s is not a supported type
1115
Select one of: %(valid_types)s"""
1806
class LocalRequiresBoundBranch(BzrError):
1808
_fmt = "Cannot perform local-only commits on unbound branches."
1811
class MissingProgressBarFinish(BzrError):
1813
_fmt = "A nested progress bar was not 'finished' correctly."
1816
class InvalidProgressBarType(BzrError):
1818
_fmt = ("Environment variable BZR_PROGRESS_BAR='%(bar_type)s"
1819
" is not a supported type Select one of: %(valid_types)s")
1117
1821
def __init__(self, bar_type, valid_types):
1118
BzrNewError.__init__(self, bar_type=bar_type, valid_types=valid_types)
1121
class UnsupportedOperation(BzrNewError):
1122
"""The method %(mname)s is not supported on objects of type %(tname)s."""
1822
BzrError.__init__(self, bar_type=bar_type, valid_types=valid_types)
1825
class UnsupportedOperation(BzrError):
1827
_fmt = ("The method %(mname)s is not supported on"
1828
" objects of type %(tname)s.")
1123
1830
def __init__(self, method, method_self):
1124
1831
self.method = method
1125
1832
self.mname = method.__name__
1126
1833
self.tname = type(method_self).__name__
1129
class BinaryFile(BzrNewError):
1130
"""File is binary but should be text."""
1133
class IllegalPath(BzrNewError):
1134
"""The path %(path)s is not permitted on this platform"""
1836
class CannotSetRevisionId(UnsupportedOperation):
1837
"""Raised when a commit is attempting to set a revision id but cant."""
1840
class NonAsciiRevisionId(UnsupportedOperation):
1841
"""Raised when a commit is attempting to set a non-ascii revision id
1846
class BinaryFile(BzrError):
1848
_fmt = "File is binary but should be text."
1851
class IllegalPath(BzrError):
1853
_fmt = "The path %(path)s is not permitted on this platform"
1136
1855
def __init__(self, path):
1137
BzrNewError.__init__(self)
1856
BzrError.__init__(self)
1138
1857
self.path = path
1141
class TestamentMismatch(BzrNewError):
1142
"""Testament did not match expected value.
1143
For revision_id {%(revision_id)s}, expected {%(expected)s}, measured
1860
class TestamentMismatch(BzrError):
1862
_fmt = """Testament did not match expected value.
1863
For revision_id {%(revision_id)s}, expected {%(expected)s}, measured
1146
1866
def __init__(self, revision_id, expected, measured):
1147
1867
self.revision_id = revision_id
1148
1868
self.expected = expected
1149
1869
self.measured = measured
1152
class NotABundle(BzrNewError):
1153
"""Not a bzr revision-bundle: %(text)r"""
1872
class NotABundle(BzrError):
1874
_fmt = "Not a bzr revision-bundle: %(text)r"
1155
1876
def __init__(self, text):
1156
BzrNewError.__init__(self)
1877
BzrError.__init__(self)
1157
1878
self.text = text
1160
class BadBundle(BzrNewError):
1161
"""Bad bzr revision-bundle: %(text)r"""
1881
class BadBundle(BzrError):
1883
_fmt = "Bad bzr revision-bundle: %(text)r"
1163
1885
def __init__(self, text):
1164
BzrNewError.__init__(self)
1886
BzrError.__init__(self)
1165
1887
self.text = text
1168
1890
class MalformedHeader(BadBundle):
1169
"""Malformed bzr revision-bundle header: %(text)r"""
1171
def __init__(self, text):
1172
BzrNewError.__init__(self)
1892
_fmt = "Malformed bzr revision-bundle header: %(text)r"
1176
1895
class MalformedPatches(BadBundle):
1177
"""Malformed patches in bzr revision-bundle: %(text)r"""
1179
def __init__(self, text):
1180
BzrNewError.__init__(self)
1897
_fmt = "Malformed patches in bzr revision-bundle: %(text)r"
1184
1900
class MalformedFooter(BadBundle):
1185
"""Malformed footer in bzr revision-bundle: %(text)r"""
1187
def __init__(self, text):
1188
BzrNewError.__init__(self)
1902
_fmt = "Malformed footer in bzr revision-bundle: %(text)r"
1192
1905
class UnsupportedEOLMarker(BadBundle):
1193
"""End of line marker was not \\n in bzr revision-bundle"""
1907
_fmt = "End of line marker was not \\n in bzr revision-bundle"
1195
1909
def __init__(self):
1196
BzrNewError.__init__(self)
1199
class IncompatibleFormat(BzrNewError):
1200
"""Bundle format %(bundle_format)s is incompatible with %(other)s"""
1910
# XXX: BadBundle's constructor assumes there's explanatory text,
1911
# but for this there is not
1912
BzrError.__init__(self)
1915
class IncompatibleBundleFormat(BzrError):
1917
_fmt = "Bundle format %(bundle_format)s is incompatible with %(other)s"
1202
1919
def __init__(self, bundle_format, other):
1203
BzrNewError.__init__(self)
1920
BzrError.__init__(self)
1204
1921
self.bundle_format = bundle_format
1205
1922
self.other = other
1208
class BadInventoryFormat(BzrNewError):
1209
"""Root class for inventory serialization errors"""
1925
class BadInventoryFormat(BzrError):
1927
_fmt = "Root class for inventory serialization errors"
1212
1930
class UnexpectedInventoryFormat(BadInventoryFormat):
1213
"""The inventory was not in the expected format:\n %(msg)s"""
1932
_fmt = "The inventory was not in the expected format:\n %(msg)s"
1215
1934
def __init__(self, msg):
1216
1935
BadInventoryFormat.__init__(self, msg=msg)
1938
class RootNotRich(BzrError):
1940
_fmt = """This operation requires rich root data storage"""
1943
class NoSmartMedium(BzrError):
1945
_fmt = "The transport '%(transport)s' cannot tunnel the smart protocol."
1947
internal_error = True
1949
def __init__(self, transport):
1950
self.transport = transport
1219
1953
class NoSmartServer(NotBranchError):
1220
"""No smart server available at %(url)s"""
1955
_fmt = "No smart server available at %(url)s"
1222
1957
def __init__(self, url):
1226
class UnknownSSH(BzrNewError):
1227
"""Unrecognised value for BZR_SSH environment variable: %(vendor)s"""
1961
class UnknownSSH(BzrError):
1963
_fmt = "Unrecognised value for BZR_SSH environment variable: %(vendor)s"
1229
1965
def __init__(self, vendor):
1230
BzrNewError.__init__(self)
1966
BzrError.__init__(self)
1231
1967
self.vendor = vendor
1234
class GhostRevisionUnusableHere(BzrNewError):
1235
"""Ghost revision {%(revision_id)s} cannot be used here."""
1970
class SSHVendorNotFound(BzrError):
1972
_fmt = ("Don't know how to handle SSH connections."
1973
" Please set BZR_SSH environment variable.")
1976
class GhostRevisionUnusableHere(BzrError):
1978
_fmt = "Ghost revision {%(revision_id)s} cannot be used here."
1237
1980
def __init__(self, revision_id):
1238
BzrNewError.__init__(self)
1981
BzrError.__init__(self)
1239
1982
self.revision_id = revision_id
1242
class IllegalUseOfScopeReplacer(BzrNewError):
1243
"""ScopeReplacer object %(name)r was used incorrectly: %(msg)s%(extra)s"""
1245
is_user_error = False
1985
class IllegalUseOfScopeReplacer(BzrError):
1987
_fmt = ("ScopeReplacer object %(name)r was used incorrectly:"
1988
" %(msg)s%(extra)s")
1990
internal_error = True
1247
1992
def __init__(self, name, msg, extra=None):
1248
BzrNewError.__init__(self)
1993
BzrError.__init__(self)
1249
1994
self.name = name