1
# Copyright (C) 2005-2011 Canonical Ltd
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
# GNU General Public License for more details.
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
"""Exceptions for bzr, and reporting of them.
20
from __future__ import absolute_import
22
# TODO: is there any value in providing the .args field used by standard
23
# python exceptions? A list of values with no names seems less useful
26
# TODO: Perhaps convert the exception to a string at the moment it's
27
# constructed to make sure it will succeed. But that says nothing about
28
# exceptions that are never raised.
30
# TODO: selftest assertRaises should probably also check that every error
31
# raised can be formatted as a string successfully, and without giving
35
# return codes from the bzr program
38
EXIT_INTERNAL_ERROR = 4
41
class BzrError(StandardError):
43
Base class for errors raised by bzrlib.
45
:cvar internal_error: if True this was probably caused by a bzr bug and
46
should be displayed with a traceback; if False (or absent) this was
47
probably a user or environment error and they don't need the gory
48
details. (That can be overridden by -Derror on the command line.)
50
:cvar _fmt: Format string to display the error; this is expanded
51
by the instance's dict.
54
internal_error = False
56
def __init__(self, msg=None, **kwds):
57
"""Construct a new BzrError.
59
There are two alternative forms for constructing these objects.
60
Either a preformatted string may be passed, or a set of named
61
arguments can be given. The first is for generic "user" errors which
62
are not intended to be caught and so do not need a specific subclass.
63
The second case is for use with subclasses that provide a _fmt format
64
string to print the arguments.
66
Keyword arguments are taken as parameters to the error, which can
67
be inserted into the format string template. It's recommended
68
that subclasses override the __init__ method to require specific
71
:param msg: If given, this is the literal complete text for the error,
72
not subject to expansion. 'msg' is used instead of 'message' because
73
python evolved and, in 2.6, forbids the use of 'message'.
75
StandardError.__init__(self)
77
# I was going to deprecate this, but it actually turns out to be
78
# quite handy - mbp 20061103.
79
self._preformatted_string = msg
81
self._preformatted_string = None
82
for key, value in kwds.items():
83
setattr(self, key, value)
86
s = getattr(self, '_preformatted_string', None)
88
# contains a preformatted message
91
fmt = self._get_format_string()
93
d = dict(self.__dict__)
95
# __str__() should always return a 'str' object
96
# never a 'unicode' object.
99
pass # just bind to 'e' for formatting below
102
return 'Unprintable exception %s: dict=%r, fmt=%r, error=%r' \
103
% (self.__class__.__name__,
105
getattr(self, '_fmt', None),
108
def __unicode__(self):
110
if isinstance(u, str):
111
# Try decoding the str using the default encoding.
113
elif not isinstance(u, unicode):
114
# Try to make a unicode object from it, because __unicode__ must
115
# return a unicode object.
121
if isinstance(s, unicode):
124
# __str__ must return a str.
129
return '%s(%s)' % (self.__class__.__name__, str(self))
131
def _get_format_string(self):
132
"""Return format string for this exception or None"""
133
fmt = getattr(self, '_fmt', None)
135
from bzrlib.i18n import gettext
136
return gettext(unicode(fmt)) # _fmt strings should be ascii
138
def __eq__(self, other):
139
if self.__class__ is not other.__class__:
140
return NotImplemented
141
return self.__dict__ == other.__dict__
144
class InternalBzrError(BzrError):
145
"""Base class for errors that are internal in nature.
147
This is a convenience class for errors that are internal. The
148
internal_error attribute can still be altered in subclasses, if needed.
149
Using this class is simply an easy way to get internal errors.
152
internal_error = True
155
class AlreadyBuilding(BzrError):
157
_fmt = "The tree builder is already building a tree."
160
class BranchError(BzrError):
161
"""Base class for concrete 'errors about a branch'."""
163
def __init__(self, branch):
164
BzrError.__init__(self, branch=branch)
167
class BzrCheckError(InternalBzrError):
169
_fmt = "Internal check failed: %(msg)s"
171
def __init__(self, msg):
172
BzrError.__init__(self)
176
class DirstateCorrupt(BzrError):
178
_fmt = "The dirstate file (%(state)s) appears to be corrupt: %(msg)s"
180
def __init__(self, state, msg):
181
BzrError.__init__(self)
186
class DisabledMethod(InternalBzrError):
188
_fmt = "The smart server method '%(class_name)s' is disabled."
190
def __init__(self, class_name):
191
BzrError.__init__(self)
192
self.class_name = class_name
195
class IncompatibleAPI(BzrError):
197
_fmt = 'The API for "%(api)s" is not compatible with "%(wanted)s". '\
198
'It supports versions "%(minimum)s" to "%(current)s".'
200
def __init__(self, api, wanted, minimum, current):
203
self.minimum = minimum
204
self.current = current
207
class InProcessTransport(BzrError):
209
_fmt = "The transport '%(transport)s' is only accessible within this " \
212
def __init__(self, transport):
213
self.transport = transport
216
class InvalidEntryName(InternalBzrError):
218
_fmt = "Invalid entry name: %(name)s"
220
def __init__(self, name):
221
BzrError.__init__(self)
225
class InvalidRevisionNumber(BzrError):
227
_fmt = "Invalid revision number %(revno)s"
229
def __init__(self, revno):
230
BzrError.__init__(self)
234
class InvalidRevisionId(BzrError):
236
_fmt = "Invalid revision-id {%(revision_id)s} in %(branch)s"
238
def __init__(self, revision_id, branch):
239
# branch can be any string or object with __str__ defined
240
BzrError.__init__(self)
241
self.revision_id = revision_id
245
class ReservedId(BzrError):
247
_fmt = "Reserved revision-id {%(revision_id)s}"
249
def __init__(self, revision_id):
250
self.revision_id = revision_id
253
class RootMissing(InternalBzrError):
255
_fmt = ("The root entry of a tree must be the first entry supplied to "
256
"the commit builder.")
259
class NoPublicBranch(BzrError):
261
_fmt = 'There is no public branch set for "%(branch_url)s".'
263
def __init__(self, branch):
264
import bzrlib.urlutils as urlutils
265
public_location = urlutils.unescape_for_display(branch.base, 'ascii')
266
BzrError.__init__(self, branch_url=public_location)
269
class NoHelpTopic(BzrError):
271
_fmt = ("No help could be found for '%(topic)s'. "
272
"Please use 'bzr help topics' to obtain a list of topics.")
274
def __init__(self, topic):
278
class NoSuchId(BzrError):
280
_fmt = 'The file id "%(file_id)s" is not present in the tree %(tree)s.'
282
def __init__(self, tree, file_id):
283
BzrError.__init__(self)
284
self.file_id = file_id
288
class NoSuchIdInRepository(NoSuchId):
290
_fmt = ('The file id "%(file_id)s" is not present in the repository'
293
def __init__(self, repository, file_id):
294
BzrError.__init__(self, repository=repository, file_id=file_id)
297
class NotStacked(BranchError):
299
_fmt = "The branch '%(branch)s' is not stacked."
302
class InventoryModified(InternalBzrError):
304
_fmt = ("The current inventory for the tree %(tree)r has been modified,"
305
" so a clean inventory cannot be read without data loss.")
307
def __init__(self, tree):
311
class NoWorkingTree(BzrError):
313
_fmt = 'No WorkingTree exists for "%(base)s".'
315
def __init__(self, base):
316
BzrError.__init__(self)
320
class NotBuilding(BzrError):
322
_fmt = "Not currently building a tree."
325
class NotLocalUrl(BzrError):
327
_fmt = "%(url)s is not a local path."
329
def __init__(self, url):
333
class WorkingTreeAlreadyPopulated(InternalBzrError):
335
_fmt = 'Working tree already populated in "%(base)s"'
337
def __init__(self, base):
341
class BzrCommandError(BzrError):
342
"""Error from user command"""
344
# Error from malformed user command; please avoid raising this as a
345
# generic exception not caused by user input.
347
# I think it's a waste of effort to differentiate between errors that
348
# are not intended to be caught anyway. UI code need not subclass
349
# BzrCommandError, and non-UI code should not throw a subclass of
350
# BzrCommandError. ADHB 20051211
353
class NotWriteLocked(BzrError):
355
_fmt = """%(not_locked)r is not write locked but needs to be."""
357
def __init__(self, not_locked):
358
self.not_locked = not_locked
361
class BzrOptionError(BzrCommandError):
363
_fmt = "Error in command line options"
366
class BadIndexFormatSignature(BzrError):
368
_fmt = "%(value)s is not an index of type %(_type)s."
370
def __init__(self, value, _type):
371
BzrError.__init__(self)
376
class BadIndexData(BzrError):
378
_fmt = "Error in data for index %(value)s."
380
def __init__(self, value):
381
BzrError.__init__(self)
385
class BadIndexDuplicateKey(BzrError):
387
_fmt = "The key '%(key)s' is already in index '%(index)s'."
389
def __init__(self, key, index):
390
BzrError.__init__(self)
395
class BadIndexKey(BzrError):
397
_fmt = "The key '%(key)s' is not a valid key."
399
def __init__(self, key):
400
BzrError.__init__(self)
404
class BadIndexOptions(BzrError):
406
_fmt = "Could not parse options for index %(value)s."
408
def __init__(self, value):
409
BzrError.__init__(self)
413
class BadIndexValue(BzrError):
415
_fmt = "The value '%(value)s' is not a valid value."
417
def __init__(self, value):
418
BzrError.__init__(self)
422
class BadOptionValue(BzrError):
424
_fmt = """Bad value "%(value)s" for option "%(name)s"."""
426
def __init__(self, name, value):
427
BzrError.__init__(self, name=name, value=value)
430
class StrictCommitFailed(BzrError):
432
_fmt = "Commit refused because there are unknown files in the tree"
435
# XXX: Should be unified with TransportError; they seem to represent the
437
# RBC 20060929: I think that unifiying with TransportError would be a mistake
438
# - this is finer than a TransportError - and more useful as such. It
439
# differentiates between 'transport has failed' and 'operation on a transport
441
class PathError(BzrError):
443
_fmt = "Generic path error: %(path)r%(extra)s)"
445
def __init__(self, path, extra=None):
446
BzrError.__init__(self)
449
self.extra = ': ' + str(extra)
454
class NoSuchFile(PathError):
456
_fmt = "No such file: %(path)r%(extra)s"
459
class FileExists(PathError):
461
_fmt = "File exists: %(path)r%(extra)s"
464
class RenameFailedFilesExist(BzrError):
465
"""Used when renaming and both source and dest exist."""
467
_fmt = ("Could not rename %(source)s => %(dest)s because both files exist."
468
" (Use --after to tell bzr about a rename that has already"
469
" happened)%(extra)s")
471
def __init__(self, source, dest, extra=None):
472
BzrError.__init__(self)
473
self.source = str(source)
474
self.dest = str(dest)
476
self.extra = ' ' + str(extra)
481
class NotADirectory(PathError):
483
_fmt = '"%(path)s" is not a directory %(extra)s'
486
class NotInWorkingDirectory(PathError):
488
_fmt = '"%(path)s" is not in the working directory %(extra)s'
491
class DirectoryNotEmpty(PathError):
493
_fmt = 'Directory not empty: "%(path)s"%(extra)s'
496
class HardLinkNotSupported(PathError):
498
_fmt = 'Hard-linking "%(path)s" is not supported'
501
class ReadingCompleted(InternalBzrError):
503
_fmt = ("The MediumRequest '%(request)s' has already had finish_reading "
504
"called upon it - the request has been completed and no more "
507
def __init__(self, request):
508
self.request = request
511
class ResourceBusy(PathError):
513
_fmt = 'Device or resource busy: "%(path)s"%(extra)s'
516
class PermissionDenied(PathError):
518
_fmt = 'Permission denied: "%(path)s"%(extra)s'
521
class InvalidURL(PathError):
523
_fmt = 'Invalid url supplied to transport: "%(path)s"%(extra)s'
526
class InvalidURLJoin(PathError):
528
_fmt = "Invalid URL join request: %(reason)s: %(base)r + %(join_args)r"
530
def __init__(self, reason, base, join_args):
533
self.join_args = join_args
534
PathError.__init__(self, base, reason)
537
class InvalidRebaseURLs(PathError):
539
_fmt = "URLs differ by more than path: %(from_)r and %(to)r"
541
def __init__(self, from_, to):
544
PathError.__init__(self, from_, 'URLs differ by more than path.')
547
class UnavailableRepresentation(InternalBzrError):
549
_fmt = ("The encoding '%(wanted)s' is not available for key %(key)s which "
550
"is encoded as '%(native)s'.")
552
def __init__(self, key, wanted, native):
553
InternalBzrError.__init__(self)
559
class UnknownHook(BzrError):
561
_fmt = "The %(type)s hook '%(hook)s' is unknown in this version of bzrlib."
563
def __init__(self, hook_type, hook_name):
564
BzrError.__init__(self)
565
self.type = hook_type
566
self.hook = hook_name
569
class UnsupportedProtocol(PathError):
571
_fmt = 'Unsupported protocol for url "%(path)s"%(extra)s'
573
def __init__(self, url, extra=""):
574
PathError.__init__(self, url, extra=extra)
577
class UnstackableBranchFormat(BzrError):
579
_fmt = ("The branch '%(url)s'(%(format)s) is not a stackable format. "
580
"You will need to upgrade the branch to permit branch stacking.")
582
def __init__(self, format, url):
583
BzrError.__init__(self)
588
class UnstackableLocationError(BzrError):
590
_fmt = "The branch '%(branch_url)s' cannot be stacked on '%(target_url)s'."
592
def __init__(self, branch_url, target_url):
593
BzrError.__init__(self)
594
self.branch_url = branch_url
595
self.target_url = target_url
598
class UnstackableRepositoryFormat(BzrError):
600
_fmt = ("The repository '%(url)s'(%(format)s) is not a stackable format. "
601
"You will need to upgrade the repository to permit branch stacking.")
603
def __init__(self, format, url):
604
BzrError.__init__(self)
609
class ReadError(PathError):
611
_fmt = """Error reading from %(path)r."""
614
class ShortReadvError(PathError):
616
_fmt = ('readv() read %(actual)s bytes rather than %(length)s bytes'
617
' at %(offset)s for "%(path)s"%(extra)s')
619
internal_error = True
621
def __init__(self, path, offset, length, actual, extra=None):
622
PathError.__init__(self, path, extra=extra)
628
class PathNotChild(PathError):
630
_fmt = 'Path "%(path)s" is not a child of path "%(base)s"%(extra)s'
632
internal_error = False
634
def __init__(self, path, base, extra=None):
635
BzrError.__init__(self)
639
self.extra = ': ' + str(extra)
644
class InvalidNormalization(PathError):
646
_fmt = 'Path "%(path)s" is not unicode normalized'
649
# TODO: This is given a URL; we try to unescape it but doing that from inside
650
# the exception object is a bit undesirable.
651
# TODO: Probably this behavior of should be a common superclass
652
class NotBranchError(PathError):
654
_fmt = 'Not a branch: "%(path)s"%(detail)s.'
656
def __init__(self, path, detail=None, bzrdir=None):
657
import bzrlib.urlutils as urlutils
658
path = urlutils.unescape_for_display(path, 'ascii')
659
if detail is not None:
660
detail = ': ' + detail
663
PathError.__init__(self, path=path)
666
return '<%s %r>' % (self.__class__.__name__, self.__dict__)
669
# XXX: Ideally self.detail would be a property, but Exceptions in
670
# Python 2.4 have to be old-style classes so properties don't work.
671
# Instead we override _format.
672
if self.detail is None:
673
if self.bzrdir is not None:
675
self.bzrdir.open_repository()
676
except NoRepositoryPresent:
679
# Just ignore unexpected errors. Raising arbitrary errors
680
# during str(err) can provoke strange bugs. Concretely
681
# Launchpad's codehosting managed to raise NotBranchError
682
# here, and then get stuck in an infinite loop/recursion
683
# trying to str() that error. All this error really cares
684
# about that there's no working repository there, and if
685
# open_repository() fails, there probably isn't.
688
self.detail = ': location is a repository'
691
return PathError._format(self)
694
class NoSubmitBranch(PathError):
696
_fmt = 'No submit branch available for branch "%(path)s"'
698
def __init__(self, branch):
699
import bzrlib.urlutils as urlutils
700
self.path = urlutils.unescape_for_display(branch.base, 'ascii')
703
class AlreadyBranchError(PathError):
705
_fmt = 'Already a branch: "%(path)s".'
708
class BranchExistsWithoutWorkingTree(PathError):
710
_fmt = 'Directory contains a branch, but no working tree \
711
(use bzr checkout if you wish to build a working tree): "%(path)s"'
714
class AtomicFileAlreadyClosed(PathError):
716
_fmt = ('"%(function)s" called on an AtomicFile after it was closed:'
719
def __init__(self, path, function):
720
PathError.__init__(self, path=path, extra=None)
721
self.function = function
724
class InaccessibleParent(PathError):
726
_fmt = ('Parent not accessible given base "%(base)s" and'
727
' relative path "%(path)s"')
729
def __init__(self, path, base):
730
PathError.__init__(self, path)
734
class NoRepositoryPresent(BzrError):
736
_fmt = 'No repository present: "%(path)s"'
737
def __init__(self, bzrdir):
738
BzrError.__init__(self)
739
self.path = bzrdir.transport.clone('..').base
742
class UnsupportedFormatError(BzrError):
744
_fmt = "Unsupported branch format: %(format)s\nPlease run 'bzr upgrade'"
747
class UnknownFormatError(BzrError):
749
_fmt = "Unknown %(kind)s format: %(format)r"
751
def __init__(self, format, kind='branch'):
756
class IncompatibleFormat(BzrError):
758
_fmt = "Format %(format)s is not compatible with .bzr version %(bzrdir)s."
760
def __init__(self, format, bzrdir_format):
761
BzrError.__init__(self)
763
self.bzrdir = bzrdir_format
766
class ParseFormatError(BzrError):
768
_fmt = "Parse error on line %(lineno)d of %(format)s format: %(line)s"
770
def __init__(self, format, lineno, line, text):
771
BzrError.__init__(self)
778
class IncompatibleRepositories(BzrError):
779
"""Report an error that two repositories are not compatible.
781
Note that the source and target repositories are permitted to be strings:
782
this exception is thrown from the smart server and may refer to a
783
repository the client hasn't opened.
786
_fmt = "%(target)s\n" \
787
"is not compatible with\n" \
791
def __init__(self, source, target, details=None):
793
details = "(no details)"
794
BzrError.__init__(self, target=target, source=source, details=details)
797
class IncompatibleRevision(BzrError):
799
_fmt = "Revision is not compatible with %(repo_format)s"
801
def __init__(self, repo_format):
802
BzrError.__init__(self)
803
self.repo_format = repo_format
806
class AlreadyVersionedError(BzrError):
807
"""Used when a path is expected not to be versioned, but it is."""
809
_fmt = "%(context_info)s%(path)s is already versioned."
811
def __init__(self, path, context_info=None):
812
"""Construct a new AlreadyVersionedError.
814
:param path: This is the path which is versioned,
815
which should be in a user friendly form.
816
:param context_info: If given, this is information about the context,
817
which could explain why this is expected to not be versioned.
819
BzrError.__init__(self)
821
if context_info is None:
822
self.context_info = ''
824
self.context_info = context_info + ". "
827
class NotVersionedError(BzrError):
828
"""Used when a path is expected to be versioned, but it is not."""
830
_fmt = "%(context_info)s%(path)s is not versioned."
832
def __init__(self, path, context_info=None):
833
"""Construct a new NotVersionedError.
835
:param path: This is the path which is not versioned,
836
which should be in a user friendly form.
837
:param context_info: If given, this is information about the context,
838
which could explain why this is expected to be versioned.
840
BzrError.__init__(self)
842
if context_info is None:
843
self.context_info = ''
845
self.context_info = context_info + ". "
848
class PathsNotVersionedError(BzrError):
849
"""Used when reporting several paths which are not versioned"""
851
_fmt = "Path(s) are not versioned: %(paths_as_string)s"
853
def __init__(self, paths):
854
from bzrlib.osutils import quotefn
855
BzrError.__init__(self)
857
self.paths_as_string = ' '.join([quotefn(p) for p in paths])
860
class PathsDoNotExist(BzrError):
862
_fmt = "Path(s) do not exist: %(paths_as_string)s%(extra)s"
864
# used when reporting that paths are neither versioned nor in the working
867
def __init__(self, paths, extra=None):
869
from bzrlib.osutils import quotefn
870
BzrError.__init__(self)
872
self.paths_as_string = ' '.join([quotefn(p) for p in paths])
874
self.extra = ': ' + str(extra)
879
class BadFileKindError(BzrError):
881
_fmt = 'Cannot operate on "%(filename)s" of unsupported kind "%(kind)s"'
883
def __init__(self, filename, kind):
884
BzrError.__init__(self, filename=filename, kind=kind)
887
class BadFilenameEncoding(BzrError):
889
_fmt = ('Filename %(filename)r is not valid in your current filesystem'
890
' encoding %(fs_encoding)s')
892
def __init__(self, filename, fs_encoding):
893
BzrError.__init__(self)
894
self.filename = filename
895
self.fs_encoding = fs_encoding
898
class ForbiddenControlFileError(BzrError):
900
_fmt = 'Cannot operate on "%(filename)s" because it is a control file'
903
class LockError(InternalBzrError):
905
_fmt = "Lock error: %(msg)s"
907
# All exceptions from the lock/unlock functions should be from
908
# this exception class. They will be translated as necessary. The
909
# original exception is available as e.original_error
911
# New code should prefer to raise specific subclasses
912
def __init__(self, msg):
916
class LockActive(LockError):
918
_fmt = "The lock for '%(lock_description)s' is in use and cannot be broken."
920
internal_error = False
922
def __init__(self, lock_description):
923
self.lock_description = lock_description
926
class CommitNotPossible(LockError):
928
_fmt = "A commit was attempted but we do not have a write lock open."
934
class AlreadyCommitted(LockError):
936
_fmt = "A rollback was requested, but is not able to be accomplished."
942
class ReadOnlyError(LockError):
944
_fmt = "A write attempt was made in a read only transaction on %(obj)s"
946
# TODO: There should also be an error indicating that you need a write
947
# lock and don't have any lock at all... mbp 20070226
949
def __init__(self, obj):
953
class LockFailed(LockError):
955
internal_error = False
957
_fmt = "Cannot lock %(lock)s: %(why)s"
959
def __init__(self, lock, why):
960
LockError.__init__(self, '')
965
class OutSideTransaction(BzrError):
967
_fmt = ("A transaction related operation was attempted after"
968
" the transaction finished.")
971
class ObjectNotLocked(LockError):
973
_fmt = "%(obj)r is not locked"
975
# this can indicate that any particular object is not locked; see also
976
# LockNotHeld which means that a particular *lock* object is not held by
977
# the caller -- perhaps they should be unified.
978
def __init__(self, obj):
982
class ReadOnlyObjectDirtiedError(ReadOnlyError):
984
_fmt = "Cannot change object %(obj)r in read only transaction"
986
def __init__(self, obj):
990
class UnlockableTransport(LockError):
992
internal_error = False
994
_fmt = "Cannot lock: transport is read only: %(transport)s"
996
def __init__(self, transport):
997
self.transport = transport
1000
class LockContention(LockError):
1002
_fmt = 'Could not acquire lock "%(lock)s": %(msg)s'
1004
internal_error = False
1006
def __init__(self, lock, msg=''):
1011
class LockBroken(LockError):
1013
_fmt = ("Lock was broken while still open: %(lock)s"
1014
" - check storage consistency!")
1016
internal_error = False
1018
def __init__(self, lock):
1022
class LockBreakMismatch(LockError):
1024
_fmt = ("Lock was released and re-acquired before being broken:"
1025
" %(lock)s: held by %(holder)r, wanted to break %(target)r")
1027
internal_error = False
1029
def __init__(self, lock, holder, target):
1031
self.holder = holder
1032
self.target = target
1035
class LockCorrupt(LockError):
1037
_fmt = ("Lock is apparently held, but corrupted: %(corruption_info)s\n"
1038
"Use 'bzr break-lock' to clear it")
1040
internal_error = False
1042
def __init__(self, corruption_info, file_data=None):
1043
self.corruption_info = corruption_info
1044
self.file_data = file_data
1047
class LockNotHeld(LockError):
1049
_fmt = "Lock not held: %(lock)s"
1051
internal_error = False
1053
def __init__(self, lock):
1057
class TokenLockingNotSupported(LockError):
1059
_fmt = "The object %(obj)s does not support token specifying a token when locking."
1061
def __init__(self, obj):
1065
class TokenMismatch(LockBroken):
1067
_fmt = "The lock token %(given_token)r does not match lock token %(lock_token)r."
1069
internal_error = True
1071
def __init__(self, given_token, lock_token):
1072
self.given_token = given_token
1073
self.lock_token = lock_token
1076
class PointlessCommit(BzrError):
1078
_fmt = "No changes to commit"
1081
class CannotCommitSelectedFileMerge(BzrError):
1083
_fmt = 'Selected-file commit of merges is not supported yet:'\
1084
' files %(files_str)s'
1086
def __init__(self, files):
1087
files_str = ', '.join(files)
1088
BzrError.__init__(self, files=files, files_str=files_str)
1091
class ExcludesUnsupported(BzrError):
1093
_fmt = ('Excluding paths during commit is not supported by '
1094
'repository at %(repository)r.')
1096
def __init__(self, repository):
1097
BzrError.__init__(self, repository=repository)
1100
class BadCommitMessageEncoding(BzrError):
1102
_fmt = 'The specified commit message contains characters unsupported by '\
1103
'the current encoding.'
1106
class UpgradeReadonly(BzrError):
1108
_fmt = "Upgrade URL cannot work with readonly URLs."
1111
class UpToDateFormat(BzrError):
1113
_fmt = "The branch format %(format)s is already at the most recent format."
1115
def __init__(self, format):
1116
BzrError.__init__(self)
1117
self.format = format
1120
class StrictCommitFailed(Exception):
1122
_fmt = "Commit refused because there are unknowns in the tree."
1125
class NoSuchRevision(InternalBzrError):
1127
_fmt = "%(branch)s has no revision %(revision)s"
1129
def __init__(self, branch, revision):
1130
# 'branch' may sometimes be an internal object like a KnitRevisionStore
1131
BzrError.__init__(self, branch=branch, revision=revision)
1134
class RangeInChangeOption(BzrError):
1136
_fmt = "Option --change does not accept revision ranges"
1139
class NoSuchRevisionSpec(BzrError):
1141
_fmt = "No namespace registered for string: %(spec)r"
1143
def __init__(self, spec):
1144
BzrError.__init__(self, spec=spec)
1147
class NoSuchRevisionInTree(NoSuchRevision):
1148
"""When using Tree.revision_tree, and the revision is not accessible."""
1150
_fmt = "The revision id {%(revision_id)s} is not present in the tree %(tree)s."
1152
def __init__(self, tree, revision_id):
1153
BzrError.__init__(self)
1155
self.revision_id = revision_id
1158
class InvalidRevisionSpec(BzrError):
1160
_fmt = ("Requested revision: '%(spec)s' does not exist in branch:"
1161
" %(branch_url)s%(extra)s")
1163
def __init__(self, spec, branch, extra=None):
1164
BzrError.__init__(self, branch=branch, spec=spec)
1165
self.branch_url = getattr(branch, 'user_url', str(branch))
1167
self.extra = '\n' + str(extra)
1172
class AppendRevisionsOnlyViolation(BzrError):
1174
_fmt = ('Operation denied because it would change the main history,'
1175
' which is not permitted by the append_revisions_only setting on'
1176
' branch "%(location)s".')
1178
def __init__(self, location):
1179
import bzrlib.urlutils as urlutils
1180
location = urlutils.unescape_for_display(location, 'ascii')
1181
BzrError.__init__(self, location=location)
1184
class DivergedBranches(BzrError):
1186
_fmt = ("These branches have diverged."
1187
" Use the missing command to see how.\n"
1188
"Use the merge command to reconcile them.")
1190
def __init__(self, branch1, branch2):
1191
self.branch1 = branch1
1192
self.branch2 = branch2
1195
class NotLefthandHistory(InternalBzrError):
1197
_fmt = "Supplied history does not follow left-hand parents"
1199
def __init__(self, history):
1200
BzrError.__init__(self, history=history)
1203
class UnrelatedBranches(BzrError):
1205
_fmt = ("Branches have no common ancestor, and"
1206
" no merge base revision was specified.")
1209
class CannotReverseCherrypick(BzrError):
1211
_fmt = ('Selected merge cannot perform reverse cherrypicks. Try merge3'
1215
class NoCommonAncestor(BzrError):
1217
_fmt = "Revisions have no common ancestor: %(revision_a)s %(revision_b)s"
1219
def __init__(self, revision_a, revision_b):
1220
self.revision_a = revision_a
1221
self.revision_b = revision_b
1224
class NoCommonRoot(BzrError):
1226
_fmt = ("Revisions are not derived from the same root: "
1227
"%(revision_a)s %(revision_b)s.")
1229
def __init__(self, revision_a, revision_b):
1230
BzrError.__init__(self, revision_a=revision_a, revision_b=revision_b)
1233
class NotAncestor(BzrError):
1235
_fmt = "Revision %(rev_id)s is not an ancestor of %(not_ancestor_id)s"
1237
def __init__(self, rev_id, not_ancestor_id):
1238
BzrError.__init__(self, rev_id=rev_id,
1239
not_ancestor_id=not_ancestor_id)
1242
class NoCommits(BranchError):
1244
_fmt = "Branch %(branch)s has no commits."
1247
class UnlistableStore(BzrError):
1249
def __init__(self, store):
1250
BzrError.__init__(self, "Store %s is not listable" % store)
1254
class UnlistableBranch(BzrError):
1256
def __init__(self, br):
1257
BzrError.__init__(self, "Stores for branch %s are not listable" % br)
1260
class BoundBranchOutOfDate(BzrError):
1262
_fmt = ("Bound branch %(branch)s is out of date with master branch"
1263
" %(master)s.%(extra_help)s")
1265
def __init__(self, branch, master):
1266
BzrError.__init__(self)
1267
self.branch = branch
1268
self.master = master
1269
self.extra_help = ''
1272
class CommitToDoubleBoundBranch(BzrError):
1274
_fmt = ("Cannot commit to branch %(branch)s."
1275
" It is bound to %(master)s, which is bound to %(remote)s.")
1277
def __init__(self, branch, master, remote):
1278
BzrError.__init__(self)
1279
self.branch = branch
1280
self.master = master
1281
self.remote = remote
1284
class OverwriteBoundBranch(BzrError):
1286
_fmt = "Cannot pull --overwrite to a branch which is bound %(branch)s"
1288
def __init__(self, branch):
1289
BzrError.__init__(self)
1290
self.branch = branch
1293
class BoundBranchConnectionFailure(BzrError):
1295
_fmt = ("Unable to connect to target of bound branch %(branch)s"
1296
" => %(target)s: %(error)s")
1298
def __init__(self, branch, target, error):
1299
BzrError.__init__(self)
1300
self.branch = branch
1301
self.target = target
1305
class WeaveError(BzrError):
1307
_fmt = "Error in processing weave: %(msg)s"
1309
def __init__(self, msg=None):
1310
BzrError.__init__(self)
1314
class WeaveRevisionAlreadyPresent(WeaveError):
1316
_fmt = "Revision {%(revision_id)s} already present in %(weave)s"
1318
def __init__(self, revision_id, weave):
1320
WeaveError.__init__(self)
1321
self.revision_id = revision_id
1325
class WeaveRevisionNotPresent(WeaveError):
1327
_fmt = "Revision {%(revision_id)s} not present in %(weave)s"
1329
def __init__(self, revision_id, weave):
1330
WeaveError.__init__(self)
1331
self.revision_id = revision_id
1335
class WeaveFormatError(WeaveError):
1337
_fmt = "Weave invariant violated: %(what)s"
1339
def __init__(self, what):
1340
WeaveError.__init__(self)
1344
class WeaveParentMismatch(WeaveError):
1346
_fmt = "Parents are mismatched between two revisions. %(msg)s"
1349
class WeaveInvalidChecksum(WeaveError):
1351
_fmt = "Text did not match its checksum: %(msg)s"
1354
class WeaveTextDiffers(WeaveError):
1356
_fmt = ("Weaves differ on text content. Revision:"
1357
" {%(revision_id)s}, %(weave_a)s, %(weave_b)s")
1359
def __init__(self, revision_id, weave_a, weave_b):
1360
WeaveError.__init__(self)
1361
self.revision_id = revision_id
1362
self.weave_a = weave_a
1363
self.weave_b = weave_b
1366
class WeaveTextDiffers(WeaveError):
1368
_fmt = ("Weaves differ on text content. Revision:"
1369
" {%(revision_id)s}, %(weave_a)s, %(weave_b)s")
1371
def __init__(self, revision_id, weave_a, weave_b):
1372
WeaveError.__init__(self)
1373
self.revision_id = revision_id
1374
self.weave_a = weave_a
1375
self.weave_b = weave_b
1378
class VersionedFileError(BzrError):
1380
_fmt = "Versioned file error"
1383
class RevisionNotPresent(VersionedFileError):
1385
_fmt = 'Revision {%(revision_id)s} not present in "%(file_id)s".'
1387
def __init__(self, revision_id, file_id):
1388
VersionedFileError.__init__(self)
1389
self.revision_id = revision_id
1390
self.file_id = file_id
1393
class RevisionAlreadyPresent(VersionedFileError):
1395
_fmt = 'Revision {%(revision_id)s} already present in "%(file_id)s".'
1397
def __init__(self, revision_id, file_id):
1398
VersionedFileError.__init__(self)
1399
self.revision_id = revision_id
1400
self.file_id = file_id
1403
class VersionedFileInvalidChecksum(VersionedFileError):
1405
_fmt = "Text did not match its checksum: %(msg)s"
1408
class KnitError(InternalBzrError):
1413
class KnitCorrupt(KnitError):
1415
_fmt = "Knit %(filename)s corrupt: %(how)s"
1417
def __init__(self, filename, how):
1418
KnitError.__init__(self)
1419
self.filename = filename
1423
class SHA1KnitCorrupt(KnitCorrupt):
1425
_fmt = ("Knit %(filename)s corrupt: sha-1 of reconstructed text does not "
1426
"match expected sha-1. key %(key)s expected sha %(expected)s actual "
1429
def __init__(self, filename, actual, expected, key, content):
1430
KnitError.__init__(self)
1431
self.filename = filename
1432
self.actual = actual
1433
self.expected = expected
1435
self.content = content
1438
class KnitDataStreamIncompatible(KnitError):
1439
# Not raised anymore, as we can convert data streams. In future we may
1440
# need it again for more exotic cases, so we're keeping it around for now.
1442
_fmt = "Cannot insert knit data stream of format \"%(stream_format)s\" into knit of format \"%(target_format)s\"."
1444
def __init__(self, stream_format, target_format):
1445
self.stream_format = stream_format
1446
self.target_format = target_format
1449
class KnitDataStreamUnknown(KnitError):
1450
# Indicates a data stream we don't know how to handle.
1452
_fmt = "Cannot parse knit data stream of format \"%(stream_format)s\"."
1454
def __init__(self, stream_format):
1455
self.stream_format = stream_format
1458
class KnitHeaderError(KnitError):
1460
_fmt = 'Knit header error: %(badline)r unexpected for file "%(filename)s".'
1462
def __init__(self, badline, filename):
1463
KnitError.__init__(self)
1464
self.badline = badline
1465
self.filename = filename
1467
class KnitIndexUnknownMethod(KnitError):
1468
"""Raised when we don't understand the storage method.
1470
Currently only 'fulltext' and 'line-delta' are supported.
1473
_fmt = ("Knit index %(filename)s does not have a known method"
1474
" in options: %(options)r")
1476
def __init__(self, filename, options):
1477
KnitError.__init__(self)
1478
self.filename = filename
1479
self.options = options
1482
class RetryWithNewPacks(BzrError):
1483
"""Raised when we realize that the packs on disk have changed.
1485
This is meant as more of a signaling exception, to trap between where a
1486
local error occurred and the code that can actually handle the error and
1487
code that can retry appropriately.
1490
internal_error = True
1492
_fmt = ("Pack files have changed, reload and retry. context: %(context)s"
1495
def __init__(self, context, reload_occurred, exc_info):
1496
"""create a new RetryWithNewPacks error.
1498
:param reload_occurred: Set to True if we know that the packs have
1499
already been reloaded, and we are failing because of an in-memory
1500
cache miss. If set to True then we will ignore if a reload says
1501
nothing has changed, because we assume it has already reloaded. If
1502
False, then a reload with nothing changed will force an error.
1503
:param exc_info: The original exception traceback, so if there is a
1504
problem we can raise the original error (value from sys.exc_info())
1506
BzrError.__init__(self)
1507
self.context = context
1508
self.reload_occurred = reload_occurred
1509
self.exc_info = exc_info
1510
self.orig_error = exc_info[1]
1511
# TODO: The global error handler should probably treat this by
1512
# raising/printing the original exception with a bit about
1513
# RetryWithNewPacks also not being caught
1516
class RetryAutopack(RetryWithNewPacks):
1517
"""Raised when we are autopacking and we find a missing file.
1519
Meant as a signaling exception, to tell the autopack code it should try
1523
internal_error = True
1525
_fmt = ("Pack files have changed, reload and try autopack again."
1526
" context: %(context)s %(orig_error)s")
1529
class NoSuchExportFormat(BzrError):
1531
_fmt = "Export format %(format)r not supported"
1533
def __init__(self, format):
1534
BzrError.__init__(self)
1535
self.format = format
1538
class TransportError(BzrError):
1540
_fmt = "Transport error: %(msg)s %(orig_error)s"
1542
def __init__(self, msg=None, orig_error=None):
1543
if msg is None and orig_error is not None:
1544
msg = str(orig_error)
1545
if orig_error is None:
1550
self.orig_error = orig_error
1551
BzrError.__init__(self)
1554
class TooManyConcurrentRequests(InternalBzrError):
1556
_fmt = ("The medium '%(medium)s' has reached its concurrent request limit."
1557
" Be sure to finish_writing and finish_reading on the"
1558
" currently open request.")
1560
def __init__(self, medium):
1561
self.medium = medium
1564
class SmartProtocolError(TransportError):
1566
_fmt = "Generic bzr smart protocol error: %(details)s"
1568
def __init__(self, details):
1569
self.details = details
1572
class UnexpectedProtocolVersionMarker(TransportError):
1574
_fmt = "Received bad protocol version marker: %(marker)r"
1576
def __init__(self, marker):
1577
self.marker = marker
1580
class UnknownSmartMethod(InternalBzrError):
1582
_fmt = "The server does not recognise the '%(verb)s' request."
1584
def __init__(self, verb):
1588
class SmartMessageHandlerError(InternalBzrError):
1590
_fmt = ("The message handler raised an exception:\n"
1591
"%(traceback_text)s")
1593
def __init__(self, exc_info):
1595
# GZ 2010-08-10: Cycle with exc_tb/exc_info affects at least one test
1596
self.exc_type, self.exc_value, self.exc_tb = exc_info
1597
self.exc_info = exc_info
1598
traceback_strings = traceback.format_exception(
1599
self.exc_type, self.exc_value, self.exc_tb)
1600
self.traceback_text = ''.join(traceback_strings)
1603
# A set of semi-meaningful errors which can be thrown
1604
class TransportNotPossible(TransportError):
1606
_fmt = "Transport operation not possible: %(msg)s %(orig_error)s"
1609
class ConnectionError(TransportError):
1611
_fmt = "Connection error: %(msg)s %(orig_error)s"
1614
class SocketConnectionError(ConnectionError):
1616
_fmt = "%(msg)s %(host)s%(port)s%(orig_error)s"
1618
def __init__(self, host, port=None, msg=None, orig_error=None):
1620
msg = 'Failed to connect to'
1621
if orig_error is None:
1624
orig_error = '; ' + str(orig_error)
1625
ConnectionError.__init__(self, msg=msg, orig_error=orig_error)
1630
self.port = ':%s' % port
1633
# XXX: This is also used for unexpected end of file, which is different at the
1634
# TCP level from "connection reset".
1635
class ConnectionReset(TransportError):
1637
_fmt = "Connection closed: %(msg)s %(orig_error)s"
1640
class ConnectionTimeout(ConnectionError):
1642
_fmt = "Connection Timeout: %(msg)s%(orig_error)s"
1645
class InvalidRange(TransportError):
1647
_fmt = "Invalid range access in %(path)s at %(offset)s: %(msg)s"
1649
def __init__(self, path, offset, msg=None):
1650
TransportError.__init__(self, msg)
1652
self.offset = offset
1655
class InvalidHttpResponse(TransportError):
1657
_fmt = "Invalid http response for %(path)s: %(msg)s%(orig_error)s"
1659
def __init__(self, path, msg, orig_error=None):
1661
if orig_error is None:
1664
# This is reached for obscure and unusual errors so we want to
1665
# preserve as much info as possible to ease debug.
1666
orig_error = ': %r' % (orig_error,)
1667
TransportError.__init__(self, msg, orig_error=orig_error)
1670
class CertificateError(TransportError):
1672
_fmt = "Certificate error: %(error)s"
1674
def __init__(self, error):
1678
class InvalidHttpRange(InvalidHttpResponse):
1680
_fmt = "Invalid http range %(range)r for %(path)s: %(msg)s"
1682
def __init__(self, path, range, msg):
1684
InvalidHttpResponse.__init__(self, path, msg)
1687
class HttpBoundaryMissing(InvalidHttpResponse):
1688
"""A multipart response ends with no boundary marker.
1690
This is a special case caused by buggy proxies, described in
1691
<https://bugs.launchpad.net/bzr/+bug/198646>.
1694
_fmt = "HTTP MIME Boundary missing for %(path)s: %(msg)s"
1696
def __init__(self, path, msg):
1697
InvalidHttpResponse.__init__(self, path, msg)
1700
class InvalidHttpContentType(InvalidHttpResponse):
1702
_fmt = 'Invalid http Content-type "%(ctype)s" for %(path)s: %(msg)s'
1704
def __init__(self, path, ctype, msg):
1706
InvalidHttpResponse.__init__(self, path, msg)
1709
class RedirectRequested(TransportError):
1711
_fmt = '%(source)s is%(permanently)s redirected to %(target)s'
1713
def __init__(self, source, target, is_permanent=False):
1714
self.source = source
1715
self.target = target
1717
self.permanently = ' permanently'
1719
self.permanently = ''
1720
TransportError.__init__(self)
1723
class TooManyRedirections(TransportError):
1725
_fmt = "Too many redirections"
1728
class ConflictsInTree(BzrError):
1730
_fmt = "Working tree has conflicts."
1733
class ConfigContentError(BzrError):
1735
_fmt = "Config file %(filename)s is not UTF-8 encoded\n"
1737
def __init__(self, filename):
1738
BzrError.__init__(self)
1739
self.filename = filename
1742
class ParseConfigError(BzrError):
1744
_fmt = "Error(s) parsing config file %(filename)s:\n%(errors)s"
1746
def __init__(self, errors, filename):
1747
BzrError.__init__(self)
1748
self.filename = filename
1749
self.errors = '\n'.join(e.msg for e in errors)
1752
class ConfigOptionValueError(BzrError):
1754
_fmt = """Bad value "%(value)s" for option "%(name)s"."""
1756
def __init__(self, name, value):
1757
BzrError.__init__(self, name=name, value=value)
1760
class NoEmailInUsername(BzrError):
1762
_fmt = "%(username)r does not seem to contain a reasonable email address"
1764
def __init__(self, username):
1765
BzrError.__init__(self)
1766
self.username = username
1769
class SigningFailed(BzrError):
1771
_fmt = 'Failed to GPG sign data with command "%(command_line)s"'
1773
def __init__(self, command_line):
1774
BzrError.__init__(self, command_line=command_line)
1777
class SignatureVerificationFailed(BzrError):
1779
_fmt = 'Failed to verify GPG signature data with error "%(error)s"'
1781
def __init__(self, error):
1782
BzrError.__init__(self, error=error)
1785
class DependencyNotPresent(BzrError):
1787
_fmt = 'Unable to import library "%(library)s": %(error)s'
1789
def __init__(self, library, error):
1790
BzrError.__init__(self, library=library, error=error)
1793
class GpgmeNotInstalled(DependencyNotPresent):
1795
_fmt = 'python-gpgme is not installed, it is needed to verify signatures'
1797
def __init__(self, error):
1798
DependencyNotPresent.__init__(self, 'gpgme', error)
1801
class WorkingTreeNotRevision(BzrError):
1803
_fmt = ("The working tree for %(basedir)s has changed since"
1804
" the last commit, but weave merge requires that it be"
1807
def __init__(self, tree):
1808
BzrError.__init__(self, basedir=tree.basedir)
1811
class CantReprocessAndShowBase(BzrError):
1813
_fmt = ("Can't reprocess and show base, because reprocessing obscures "
1814
"the relationship of conflicting lines to the base")
1817
class GraphCycleError(BzrError):
1819
_fmt = "Cycle in graph %(graph)r"
1821
def __init__(self, graph):
1822
BzrError.__init__(self)
1826
class WritingCompleted(InternalBzrError):
1828
_fmt = ("The MediumRequest '%(request)s' has already had finish_writing "
1829
"called upon it - accept bytes may not be called anymore.")
1831
def __init__(self, request):
1832
self.request = request
1835
class WritingNotComplete(InternalBzrError):
1837
_fmt = ("The MediumRequest '%(request)s' has not has finish_writing "
1838
"called upon it - until the write phase is complete no "
1839
"data may be read.")
1841
def __init__(self, request):
1842
self.request = request
1845
class NotConflicted(BzrError):
1847
_fmt = "File %(filename)s is not conflicted."
1849
def __init__(self, filename):
1850
BzrError.__init__(self)
1851
self.filename = filename
1854
class MediumNotConnected(InternalBzrError):
1856
_fmt = """The medium '%(medium)s' is not connected."""
1858
def __init__(self, medium):
1859
self.medium = medium
1862
class MustUseDecorated(Exception):
1864
_fmt = "A decorating function has requested its original command be used."
1867
class NoBundleFound(BzrError):
1869
_fmt = 'No bundle was found in "%(filename)s".'
1871
def __init__(self, filename):
1872
BzrError.__init__(self)
1873
self.filename = filename
1876
class BundleNotSupported(BzrError):
1878
_fmt = "Unable to handle bundle version %(version)s: %(msg)s"
1880
def __init__(self, version, msg):
1881
BzrError.__init__(self)
1882
self.version = version
1886
class MissingText(BzrError):
1888
_fmt = ("Branch %(base)s is missing revision"
1889
" %(text_revision)s of %(file_id)s")
1891
def __init__(self, branch, text_revision, file_id):
1892
BzrError.__init__(self)
1893
self.branch = branch
1894
self.base = branch.base
1895
self.text_revision = text_revision
1896
self.file_id = file_id
1899
class DuplicateFileId(BzrError):
1901
_fmt = "File id {%(file_id)s} already exists in inventory as %(entry)s"
1903
def __init__(self, file_id, entry):
1904
BzrError.__init__(self)
1905
self.file_id = file_id
1909
class DuplicateKey(BzrError):
1911
_fmt = "Key %(key)s is already present in map"
1914
class DuplicateHelpPrefix(BzrError):
1916
_fmt = "The prefix %(prefix)s is in the help search path twice."
1918
def __init__(self, prefix):
1919
self.prefix = prefix
1922
class MalformedTransform(InternalBzrError):
1924
_fmt = "Tree transform is malformed %(conflicts)r"
1927
class NoFinalPath(BzrError):
1929
_fmt = ("No final name for trans_id %(trans_id)r\n"
1930
"file-id: %(file_id)r\n"
1931
"root trans-id: %(root_trans_id)r\n")
1933
def __init__(self, trans_id, transform):
1934
self.trans_id = trans_id
1935
self.file_id = transform.final_file_id(trans_id)
1936
self.root_trans_id = transform.root
1939
class BzrBadParameter(InternalBzrError):
1941
_fmt = "Bad parameter: %(param)r"
1943
# This exception should never be thrown, but it is a base class for all
1944
# parameter-to-function errors.
1946
def __init__(self, param):
1947
BzrError.__init__(self)
1951
class BzrBadParameterNotUnicode(BzrBadParameter):
1953
_fmt = "Parameter %(param)s is neither unicode nor utf8."
1956
class ReusingTransform(BzrError):
1958
_fmt = "Attempt to reuse a transform that has already been applied."
1961
class CantMoveRoot(BzrError):
1963
_fmt = "Moving the root directory is not supported at this time"
1966
class TransformRenameFailed(BzrError):
1968
_fmt = "Failed to rename %(from_path)s to %(to_path)s: %(why)s"
1970
def __init__(self, from_path, to_path, why, errno):
1971
self.from_path = from_path
1972
self.to_path = to_path
1977
class BzrMoveFailedError(BzrError):
1979
_fmt = ("Could not move %(from_path)s%(operator)s %(to_path)s"
1980
"%(_has_extra)s%(extra)s")
1982
def __init__(self, from_path='', to_path='', extra=None):
1983
from bzrlib.osutils import splitpath
1984
BzrError.__init__(self)
1986
self.extra, self._has_extra = extra, ': '
1988
self.extra = self._has_extra = ''
1990
has_from = len(from_path) > 0
1991
has_to = len(to_path) > 0
1993
self.from_path = splitpath(from_path)[-1]
1998
self.to_path = splitpath(to_path)[-1]
2003
if has_from and has_to:
2004
self.operator = " =>"
2006
self.from_path = "from " + from_path
2008
self.operator = "to"
2010
self.operator = "file"
2013
class BzrRenameFailedError(BzrMoveFailedError):
2015
_fmt = ("Could not rename %(from_path)s%(operator)s %(to_path)s"
2016
"%(_has_extra)s%(extra)s")
2018
def __init__(self, from_path, to_path, extra=None):
2019
BzrMoveFailedError.__init__(self, from_path, to_path, extra)
2022
class BzrBadParameterNotString(BzrBadParameter):
2024
_fmt = "Parameter %(param)s is not a string or unicode string."
2027
class BzrBadParameterMissing(BzrBadParameter):
2029
_fmt = "Parameter %(param)s is required but not present."
2032
class BzrBadParameterUnicode(BzrBadParameter):
2034
_fmt = ("Parameter %(param)s is unicode but"
2035
" only byte-strings are permitted.")
2038
class BzrBadParameterContainsNewline(BzrBadParameter):
2040
_fmt = "Parameter %(param)s contains a newline."
2043
class ParamikoNotPresent(DependencyNotPresent):
2045
_fmt = "Unable to import paramiko (required for sftp support): %(error)s"
2047
def __init__(self, error):
2048
DependencyNotPresent.__init__(self, 'paramiko', error)
2051
class PointlessMerge(BzrError):
2053
_fmt = "Nothing to merge."
2056
class UninitializableFormat(BzrError):
2058
_fmt = "Format %(format)s cannot be initialised by this version of bzr."
2060
def __init__(self, format):
2061
BzrError.__init__(self)
2062
self.format = format
2065
class BadConversionTarget(BzrError):
2067
_fmt = "Cannot convert from format %(from_format)s to format %(format)s." \
2070
def __init__(self, problem, format, from_format=None):
2071
BzrError.__init__(self)
2072
self.problem = problem
2073
self.format = format
2074
self.from_format = from_format or '(unspecified)'
2077
class NoDiffFound(BzrError):
2079
_fmt = 'Could not find an appropriate Differ for file "%(path)s"'
2081
def __init__(self, path):
2082
BzrError.__init__(self, path)
2085
class ExecutableMissing(BzrError):
2087
_fmt = "%(exe_name)s could not be found on this machine"
2089
def __init__(self, exe_name):
2090
BzrError.__init__(self, exe_name=exe_name)
2093
class NoDiff(BzrError):
2095
_fmt = "Diff is not installed on this machine: %(msg)s"
2097
def __init__(self, msg):
2098
BzrError.__init__(self, msg=msg)
2101
class NoDiff3(BzrError):
2103
_fmt = "Diff3 is not installed on this machine."
2106
class ExistingContent(BzrError):
2107
# Added in bzrlib 0.92, used by VersionedFile.add_lines.
2109
_fmt = "The content being inserted is already present."
2112
class ExistingLimbo(BzrError):
2114
_fmt = """This tree contains left-over files from a failed operation.
2115
Please examine %(limbo_dir)s to see if it contains any files you wish to
2116
keep, and delete it when you are done."""
2118
def __init__(self, limbo_dir):
2119
BzrError.__init__(self)
2120
self.limbo_dir = limbo_dir
2123
class ExistingPendingDeletion(BzrError):
2125
_fmt = """This tree contains left-over files from a failed operation.
2126
Please examine %(pending_deletion)s to see if it contains any files you
2127
wish to keep, and delete it when you are done."""
2129
def __init__(self, pending_deletion):
2130
BzrError.__init__(self, pending_deletion=pending_deletion)
2133
class ImmortalLimbo(BzrError):
2135
_fmt = """Unable to delete transform temporary directory %(limbo_dir)s.
2136
Please examine %(limbo_dir)s to see if it contains any files you wish to
2137
keep, and delete it when you are done."""
2139
def __init__(self, limbo_dir):
2140
BzrError.__init__(self)
2141
self.limbo_dir = limbo_dir
2144
class ImmortalPendingDeletion(BzrError):
2146
_fmt = ("Unable to delete transform temporary directory "
2147
"%(pending_deletion)s. Please examine %(pending_deletion)s to see if it "
2148
"contains any files you wish to keep, and delete it when you are done.")
2150
def __init__(self, pending_deletion):
2151
BzrError.__init__(self, pending_deletion=pending_deletion)
2154
class OutOfDateTree(BzrError):
2156
_fmt = "Working tree is out of date, please run 'bzr update'.%(more)s"
2158
def __init__(self, tree, more=None):
2163
BzrError.__init__(self)
2168
class PublicBranchOutOfDate(BzrError):
2170
_fmt = 'Public branch "%(public_location)s" lacks revision '\
2173
def __init__(self, public_location, revstring):
2174
import bzrlib.urlutils as urlutils
2175
public_location = urlutils.unescape_for_display(public_location,
2177
BzrError.__init__(self, public_location=public_location,
2178
revstring=revstring)
2181
class MergeModifiedFormatError(BzrError):
2183
_fmt = "Error in merge modified format"
2186
class ConflictFormatError(BzrError):
2188
_fmt = "Format error in conflict listings"
2191
class CorruptDirstate(BzrError):
2193
_fmt = ("Inconsistency in dirstate file %(dirstate_path)s.\n"
2194
"Error: %(description)s")
2196
def __init__(self, dirstate_path, description):
2197
BzrError.__init__(self)
2198
self.dirstate_path = dirstate_path
2199
self.description = description
2202
class CorruptRepository(BzrError):
2204
_fmt = ("An error has been detected in the repository %(repo_path)s.\n"
2205
"Please run bzr reconcile on this repository.")
2207
def __init__(self, repo):
2208
BzrError.__init__(self)
2209
self.repo_path = repo.user_url
2212
class InconsistentDelta(BzrError):
2213
"""Used when we get a delta that is not valid."""
2215
_fmt = ("An inconsistent delta was supplied involving %(path)r,"
2216
" %(file_id)r\nreason: %(reason)s")
2218
def __init__(self, path, file_id, reason):
2219
BzrError.__init__(self)
2221
self.file_id = file_id
2222
self.reason = reason
2225
class InconsistentDeltaDelta(InconsistentDelta):
2226
"""Used when we get a delta that is not valid."""
2228
_fmt = ("An inconsistent delta was supplied: %(delta)r"
2229
"\nreason: %(reason)s")
2231
def __init__(self, delta, reason):
2232
BzrError.__init__(self)
2234
self.reason = reason
2237
class UpgradeRequired(BzrError):
2239
_fmt = "To use this feature you must upgrade your branch at %(path)s."
2241
def __init__(self, path):
2242
BzrError.__init__(self)
2246
class RepositoryUpgradeRequired(UpgradeRequired):
2248
_fmt = "To use this feature you must upgrade your repository at %(path)s."
2251
class RichRootUpgradeRequired(UpgradeRequired):
2253
_fmt = ("To use this feature you must upgrade your branch at %(path)s to"
2254
" a format which supports rich roots.")
2257
class LocalRequiresBoundBranch(BzrError):
2259
_fmt = "Cannot perform local-only commits on unbound branches."
2262
class UnsupportedOperation(BzrError):
2264
_fmt = ("The method %(mname)s is not supported on"
2265
" objects of type %(tname)s.")
2267
def __init__(self, method, method_self):
2268
self.method = method
2269
self.mname = method.__name__
2270
self.tname = type(method_self).__name__
2273
class CannotSetRevisionId(UnsupportedOperation):
2274
"""Raised when a commit is attempting to set a revision id but cant."""
2277
class NonAsciiRevisionId(UnsupportedOperation):
2278
"""Raised when a commit is attempting to set a non-ascii revision id
2283
class GhostTagsNotSupported(BzrError):
2285
_fmt = "Ghost tags not supported by format %(format)r."
2287
def __init__(self, format):
2288
self.format = format
2291
class BinaryFile(BzrError):
2293
_fmt = "File is binary but should be text."
2296
class IllegalPath(BzrError):
2298
_fmt = "The path %(path)s is not permitted on this platform"
2300
def __init__(self, path):
2301
BzrError.__init__(self)
2305
class TestamentMismatch(BzrError):
2307
_fmt = """Testament did not match expected value.
2308
For revision_id {%(revision_id)s}, expected {%(expected)s}, measured
2311
def __init__(self, revision_id, expected, measured):
2312
self.revision_id = revision_id
2313
self.expected = expected
2314
self.measured = measured
2317
class NotABundle(BzrError):
2319
_fmt = "Not a bzr revision-bundle: %(text)r"
2321
def __init__(self, text):
2322
BzrError.__init__(self)
2326
class BadBundle(BzrError):
2328
_fmt = "Bad bzr revision-bundle: %(text)r"
2330
def __init__(self, text):
2331
BzrError.__init__(self)
2335
class MalformedHeader(BadBundle):
2337
_fmt = "Malformed bzr revision-bundle header: %(text)r"
2340
class MalformedPatches(BadBundle):
2342
_fmt = "Malformed patches in bzr revision-bundle: %(text)r"
2345
class MalformedFooter(BadBundle):
2347
_fmt = "Malformed footer in bzr revision-bundle: %(text)r"
2350
class UnsupportedEOLMarker(BadBundle):
2352
_fmt = "End of line marker was not \\n in bzr revision-bundle"
2355
# XXX: BadBundle's constructor assumes there's explanatory text,
2356
# but for this there is not
2357
BzrError.__init__(self)
2360
class IncompatibleBundleFormat(BzrError):
2362
_fmt = "Bundle format %(bundle_format)s is incompatible with %(other)s"
2364
def __init__(self, bundle_format, other):
2365
BzrError.__init__(self)
2366
self.bundle_format = bundle_format
2370
class BadInventoryFormat(BzrError):
2372
_fmt = "Root class for inventory serialization errors"
2375
class UnexpectedInventoryFormat(BadInventoryFormat):
2377
_fmt = "The inventory was not in the expected format:\n %(msg)s"
2379
def __init__(self, msg):
2380
BadInventoryFormat.__init__(self, msg=msg)
2383
class RootNotRich(BzrError):
2385
_fmt = """This operation requires rich root data storage"""
2388
class NoSmartMedium(InternalBzrError):
2390
_fmt = "The transport '%(transport)s' cannot tunnel the smart protocol."
2392
def __init__(self, transport):
2393
self.transport = transport
2396
class UnknownSSH(BzrError):
2398
_fmt = "Unrecognised value for BZR_SSH environment variable: %(vendor)s"
2400
def __init__(self, vendor):
2401
BzrError.__init__(self)
2402
self.vendor = vendor
2405
class SSHVendorNotFound(BzrError):
2407
_fmt = ("Don't know how to handle SSH connections."
2408
" Please set BZR_SSH environment variable.")
2411
class GhostRevisionsHaveNoRevno(BzrError):
2412
"""When searching for revnos, if we encounter a ghost, we are stuck"""
2414
_fmt = ("Could not determine revno for {%(revision_id)s} because"
2415
" its ancestry shows a ghost at {%(ghost_revision_id)s}")
2417
def __init__(self, revision_id, ghost_revision_id):
2418
self.revision_id = revision_id
2419
self.ghost_revision_id = ghost_revision_id
2422
class GhostRevisionUnusableHere(BzrError):
2424
_fmt = "Ghost revision {%(revision_id)s} cannot be used here."
2426
def __init__(self, revision_id):
2427
BzrError.__init__(self)
2428
self.revision_id = revision_id
2431
class IllegalUseOfScopeReplacer(InternalBzrError):
2433
_fmt = ("ScopeReplacer object %(name)r was used incorrectly:"
2434
" %(msg)s%(extra)s")
2436
def __init__(self, name, msg, extra=None):
2437
BzrError.__init__(self)
2441
self.extra = ': ' + str(extra)
2446
class InvalidImportLine(InternalBzrError):
2448
_fmt = "Not a valid import statement: %(msg)\n%(text)s"
2450
def __init__(self, text, msg):
2451
BzrError.__init__(self)
2456
class ImportNameCollision(InternalBzrError):
2458
_fmt = ("Tried to import an object to the same name as"
2459
" an existing object. %(name)s")
2461
def __init__(self, name):
2462
BzrError.__init__(self)
2466
class NotAMergeDirective(BzrError):
2467
"""File starting with %(firstline)r is not a merge directive"""
2468
def __init__(self, firstline):
2469
BzrError.__init__(self, firstline=firstline)
2472
class NoMergeSource(BzrError):
2473
"""Raise if no merge source was specified for a merge directive"""
2475
_fmt = "A merge directive must provide either a bundle or a public"\
2479
class IllegalMergeDirectivePayload(BzrError):
2480
"""A merge directive contained something other than a patch or bundle"""
2482
_fmt = "Bad merge directive payload %(start)r"
2484
def __init__(self, start):
2489
class PatchVerificationFailed(BzrError):
2490
"""A patch from a merge directive could not be verified"""
2492
_fmt = "Preview patch does not match requested changes."
2495
class PatchMissing(BzrError):
2496
"""Raise a patch type was specified but no patch supplied"""
2498
_fmt = "Patch_type was %(patch_type)s, but no patch was supplied."
2500
def __init__(self, patch_type):
2501
BzrError.__init__(self)
2502
self.patch_type = patch_type
2505
class TargetNotBranch(BzrError):
2506
"""A merge directive's target branch is required, but isn't a branch"""
2508
_fmt = ("Your branch does not have all of the revisions required in "
2509
"order to merge this merge directive and the target "
2510
"location specified in the merge directive is not a branch: "
2513
def __init__(self, location):
2514
BzrError.__init__(self)
2515
self.location = location
2518
class UnsupportedInventoryKind(BzrError):
2520
_fmt = """Unsupported entry kind %(kind)s"""
2522
def __init__(self, kind):
2526
class BadSubsumeSource(BzrError):
2528
_fmt = "Can't subsume %(other_tree)s into %(tree)s. %(reason)s"
2530
def __init__(self, tree, other_tree, reason):
2532
self.other_tree = other_tree
2533
self.reason = reason
2536
class SubsumeTargetNeedsUpgrade(BzrError):
2538
_fmt = """Subsume target %(other_tree)s needs to be upgraded."""
2540
def __init__(self, other_tree):
2541
self.other_tree = other_tree
2544
class BadReferenceTarget(InternalBzrError):
2546
_fmt = "Can't add reference to %(other_tree)s into %(tree)s." \
2549
def __init__(self, tree, other_tree, reason):
2551
self.other_tree = other_tree
2552
self.reason = reason
2555
class NoSuchTag(BzrError):
2557
_fmt = "No such tag: %(tag_name)s"
2559
def __init__(self, tag_name):
2560
self.tag_name = tag_name
2563
class TagsNotSupported(BzrError):
2565
_fmt = ("Tags not supported by %(branch)s;"
2566
" you may be able to use bzr upgrade.")
2568
def __init__(self, branch):
2569
self.branch = branch
2572
class TagAlreadyExists(BzrError):
2574
_fmt = "Tag %(tag_name)s already exists."
2576
def __init__(self, tag_name):
2577
self.tag_name = tag_name
2580
class MalformedBugIdentifier(BzrError):
2582
_fmt = ('Did not understand bug identifier %(bug_id)s: %(reason)s. '
2583
'See "bzr help bugs" for more information on this feature.')
2585
def __init__(self, bug_id, reason):
2586
self.bug_id = bug_id
2587
self.reason = reason
2590
class InvalidBugTrackerURL(BzrError):
2592
_fmt = ("The URL for bug tracker \"%(abbreviation)s\" doesn't "
2593
"contain {id}: %(url)s")
2595
def __init__(self, abbreviation, url):
2596
self.abbreviation = abbreviation
2600
class UnknownBugTrackerAbbreviation(BzrError):
2602
_fmt = ("Cannot find registered bug tracker called %(abbreviation)s "
2605
def __init__(self, abbreviation, branch):
2606
self.abbreviation = abbreviation
2607
self.branch = branch
2610
class InvalidLineInBugsProperty(BzrError):
2612
_fmt = ("Invalid line in bugs property: '%(line)s'")
2614
def __init__(self, line):
2618
class InvalidBugStatus(BzrError):
2620
_fmt = ("Invalid bug status: '%(status)s'")
2622
def __init__(self, status):
2623
self.status = status
2626
class UnexpectedSmartServerResponse(BzrError):
2628
_fmt = "Could not understand response from smart server: %(response_tuple)r"
2630
def __init__(self, response_tuple):
2631
self.response_tuple = response_tuple
2634
class ErrorFromSmartServer(BzrError):
2635
"""An error was received from a smart server.
2637
:seealso: UnknownErrorFromSmartServer
2640
_fmt = "Error received from smart server: %(error_tuple)r"
2642
internal_error = True
2644
def __init__(self, error_tuple):
2645
self.error_tuple = error_tuple
2647
self.error_verb = error_tuple[0]
2649
self.error_verb = None
2650
self.error_args = error_tuple[1:]
2653
class UnknownErrorFromSmartServer(BzrError):
2654
"""An ErrorFromSmartServer could not be translated into a typical bzrlib
2657
This is distinct from ErrorFromSmartServer so that it is possible to
2658
distinguish between the following two cases:
2660
- ErrorFromSmartServer was uncaught. This is logic error in the client
2661
and so should provoke a traceback to the user.
2662
- ErrorFromSmartServer was caught but its error_tuple could not be
2663
translated. This is probably because the server sent us garbage, and
2664
should not provoke a traceback.
2667
_fmt = "Server sent an unexpected error: %(error_tuple)r"
2669
internal_error = False
2671
def __init__(self, error_from_smart_server):
2674
:param error_from_smart_server: An ErrorFromSmartServer instance.
2676
self.error_from_smart_server = error_from_smart_server
2677
self.error_tuple = error_from_smart_server.error_tuple
2680
class ContainerError(BzrError):
2681
"""Base class of container errors."""
2684
class UnknownContainerFormatError(ContainerError):
2686
_fmt = "Unrecognised container format: %(container_format)r"
2688
def __init__(self, container_format):
2689
self.container_format = container_format
2692
class UnexpectedEndOfContainerError(ContainerError):
2694
_fmt = "Unexpected end of container stream"
2697
class UnknownRecordTypeError(ContainerError):
2699
_fmt = "Unknown record type: %(record_type)r"
2701
def __init__(self, record_type):
2702
self.record_type = record_type
2705
class InvalidRecordError(ContainerError):
2707
_fmt = "Invalid record: %(reason)s"
2709
def __init__(self, reason):
2710
self.reason = reason
2713
class ContainerHasExcessDataError(ContainerError):
2715
_fmt = "Container has data after end marker: %(excess)r"
2717
def __init__(self, excess):
2718
self.excess = excess
2721
class DuplicateRecordNameError(ContainerError):
2723
_fmt = "Container has multiple records with the same name: %(name)s"
2725
def __init__(self, name):
2726
self.name = name.decode("utf-8")
2729
class NoDestinationAddress(InternalBzrError):
2731
_fmt = "Message does not have a destination address."
2734
class RepositoryDataStreamError(BzrError):
2736
_fmt = "Corrupt or incompatible data stream: %(reason)s"
2738
def __init__(self, reason):
2739
self.reason = reason
2742
class SMTPError(BzrError):
2744
_fmt = "SMTP error: %(error)s"
2746
def __init__(self, error):
2750
class NoMessageSupplied(BzrError):
2752
_fmt = "No message supplied."
2755
class NoMailAddressSpecified(BzrError):
2757
_fmt = "No mail-to address (--mail-to) or output (-o) specified."
2760
class UnknownMailClient(BzrError):
2762
_fmt = "Unknown mail client: %(mail_client)s"
2764
def __init__(self, mail_client):
2765
BzrError.__init__(self, mail_client=mail_client)
2768
class MailClientNotFound(BzrError):
2770
_fmt = "Unable to find mail client with the following names:"\
2771
" %(mail_command_list_string)s"
2773
def __init__(self, mail_command_list):
2774
mail_command_list_string = ', '.join(mail_command_list)
2775
BzrError.__init__(self, mail_command_list=mail_command_list,
2776
mail_command_list_string=mail_command_list_string)
2778
class SMTPConnectionRefused(SMTPError):
2780
_fmt = "SMTP connection to %(host)s refused"
2782
def __init__(self, error, host):
2787
class DefaultSMTPConnectionRefused(SMTPConnectionRefused):
2789
_fmt = "Please specify smtp_server. No server at default %(host)s."
2792
class BzrDirError(BzrError):
2794
def __init__(self, bzrdir):
2795
import bzrlib.urlutils as urlutils
2796
display_url = urlutils.unescape_for_display(bzrdir.user_url,
2798
BzrError.__init__(self, bzrdir=bzrdir, display_url=display_url)
2801
class UnsyncedBranches(BzrDirError):
2803
_fmt = ("'%(display_url)s' is not in sync with %(target_url)s. See"
2804
" bzr help sync-for-reconfigure.")
2806
def __init__(self, bzrdir, target_branch):
2807
BzrDirError.__init__(self, bzrdir)
2808
import bzrlib.urlutils as urlutils
2809
self.target_url = urlutils.unescape_for_display(target_branch.base,
2813
class AlreadyBranch(BzrDirError):
2815
_fmt = "'%(display_url)s' is already a branch."
2818
class AlreadyTree(BzrDirError):
2820
_fmt = "'%(display_url)s' is already a tree."
2823
class AlreadyCheckout(BzrDirError):
2825
_fmt = "'%(display_url)s' is already a checkout."
2828
class AlreadyLightweightCheckout(BzrDirError):
2830
_fmt = "'%(display_url)s' is already a lightweight checkout."
2833
class AlreadyUsingShared(BzrDirError):
2835
_fmt = "'%(display_url)s' is already using a shared repository."
2838
class AlreadyStandalone(BzrDirError):
2840
_fmt = "'%(display_url)s' is already standalone."
2843
class AlreadyWithTrees(BzrDirError):
2845
_fmt = ("Shared repository '%(display_url)s' already creates "
2849
class AlreadyWithNoTrees(BzrDirError):
2851
_fmt = ("Shared repository '%(display_url)s' already doesn't create "
2855
class ReconfigurationNotSupported(BzrDirError):
2857
_fmt = "Requested reconfiguration of '%(display_url)s' is not supported."
2860
class NoBindLocation(BzrDirError):
2862
_fmt = "No location could be found to bind to at %(display_url)s."
2865
class UncommittedChanges(BzrError):
2867
_fmt = ('Working tree "%(display_url)s" has uncommitted changes'
2868
' (See bzr status).%(more)s')
2870
def __init__(self, tree, more=None):
2875
import bzrlib.urlutils as urlutils
2876
user_url = getattr(tree, "user_url", None)
2877
if user_url is None:
2878
display_url = str(tree)
2880
display_url = urlutils.unescape_for_display(user_url, 'ascii')
2881
BzrError.__init__(self, tree=tree, display_url=display_url, more=more)
2884
class ShelvedChanges(UncommittedChanges):
2886
_fmt = ('Working tree "%(display_url)s" has shelved changes'
2887
' (See bzr shelve --list).%(more)s')
2890
class MissingTemplateVariable(BzrError):
2892
_fmt = 'Variable {%(name)s} is not available.'
2894
def __init__(self, name):
2898
class NoTemplate(BzrError):
2900
_fmt = 'No template specified.'
2903
class UnableCreateSymlink(BzrError):
2905
_fmt = 'Unable to create symlink %(path_str)son this platform'
2907
def __init__(self, path=None):
2911
path_str = repr(str(path))
2912
except UnicodeEncodeError:
2913
path_str = repr(path)
2915
self.path_str = path_str
2918
class UnsupportedTimezoneFormat(BzrError):
2920
_fmt = ('Unsupported timezone format "%(timezone)s", '
2921
'options are "utc", "original", "local".')
2923
def __init__(self, timezone):
2924
self.timezone = timezone
2927
class CommandAvailableInPlugin(StandardError):
2929
internal_error = False
2931
def __init__(self, cmd_name, plugin_metadata, provider):
2933
self.plugin_metadata = plugin_metadata
2934
self.cmd_name = cmd_name
2935
self.provider = provider
2939
_fmt = ('"%s" is not a standard bzr command. \n'
2940
'However, the following official plugin provides this command: %s\n'
2941
'You can install it by going to: %s'
2942
% (self.cmd_name, self.plugin_metadata['name'],
2943
self.plugin_metadata['url']))
2948
class NoPluginAvailable(BzrError):
2952
class UnableEncodePath(BzrError):
2954
_fmt = ('Unable to encode %(kind)s path %(path)r in '
2955
'user encoding %(user_encoding)s')
2957
def __init__(self, path, kind):
2958
from bzrlib.osutils import get_user_encoding
2961
self.user_encoding = get_user_encoding()
2964
class NoSuchConfig(BzrError):
2966
_fmt = ('The "%(config_id)s" configuration does not exist.')
2968
def __init__(self, config_id):
2969
BzrError.__init__(self, config_id=config_id)
2972
class NoSuchConfigOption(BzrError):
2974
_fmt = ('The "%(option_name)s" configuration option does not exist.')
2976
def __init__(self, option_name):
2977
BzrError.__init__(self, option_name=option_name)
2980
class NoSuchAlias(BzrError):
2982
_fmt = ('The alias "%(alias_name)s" does not exist.')
2984
def __init__(self, alias_name):
2985
BzrError.__init__(self, alias_name=alias_name)
2988
class DirectoryLookupFailure(BzrError):
2989
"""Base type for lookup errors."""
2994
class InvalidLocationAlias(DirectoryLookupFailure):
2996
_fmt = '"%(alias_name)s" is not a valid location alias.'
2998
def __init__(self, alias_name):
2999
DirectoryLookupFailure.__init__(self, alias_name=alias_name)
3002
class UnsetLocationAlias(DirectoryLookupFailure):
3004
_fmt = 'No %(alias_name)s location assigned.'
3006
def __init__(self, alias_name):
3007
DirectoryLookupFailure.__init__(self, alias_name=alias_name[1:])
3010
class CannotBindAddress(BzrError):
3012
_fmt = 'Cannot bind address "%(host)s:%(port)i": %(orig_error)s.'
3014
def __init__(self, host, port, orig_error):
3015
# nb: in python2.4 socket.error doesn't have a useful repr
3016
BzrError.__init__(self, host=host, port=port,
3017
orig_error=repr(orig_error.args))
3020
class UnknownRules(BzrError):
3022
_fmt = ('Unknown rules detected: %(unknowns_str)s.')
3024
def __init__(self, unknowns):
3025
BzrError.__init__(self, unknowns_str=", ".join(unknowns))
3028
class TipChangeRejected(BzrError):
3029
"""A pre_change_branch_tip hook function may raise this to cleanly and
3030
explicitly abort a change to a branch tip.
3033
_fmt = u"Tip change rejected: %(msg)s"
3035
def __init__(self, msg):
3039
class ShelfCorrupt(BzrError):
3041
_fmt = "Shelf corrupt."
3044
class DecompressCorruption(BzrError):
3046
_fmt = "Corruption while decompressing repository file%(orig_error)s"
3048
def __init__(self, orig_error=None):
3049
if orig_error is not None:
3050
self.orig_error = ", %s" % (orig_error,)
3052
self.orig_error = ""
3053
BzrError.__init__(self)
3056
class NoSuchShelfId(BzrError):
3058
_fmt = 'No changes are shelved with id "%(shelf_id)d".'
3060
def __init__(self, shelf_id):
3061
BzrError.__init__(self, shelf_id=shelf_id)
3064
class InvalidShelfId(BzrError):
3066
_fmt = '"%(invalid_id)s" is not a valid shelf id, try a number instead.'
3068
def __init__(self, invalid_id):
3069
BzrError.__init__(self, invalid_id=invalid_id)
3072
class JailBreak(BzrError):
3074
_fmt = "An attempt to access a url outside the server jail was made: '%(url)s'."
3076
def __init__(self, url):
3077
BzrError.__init__(self, url=url)
3080
class UserAbort(BzrError):
3082
_fmt = 'The user aborted the operation.'
3085
class MustHaveWorkingTree(BzrError):
3087
_fmt = ("Branching '%(url)s'(%(format)s) must create a working tree.")
3089
def __init__(self, format, url):
3090
BzrError.__init__(self, format=format, url=url)
3093
class NoSuchView(BzrError):
3094
"""A view does not exist.
3097
_fmt = u"No such view: %(view_name)s."
3099
def __init__(self, view_name):
3100
self.view_name = view_name
3103
class ViewsNotSupported(BzrError):
3104
"""Views are not supported by a tree format.
3107
_fmt = ("Views are not supported by %(tree)s;"
3108
" use 'bzr upgrade' to change your tree to a later format.")
3110
def __init__(self, tree):
3114
class FileOutsideView(BzrError):
3116
_fmt = ('Specified file "%(file_name)s" is outside the current view: '
3119
def __init__(self, file_name, view_files):
3120
self.file_name = file_name
3121
self.view_str = ", ".join(view_files)
3124
class UnresumableWriteGroup(BzrError):
3126
_fmt = ("Repository %(repository)s cannot resume write group "
3127
"%(write_groups)r: %(reason)s")
3129
internal_error = True
3131
def __init__(self, repository, write_groups, reason):
3132
self.repository = repository
3133
self.write_groups = write_groups
3134
self.reason = reason
3137
class UnsuspendableWriteGroup(BzrError):
3139
_fmt = ("Repository %(repository)s cannot suspend a write group.")
3141
internal_error = True
3143
def __init__(self, repository):
3144
self.repository = repository
3147
class LossyPushToSameVCS(BzrError):
3149
_fmt = ("Lossy push not possible between %(source_branch)r and "
3150
"%(target_branch)r that are in the same VCS.")
3152
internal_error = True
3154
def __init__(self, source_branch, target_branch):
3155
self.source_branch = source_branch
3156
self.target_branch = target_branch
3159
class NoRoundtrippingSupport(BzrError):
3161
_fmt = ("Roundtripping is not supported between %(source_branch)r and "
3162
"%(target_branch)r.")
3164
internal_error = True
3166
def __init__(self, source_branch, target_branch):
3167
self.source_branch = source_branch
3168
self.target_branch = target_branch
3171
class FileTimestampUnavailable(BzrError):
3173
_fmt = "The filestamp for %(path)s is not available."
3175
internal_error = True
3177
def __init__(self, path):
3181
class NoColocatedBranchSupport(BzrError):
3183
_fmt = ("%(bzrdir)r does not support co-located branches.")
3185
def __init__(self, bzrdir):
3186
self.bzrdir = bzrdir
3189
class NoWhoami(BzrError):
3191
_fmt = ('Unable to determine your name.\n'
3192
"Please, set your name with the 'whoami' command.\n"
3193
'E.g. bzr whoami "Your Name <name@example.com>"')
3196
class InvalidPattern(BzrError):
3198
_fmt = ('Invalid pattern(s) found. %(msg)s')
3200
def __init__(self, msg):
3204
class RecursiveBind(BzrError):
3206
_fmt = ('Branch "%(branch_url)s" appears to be bound to itself. '
3207
'Please use `bzr unbind` to fix.')
3209
def __init__(self, branch_url):
3210
self.branch_url = branch_url
3213
# FIXME: I would prefer to define the config related exception classes in
3214
# config.py but the lazy import mechanism proscribes this -- vila 20101222
3215
class OptionExpansionLoop(BzrError):
3217
_fmt = 'Loop involving %(refs)r while expanding "%(string)s".'
3219
def __init__(self, string, refs):
3220
self.string = string
3221
self.refs = '->'.join(refs)
3224
class ExpandingUnknownOption(BzrError):
3226
_fmt = 'Option %(name)s is not defined while expanding "%(string)s".'
3228
def __init__(self, name, string):
3230
self.string = string
3233
class NoCompatibleInter(BzrError):
3235
_fmt = ('No compatible object available for operations from %(source)r '
3238
def __init__(self, source, target):
3239
self.source = source
3240
self.target = target
3243
class HpssVfsRequestNotAllowed(BzrError):
3245
_fmt = ("VFS requests over the smart server are not allowed. Encountered: "
3246
"%(method)s, %(arguments)s.")
3248
def __init__(self, method, arguments):
3249
self.method = method
3250
self.arguments = arguments
3253
class UnsupportedKindChange(BzrError):
3255
_fmt = ("Kind change from %(from_kind)s to %(to_kind)s for "
3256
"%(path)s not supported by format %(format)r")
3258
def __init__(self, path, from_kind, to_kind, format):
3260
self.from_kind = from_kind
3261
self.to_kind = to_kind
3262
self.format = format
3265
class MissingFeature(BzrError):
3267
_fmt = ("Missing feature %(feature)s not provided by this "
3268
"version of Bazaar or any plugin.")
3270
def __init__(self, feature):
3271
self.feature = feature
3274
class PatchSyntax(BzrError):
3275
"""Base class for patch syntax errors."""
3278
class BinaryFiles(BzrError):
3280
_fmt = 'Binary files section encountered.'
3282
def __init__(self, orig_name, mod_name):
3283
self.orig_name = orig_name
3284
self.mod_name = mod_name
3287
class MalformedPatchHeader(PatchSyntax):
3289
_fmt = "Malformed patch header. %(desc)s\n%(line)r"
3291
def __init__(self, desc, line):
3296
class MalformedHunkHeader(PatchSyntax):
3298
_fmt = "Malformed hunk header. %(desc)s\n%(line)r"
3300
def __init__(self, desc, line):
3305
class MalformedLine(PatchSyntax):
3307
_fmt = "Malformed line. %(desc)s\n%(line)r"
3309
def __init__(self, desc, line):
3314
class PatchConflict(BzrError):
3316
_fmt = ('Text contents mismatch at line %(line_no)d. Original has '
3317
'"%(orig_line)s", but patch says it should be "%(patch_line)s"')
3319
def __init__(self, line_no, orig_line, patch_line):
3320
self.line_no = line_no
3321
self.orig_line = orig_line.rstrip('\n')
3322
self.patch_line = patch_line.rstrip('\n')
3325
class FeatureAlreadyRegistered(BzrError):
3327
_fmt = 'The feature %(feature)s has already been registered.'
3329
def __init__(self, feature):
3330
self.feature = feature