17
17
"""Exceptions for bzr, and reporting of them.
24
from bzrlib.patches import (
20
from __future__ import absolute_import
33
26
# TODO: is there any value in providing the .args field used by standard
34
27
# python exceptions? A list of values with no names seems less useful
46
# return codes from the bzr program
39
# return codes from the brz program
49
42
EXIT_INTERNAL_ERROR = 4
52
class BzrError(StandardError):
45
class BzrError(Exception):
54
Base class for errors raised by bzrlib.
47
Base class for errors raised by breezy.
56
:cvar internal_error: if True this was probably caused by a bzr bug and
57
should be displayed with a traceback; if False (or absent) this was
58
probably a user or environment error and they don't need the gory details.
59
(That can be overridden by -Derror on the command line.)
49
:cvar internal_error: if True this was probably caused by a brz bug and
50
should be displayed with a traceback; if False (or absent) this was
51
probably a user or environment error and they don't need the gory
52
details. (That can be overridden by -Derror on the command line.)
61
54
:cvar _fmt: Format string to display the error; this is expanded
62
by the instance's dict.
55
by the instance's dict.
65
58
internal_error = False
83
76
not subject to expansion. 'msg' is used instead of 'message' because
84
77
python evolved and, in 2.6, forbids the use of 'message'.
86
StandardError.__init__(self)
79
Exception.__init__(self)
87
80
if msg is not None:
88
81
# I was going to deprecate this, but it actually turns out to be
89
82
# quite handy - mbp 20061103.
106
100
# __str__() should always return a 'str' object
107
101
# never a 'unicode' object.
109
except (AttributeError, TypeError, NameError, ValueError, KeyError), e:
110
return 'Unprintable exception %s: dict=%r, fmt=%r, error=%r' \
111
% (self.__class__.__name__,
113
getattr(self, '_fmt', None),
116
def __unicode__(self):
118
if isinstance(u, str):
119
# Try decoding the str using the default encoding.
121
elif not isinstance(u, unicode):
122
# Try to make a unicode object from it, because __unicode__ must
123
# return a unicode object.
129
if isinstance(s, unicode):
132
# __str__ must return a str.
103
except Exception as e:
105
return 'Unprintable exception %s: dict=%r, fmt=%r, error=%r' \
106
% (self.__class__.__name__,
108
getattr(self, '_fmt', None),
115
return self._format().encode('utf-8')
117
__unicode__ = _format
136
119
def __repr__(self):
137
120
return '%s(%s)' % (self.__class__.__name__, str(self))
140
123
"""Return format string for this exception or None"""
141
124
fmt = getattr(self, '_fmt', None)
142
125
if fmt is not None:
144
fmt = getattr(self, '__doc__', None)
146
symbol_versioning.warn("%s uses its docstring as a format, "
147
"it should use _fmt instead" % self.__class__.__name__,
150
return 'Unprintable exception %s: dict=%r, fmt=%r' \
151
% (self.__class__.__name__,
153
getattr(self, '_fmt', None),
126
from breezy.i18n import gettext
127
return gettext(fmt) # _fmt strings should be ascii
156
129
def __eq__(self, other):
157
130
if self.__class__ is not other.__class__:
158
131
return NotImplemented
159
132
return self.__dict__ == other.__dict__
162
138
class InternalBzrError(BzrError):
163
139
"""Base class for errors that are internal in nature.
170
146
internal_error = True
173
class BzrNewError(BzrError):
174
"""Deprecated error base class."""
175
# base classes should override the docstring with their human-
176
# readable explanation
178
def __init__(self, *args, **kwds):
179
# XXX: Use the underlying BzrError to always generate the args
180
# attribute if it doesn't exist. We can't use super here, because
181
# exceptions are old-style classes in python2.4 (but new in 2.5).
183
symbol_versioning.warn('BzrNewError was deprecated in bzr 0.13; '
184
'please convert %s to use BzrError instead'
185
% self.__class__.__name__,
188
BzrError.__init__(self, *args)
189
for key, value in kwds.items():
190
setattr(self, key, value)
194
# __str__() should always return a 'str' object
195
# never a 'unicode' object.
196
s = self.__doc__ % self.__dict__
197
if isinstance(s, unicode):
198
return s.encode('utf8')
200
except (TypeError, NameError, ValueError, KeyError), e:
201
return 'Unprintable exception %s(%r): %r' \
202
% (self.__class__.__name__,
206
149
class AlreadyBuilding(BzrError):
208
151
_fmt = "The tree builder is already building a tree."
243
186
self.class_name = class_name
246
class IncompatibleAPI(BzrError):
248
_fmt = 'The API for "%(api)s" is not compatible with "%(wanted)s". '\
249
'It supports versions "%(minimum)s" to "%(current)s".'
251
def __init__(self, api, wanted, minimum, current):
189
class IncompatibleVersion(BzrError):
191
_fmt = 'API %(api)s is not compatible; one of versions %(wanted)r '\
192
'is required, but current version is %(current)r.'
194
def __init__(self, api, wanted, current):
253
196
self.wanted = wanted
254
self.minimum = minimum
255
197
self.current = current
312
254
_fmt = 'There is no public branch set for "%(branch_url)s".'
314
256
def __init__(self, branch):
315
import bzrlib.urlutils as urlutils
257
from . import urlutils
316
258
public_location = urlutils.unescape_for_display(branch.base, 'ascii')
317
259
BzrError.__init__(self, branch_url=public_location)
320
class NoHelpTopic(BzrError):
322
_fmt = ("No help could be found for '%(topic)s'. "
323
"Please use 'bzr help topics' to obtain a list of topics.")
325
def __init__(self, topic):
329
262
class NoSuchId(BzrError):
331
264
_fmt = 'The file id "%(file_id)s" is not present in the tree %(tree)s.'
409
342
self.not_locked = not_locked
412
class BzrOptionError(BzrCommandError):
414
_fmt = "Error in command line options"
417
345
class BadIndexFormatSignature(BzrError):
419
347
_fmt = "%(value)s is not an index of type %(_type)s."
470
398
self.value = value
473
class BadOptionValue(BzrError):
475
_fmt = """Bad value "%(value)s" for option "%(name)s"."""
477
def __init__(self, name, value):
478
BzrError.__init__(self, name=name, value=value)
481
401
class StrictCommitFailed(BzrError):
483
403
_fmt = "Commit refused because there are unknown files in the tree"
516
436
"""Used when renaming and both source and dest exist."""
518
438
_fmt = ("Could not rename %(source)s => %(dest)s because both files exist."
519
" (Use --after to tell bzr about a rename that has already"
439
" (Use --after to tell brz about a rename that has already"
520
440
" happened)%(extra)s")
522
442
def __init__(self, source, dest, extra=None):
569
489
_fmt = 'Permission denied: "%(path)s"%(extra)s'
572
class InvalidURL(PathError):
574
_fmt = 'Invalid url supplied to transport: "%(path)s"%(extra)s'
577
class InvalidURLJoin(PathError):
579
_fmt = "Invalid URL join request: %(reason)s: %(base)r + %(join_args)r"
581
def __init__(self, reason, base, join_args):
584
self.join_args = join_args
585
PathError.__init__(self, base, reason)
588
class InvalidRebaseURLs(PathError):
590
_fmt = "URLs differ by more than path: %(from_)r and %(to)r"
592
def __init__(self, from_, to):
595
PathError.__init__(self, from_, 'URLs differ by more than path.')
598
492
class UnavailableRepresentation(InternalBzrError):
600
494
_fmt = ("The encoding '%(wanted)s' is not available for key %(key)s which "
610
504
class UnknownHook(BzrError):
612
_fmt = "The %(type)s hook '%(hook)s' is unknown in this version of bzrlib."
506
_fmt = "The %(type)s hook '%(hook)s' is unknown in this version of breezy."
614
508
def __init__(self, hook_type, hook_name):
615
509
BzrError.__init__(self)
622
516
_fmt = 'Unsupported protocol for url "%(path)s"%(extra)s'
624
def __init__(self, url, extra):
518
def __init__(self, url, extra=""):
625
519
PathError.__init__(self, url, extra=extra)
705
599
_fmt = 'Not a branch: "%(path)s"%(detail)s.'
707
def __init__(self, path, detail=None, bzrdir=None):
708
import bzrlib.urlutils as urlutils
601
def __init__(self, path, detail=None, controldir=None):
602
from . import urlutils
709
603
path = urlutils.unescape_for_display(path, 'ascii')
710
604
if detail is not None:
711
605
detail = ': ' + detail
712
606
self.detail = detail
607
self.controldir = controldir
714
608
PathError.__init__(self, path=path)
717
# XXX: Ideally self.detail would be a property, but Exceptions in
718
# Python 2.4 have to be old-style classes so properties don't work.
719
# Instead we override _format.
611
return '<%s %r>' % (self.__class__.__name__, self.__dict__)
613
def _get_format_string(self):
614
# GZ 2017-06-08: Not the best place to lazy fill detail in.
720
615
if self.detail is None:
721
if self.bzrdir is not None:
723
self.bzrdir.open_repository()
724
except NoRepositoryPresent:
727
self.detail = ': location is a repository'
616
self.detail = self._get_detail()
617
return super(NotBranchError, self)._get_format_string()
619
def _get_detail(self):
620
if self.controldir is not None:
622
self.controldir.open_repository()
623
except NoRepositoryPresent:
625
except Exception as e:
626
# Just ignore unexpected errors. Raising arbitrary errors
627
# during str(err) can provoke strange bugs. Concretely
628
# Launchpad's codehosting managed to raise NotBranchError
629
# here, and then get stuck in an infinite loop/recursion
630
# trying to str() that error. All this error really cares
631
# about that there's no working repository there, and if
632
# open_repository() fails, there probably isn't.
633
return ': ' + e.__class__.__name__
730
return PathError._format(self)
635
return ': location is a repository'
733
639
class NoSubmitBranch(PathError):
735
641
_fmt = 'No submit branch available for branch "%(path)s"'
737
643
def __init__(self, branch):
738
import bzrlib.urlutils as urlutils
644
from . import urlutils
739
645
self.path = urlutils.unescape_for_display(branch.base, 'ascii')
648
class AlreadyControlDirError(PathError):
650
_fmt = 'A control directory already exists: "%(path)s".'
742
653
class AlreadyBranchError(PathError):
744
655
_fmt = 'Already a branch: "%(path)s".'
658
class InvalidBranchName(PathError):
660
_fmt = "Invalid branch name: %(name)s"
662
def __init__(self, name):
663
BzrError.__init__(self)
667
class ParentBranchExists(AlreadyBranchError):
669
_fmt = 'Parent branch already exists: "%(path)s".'
747
672
class BranchExistsWithoutWorkingTree(PathError):
749
674
_fmt = 'Directory contains a branch, but no working tree \
750
(use bzr checkout if you wish to build a working tree): "%(path)s"'
675
(use brz checkout if you wish to build a working tree): "%(path)s"'
753
678
class AtomicFileAlreadyClosed(PathError):
773
698
class NoRepositoryPresent(BzrError):
775
700
_fmt = 'No repository present: "%(path)s"'
776
def __init__(self, bzrdir):
777
BzrError.__init__(self)
778
self.path = bzrdir.transport.clone('..').base
781
class FileInWrongBranch(BzrError):
783
_fmt = 'File "%(path)s" is not in branch %(branch_base)s.'
785
def __init__(self, branch, path):
786
BzrError.__init__(self)
788
self.branch_base = branch.base
701
def __init__(self, controldir):
702
BzrError.__init__(self)
703
self.path = controldir.transport.clone('..').base
792
706
class UnsupportedFormatError(BzrError):
794
_fmt = "Unsupported branch format: %(format)s\nPlease run 'bzr upgrade'"
708
_fmt = "Unsupported branch format: %(format)s\nPlease run 'brz upgrade'"
797
711
class UnknownFormatError(BzrError):
806
720
class IncompatibleFormat(BzrError):
808
_fmt = "Format %(format)s is not compatible with .bzr version %(bzrdir)s."
810
def __init__(self, format, bzrdir_format):
811
BzrError.__init__(self)
813
self.bzrdir = bzrdir_format
722
_fmt = "Format %(format)s is not compatible with .bzr version %(controldir)s."
724
def __init__(self, format, controldir_format):
725
BzrError.__init__(self)
727
self.controldir = controldir_format
730
class ParseFormatError(BzrError):
732
_fmt = "Parse error on line %(lineno)d of %(format)s format: %(line)s"
734
def __init__(self, format, lineno, line, text):
735
BzrError.__init__(self)
816
742
class IncompatibleRepositories(BzrError):
850
776
"""Construct a new AlreadyVersionedError.
852
778
:param path: This is the path which is versioned,
853
which should be in a user friendly form.
779
which should be in a user friendly form.
854
780
:param context_info: If given, this is information about the context,
855
which could explain why this is expected to not be versioned.
781
which could explain why this is expected to not be versioned.
857
783
BzrError.__init__(self)
871
797
"""Construct a new NotVersionedError.
873
799
:param path: This is the path which is not versioned,
874
which should be in a user friendly form.
800
which should be in a user friendly form.
875
801
:param context_info: If given, this is information about the context,
876
which could explain why this is expected to be versioned.
802
which could explain why this is expected to be versioned.
878
804
BzrError.__init__(self)
889
815
_fmt = "Path(s) are not versioned: %(paths_as_string)s"
891
817
def __init__(self, paths):
892
from bzrlib.osutils import quotefn
818
from breezy.osutils import quotefn
893
819
BzrError.__init__(self)
894
820
self.paths = paths
895
821
self.paths_as_string = ' '.join([quotefn(p) for p in paths])
947
873
# original exception is available as e.original_error
949
875
# New code should prefer to raise specific subclasses
950
def __init__(self, message):
951
# Python 2.5 uses a slot for StandardError.message,
952
# so use a different variable name. We now work around this in
953
# BzrError.__str__, but this member name is kept for compatability.
876
def __init__(self, msg):
957
880
class LockActive(LockError):
1075
996
self.target = target
999
class LockCorrupt(LockError):
1001
_fmt = ("Lock is apparently held, but corrupted: %(corruption_info)s\n"
1002
"Use 'brz break-lock' to clear it")
1004
internal_error = False
1006
def __init__(self, corruption_info, file_data=None):
1007
self.corruption_info = corruption_info
1008
self.file_data = file_data
1078
1011
class LockNotHeld(LockError):
1080
1013
_fmt = "Lock not held: %(lock)s"
1119
1052
BzrError.__init__(self, files=files, files_str=files_str)
1055
class ExcludesUnsupported(BzrError):
1057
_fmt = ('Excluding paths during commit is not supported by '
1058
'repository at %(repository)r.')
1060
def __init__(self, repository):
1061
BzrError.__init__(self, repository=repository)
1122
1064
class BadCommitMessageEncoding(BzrError):
1124
1066
_fmt = 'The specified commit message contains characters unsupported by '\
1180
1122
class InvalidRevisionSpec(BzrError):
1182
1124
_fmt = ("Requested revision: '%(spec)s' does not exist in branch:"
1183
" %(branch)s%(extra)s")
1125
" %(branch_url)s%(extra)s")
1185
1127
def __init__(self, spec, branch, extra=None):
1186
1128
BzrError.__init__(self, branch=branch, spec=spec)
1129
self.branch_url = getattr(branch, 'user_url', str(branch))
1188
1131
self.extra = '\n' + str(extra)
1190
1133
self.extra = ''
1193
class HistoryMissing(BzrError):
1195
_fmt = "%(branch)s is missing %(object_type)s {%(object_id)s}"
1198
1136
class AppendRevisionsOnlyViolation(BzrError):
1200
1138
_fmt = ('Operation denied because it would change the main history,'
1202
1140
' branch "%(location)s".')
1204
1142
def __init__(self, location):
1205
import bzrlib.urlutils as urlutils
1143
import breezy.urlutils as urlutils
1206
1144
location = urlutils.unescape_for_display(location, 'ascii')
1207
1145
BzrError.__init__(self, location=location)
1265
1203
not_ancestor_id=not_ancestor_id)
1268
class AmbiguousBase(BzrError):
1270
def __init__(self, bases):
1271
symbol_versioning.warn("BzrError AmbiguousBase has been deprecated "
1272
"as of bzrlib 0.8.", DeprecationWarning, stacklevel=2)
1273
msg = ("The correct base is unclear, because %s are all equally close"
1275
BzrError.__init__(self, msg)
1279
1206
class NoCommits(BranchError):
1281
1208
_fmt = "Branch %(branch)s has no commits."
1339
1266
self.error = error
1342
class WeaveError(BzrError):
1344
_fmt = "Error in processing weave: %(msg)s"
1346
def __init__(self, msg=None):
1347
BzrError.__init__(self)
1351
class WeaveRevisionAlreadyPresent(WeaveError):
1353
_fmt = "Revision {%(revision_id)s} already present in %(weave)s"
1355
def __init__(self, revision_id, weave):
1357
WeaveError.__init__(self)
1358
self.revision_id = revision_id
1362
class WeaveRevisionNotPresent(WeaveError):
1364
_fmt = "Revision {%(revision_id)s} not present in %(weave)s"
1366
def __init__(self, revision_id, weave):
1367
WeaveError.__init__(self)
1368
self.revision_id = revision_id
1372
class WeaveFormatError(WeaveError):
1374
_fmt = "Weave invariant violated: %(what)s"
1376
def __init__(self, what):
1377
WeaveError.__init__(self)
1381
class WeaveParentMismatch(WeaveError):
1383
_fmt = "Parents are mismatched between two revisions. %(message)s"
1386
class WeaveInvalidChecksum(WeaveError):
1388
_fmt = "Text did not match it's checksum: %(message)s"
1391
class WeaveTextDiffers(WeaveError):
1393
_fmt = ("Weaves differ on text content. Revision:"
1394
" {%(revision_id)s}, %(weave_a)s, %(weave_b)s")
1396
def __init__(self, revision_id, weave_a, weave_b):
1397
WeaveError.__init__(self)
1398
self.revision_id = revision_id
1399
self.weave_a = weave_a
1400
self.weave_b = weave_b
1403
class WeaveTextDiffers(WeaveError):
1405
_fmt = ("Weaves differ on text content. Revision:"
1406
" {%(revision_id)s}, %(weave_a)s, %(weave_b)s")
1408
def __init__(self, revision_id, weave_a, weave_b):
1409
WeaveError.__init__(self)
1410
self.revision_id = revision_id
1411
self.weave_a = weave_a
1412
self.weave_b = weave_b
1415
1269
class VersionedFileError(BzrError):
1417
1271
_fmt = "Versioned file error"
1629
1484
def __init__(self, exc_info):
1630
1485
import traceback
1486
# GZ 2010-08-10: Cycle with exc_tb/exc_info affects at least one test
1631
1487
self.exc_type, self.exc_value, self.exc_tb = exc_info
1632
1488
self.exc_info = exc_info
1633
1489
traceback_strings = traceback.format_exception(
1672
1528
_fmt = "Connection closed: %(msg)s %(orig_error)s"
1531
class ConnectionTimeout(ConnectionError):
1533
_fmt = "Connection Timeout: %(msg)s%(orig_error)s"
1675
1536
class InvalidRange(TransportError):
1677
1538
_fmt = "Invalid range access in %(path)s at %(offset)s: %(msg)s"
1685
1546
class InvalidHttpResponse(TransportError):
1687
_fmt = "Invalid http response for %(path)s: %(msg)s"
1548
_fmt = "Invalid http response for %(path)s: %(msg)s%(orig_error)s"
1689
1550
def __init__(self, path, msg, orig_error=None):
1690
1551
self.path = path
1552
if orig_error is None:
1555
# This is reached for obscure and unusual errors so we want to
1556
# preserve as much info as possible to ease debug.
1557
orig_error = ': %r' % (orig_error,)
1691
1558
TransportError.__init__(self, msg, orig_error=orig_error)
1700
1567
InvalidHttpResponse.__init__(self, path, msg)
1570
class HttpBoundaryMissing(InvalidHttpResponse):
1571
"""A multipart response ends with no boundary marker.
1573
This is a special case caused by buggy proxies, described in
1574
<https://bugs.launchpad.net/bzr/+bug/198646>.
1577
_fmt = "HTTP MIME Boundary missing for %(path)s: %(msg)s"
1579
def __init__(self, path, msg):
1580
InvalidHttpResponse.__init__(self, path, msg)
1703
1583
class InvalidHttpContentType(InvalidHttpResponse):
1705
1585
_fmt = 'Invalid http Content-type "%(ctype)s" for %(path)s: %(msg)s'
1733
1613
_fmt = "Working tree has conflicts."
1736
class ParseConfigError(BzrError):
1738
def __init__(self, errors, filename):
1739
if filename is None:
1741
message = "Error(s) parsing config file %s:\n%s" % \
1742
(filename, ('\n'.join(e.msg for e in errors)))
1743
BzrError.__init__(self, message)
1746
class NoEmailInUsername(BzrError):
1748
_fmt = "%(username)r does not seem to contain a reasonable email address"
1750
def __init__(self, username):
1751
BzrError.__init__(self)
1752
self.username = username
1755
class SigningFailed(BzrError):
1757
_fmt = 'Failed to gpg sign data with command "%(command_line)s"'
1759
def __init__(self, command_line):
1760
BzrError.__init__(self, command_line=command_line)
1616
class DependencyNotPresent(BzrError):
1618
_fmt = 'Unable to import library "%(library)s": %(error)s'
1620
def __init__(self, library, error):
1621
BzrError.__init__(self, library=library, error=error)
1763
1624
class WorkingTreeNotRevision(BzrError):
1925
1786
_fmt = "Moving the root directory is not supported at this time"
1789
class TransformRenameFailed(BzrError):
1791
_fmt = "Failed to rename %(from_path)s to %(to_path)s: %(why)s"
1793
def __init__(self, from_path, to_path, why, errno):
1794
self.from_path = from_path
1795
self.to_path = to_path
1928
1800
class BzrMoveFailedError(BzrError):
1930
_fmt = "Could not move %(from_path)s%(operator)s %(to_path)s%(extra)s"
1802
_fmt = ("Could not move %(from_path)s%(operator)s %(to_path)s"
1803
"%(_has_extra)s%(extra)s")
1932
1805
def __init__(self, from_path='', to_path='', extra=None):
1933
from bzrlib.osutils import splitpath
1806
from breezy.osutils import splitpath
1934
1807
BzrError.__init__(self)
1936
self.extra = ': ' + str(extra)
1809
self.extra, self._has_extra = extra, ': '
1811
self.extra = self._has_extra = ''
1940
1813
has_from = len(from_path) > 0
1941
1814
has_to = len(to_path) > 0
1963
1836
class BzrRenameFailedError(BzrMoveFailedError):
1965
_fmt = "Could not rename %(from_path)s%(operator)s %(to_path)s%(extra)s"
1838
_fmt = ("Could not rename %(from_path)s%(operator)s %(to_path)s"
1839
"%(_has_extra)s%(extra)s")
1967
1841
def __init__(self, from_path, to_path, extra=None):
1968
1842
BzrMoveFailedError.__init__(self, from_path, to_path, extra)
1970
class BzrRemoveChangedFilesError(BzrError):
1971
"""Used when user is trying to remove changed files."""
1973
_fmt = ("Can't safely remove modified or unknown files:\n"
1974
"%(changes_as_text)s"
1975
"Use --keep to not delete them, or --force to delete them regardless.")
1977
def __init__(self, tree_delta):
1978
BzrError.__init__(self)
1979
self.changes_as_text = tree_delta.get_changes_as_text()
1980
#self.paths_as_string = '\n'.join(changed_files)
1981
#self.paths_as_string = '\n'.join([quotefn(p) for p in changed_files])
1984
1845
class BzrBadParameterNotString(BzrBadParameter):
2002
1863
_fmt = "Parameter %(param)s contains a newline."
2005
class DependencyNotPresent(BzrError):
2007
_fmt = 'Unable to import library "%(library)s": %(error)s'
2009
def __init__(self, library, error):
2010
BzrError.__init__(self, library=library, error=error)
2013
1866
class ParamikoNotPresent(DependencyNotPresent):
2015
1868
_fmt = "Unable to import paramiko (required for sftp support): %(error)s"
2076
1929
class ExistingContent(BzrError):
2077
# Added in bzrlib 0.92, used by VersionedFile.add_lines.
1930
# Added in breezy 0.92, used by VersionedFile.add_lines.
2079
1932
_fmt = "The content being inserted is already present."
2124
1977
class OutOfDateTree(BzrError):
2126
_fmt = "Working tree is out of date, please run 'bzr update'.%(more)s"
1979
_fmt = "Working tree is out of date, please run 'brz update'.%(more)s"
2128
1981
def __init__(self, tree, more=None):
2129
1982
if more is None:
2141
1994
'"%(revstring)s".'
2143
1996
def __init__(self, public_location, revstring):
2144
import bzrlib.urlutils as urlutils
1997
import breezy.urlutils as urlutils
2145
1998
public_location = urlutils.unescape_for_display(public_location,
2147
2000
BzrError.__init__(self, public_location=public_location,
2172
2025
class CorruptRepository(BzrError):
2174
2027
_fmt = ("An error has been detected in the repository %(repo_path)s.\n"
2175
"Please run bzr reconcile on this repository.")
2028
"Please run brz reconcile on this repository.")
2177
2030
def __init__(self, repo):
2178
2031
BzrError.__init__(self)
2106
class GhostTagsNotSupported(BzrError):
2108
_fmt = "Ghost tags not supported by format %(format)r."
2110
def __init__(self, format):
2111
self.format = format
2253
2114
class BinaryFile(BzrError):
2255
2116
_fmt = "File is binary but should be text."
2367
2228
class SSHVendorNotFound(BzrError):
2369
2230
_fmt = ("Don't know how to handle SSH connections."
2370
" Please set BZR_SSH environment variable.")
2231
" Please set BRZ_SSH environment variable.")
2373
2234
class GhostRevisionsHaveNoRevno(BzrError):
2525
2386
class TagsNotSupported(BzrError):
2527
2388
_fmt = ("Tags not supported by %(branch)s;"
2528
" you may be able to use bzr upgrade.")
2389
" you may be able to use brz upgrade.")
2530
2391
def __init__(self, branch):
2531
2392
self.branch = branch
2539
2400
self.tag_name = tag_name
2542
class MalformedBugIdentifier(BzrError):
2544
_fmt = ('Did not understand bug identifier %(bug_id)s: %(reason)s. '
2545
'See "bzr help bugs" for more information on this feature.')
2547
def __init__(self, bug_id, reason):
2548
self.bug_id = bug_id
2549
self.reason = reason
2552
class InvalidBugTrackerURL(BzrError):
2554
_fmt = ("The URL for bug tracker \"%(abbreviation)s\" doesn't "
2555
"contain {id}: %(url)s")
2557
def __init__(self, abbreviation, url):
2558
self.abbreviation = abbreviation
2562
class UnknownBugTrackerAbbreviation(BzrError):
2564
_fmt = ("Cannot find registered bug tracker called %(abbreviation)s "
2567
def __init__(self, abbreviation, branch):
2568
self.abbreviation = abbreviation
2569
self.branch = branch
2572
class InvalidLineInBugsProperty(BzrError):
2574
_fmt = ("Invalid line in bugs property: '%(line)s'")
2576
def __init__(self, line):
2580
class InvalidBugStatus(BzrError):
2582
_fmt = ("Invalid bug status: '%(status)s'")
2584
def __init__(self, status):
2585
self.status = status
2588
2403
class UnexpectedSmartServerResponse(BzrError):
2590
2405
_fmt = "Could not understand response from smart server: %(response_tuple)r"
2615
2430
class UnknownErrorFromSmartServer(BzrError):
2616
"""An ErrorFromSmartServer could not be translated into a typical bzrlib
2431
"""An ErrorFromSmartServer could not be translated into a typical breezy
2619
2434
This is distinct from ErrorFromSmartServer so that it is possible to
2620
2435
distinguish between the following two cases:
2621
- ErrorFromSmartServer was uncaught. This is logic error in the client
2622
and so should provoke a traceback to the user.
2623
- ErrorFromSmartServer was caught but its error_tuple could not be
2624
translated. This is probably because the server sent us garbage, and
2625
should not provoke a traceback.
2437
- ErrorFromSmartServer was uncaught. This is logic error in the client
2438
and so should provoke a traceback to the user.
2439
- ErrorFromSmartServer was caught but its error_tuple could not be
2440
translated. This is probably because the server sent us garbage, and
2441
should not provoke a traceback.
2628
2444
_fmt = "Server sent an unexpected error: %(error_tuple)r"
2718
2534
_fmt = "No mail-to address (--mail-to) or output (-o) specified."
2721
class UnknownMailClient(BzrError):
2723
_fmt = "Unknown mail client: %(mail_client)s"
2725
def __init__(self, mail_client):
2726
BzrError.__init__(self, mail_client=mail_client)
2729
2537
class MailClientNotFound(BzrError):
2731
2539
_fmt = "Unable to find mail client with the following names:"\
2753
2561
class BzrDirError(BzrError):
2755
def __init__(self, bzrdir):
2756
import bzrlib.urlutils as urlutils
2757
display_url = urlutils.unescape_for_display(bzrdir.user_url,
2563
def __init__(self, controldir):
2564
from . import urlutils
2565
display_url = urlutils.unescape_for_display(controldir.user_url,
2759
BzrError.__init__(self, bzrdir=bzrdir, display_url=display_url)
2567
BzrError.__init__(self, controldir=controldir, display_url=display_url)
2762
2570
class UnsyncedBranches(BzrDirError):
2764
2572
_fmt = ("'%(display_url)s' is not in sync with %(target_url)s. See"
2765
" bzr help sync-for-reconfigure.")
2573
" brz help sync-for-reconfigure.")
2767
def __init__(self, bzrdir, target_branch):
2768
BzrDirError.__init__(self, bzrdir)
2769
import bzrlib.urlutils as urlutils
2575
def __init__(self, controldir, target_branch):
2576
BzrError.__init__(self, controldir)
2577
from . import urlutils
2770
2578
self.target_url = urlutils.unescape_for_display(target_branch.base,
2826
2634
class UncommittedChanges(BzrError):
2828
2636
_fmt = ('Working tree "%(display_url)s" has uncommitted changes'
2829
' (See bzr status).%(more)s')
2637
' (See brz status).%(more)s')
2831
2639
def __init__(self, tree, more=None):
2832
2640
if more is None:
2835
2643
more = ' ' + more
2836
import bzrlib.urlutils as urlutils
2837
display_url = urlutils.unescape_for_display(
2838
tree.user_url, 'ascii')
2644
import breezy.urlutils as urlutils
2645
user_url = getattr(tree, "user_url", None)
2646
if user_url is None:
2647
display_url = str(tree)
2649
display_url = urlutils.unescape_for_display(user_url, 'ascii')
2839
2650
BzrError.__init__(self, tree=tree, display_url=display_url, more=more)
2653
class StoringUncommittedNotSupported(BzrError):
2655
_fmt = ('Branch "%(display_url)s" does not support storing uncommitted'
2658
def __init__(self, branch):
2659
import breezy.urlutils as urlutils
2660
user_url = getattr(branch, "user_url", None)
2661
if user_url is None:
2662
display_url = str(branch)
2664
display_url = urlutils.unescape_for_display(user_url, 'ascii')
2665
BzrError.__init__(self, branch=branch, display_url=display_url)
2668
class ShelvedChanges(UncommittedChanges):
2670
_fmt = ('Working tree "%(display_url)s" has shelved changes'
2671
' (See brz shelve --list).%(more)s')
2842
2674
class MissingTemplateVariable(BzrError):
2844
2676
_fmt = 'Variable {%(name)s} is not available.'
2889
2721
def __str__(self):
2891
_fmt = ('"%s" is not a standard bzr command. \n'
2723
_fmt = ('"%s" is not a standard brz command. \n'
2892
2724
'However, the following official plugin provides this command: %s\n'
2893
2725
'You can install it by going to: %s'
2894
2726
% (self.cmd_name, self.plugin_metadata['name'],
2907
2739
'user encoding %(user_encoding)s')
2909
2741
def __init__(self, path, kind):
2910
from bzrlib.osutils import get_user_encoding
2742
from breezy.osutils import get_user_encoding
2911
2743
self.path = path
2912
2744
self.kind = kind
2913
self.user_encoding = osutils.get_user_encoding()
2745
self.user_encoding = get_user_encoding()
2916
2748
class NoSuchAlias(BzrError):
2961
2793
BzrError.__init__(self, unknowns_str=", ".join(unknowns))
2964
class HookFailed(BzrError):
2965
"""Raised when a pre_change_branch_tip hook function fails anything other
2966
than TipChangeRejected.
2968
Note that this exception is no longer raised, and the import is only left
2969
to be nice to code which might catch it in a plugin.
2972
_fmt = ("Hook '%(hook_name)s' during %(hook_stage)s failed:\n"
2973
"%(traceback_text)s%(exc_value)s")
2975
def __init__(self, hook_stage, hook_name, exc_info, warn=True):
2977
symbol_versioning.warn("BzrError HookFailed has been deprecated "
2978
"as of bzrlib 2.1.", DeprecationWarning, stacklevel=2)
2980
self.hook_stage = hook_stage
2981
self.hook_name = hook_name
2982
self.exc_info = exc_info
2983
self.exc_type = exc_info[0]
2984
self.exc_value = exc_info[1]
2985
self.exc_tb = exc_info[2]
2986
self.traceback_text = ''.join(traceback.format_tb(self.exc_tb))
2989
2796
class TipChangeRejected(BzrError):
2990
2797
"""A pre_change_branch_tip hook function may raise this to cleanly and
2991
2798
explicitly abort a change to a branch tip.
3002
2809
_fmt = "Shelf corrupt."
2812
class DecompressCorruption(BzrError):
2814
_fmt = "Corruption while decompressing repository file%(orig_error)s"
2816
def __init__(self, orig_error=None):
2817
if orig_error is not None:
2818
self.orig_error = ", %s" % (orig_error,)
2820
self.orig_error = ""
2821
BzrError.__init__(self)
3005
2824
class NoSuchShelfId(BzrError):
3007
2826
_fmt = 'No changes are shelved with id "%(shelf_id)d".'
3117
2936
self.target_branch = target_branch
3120
class FileTimestampUnavailable(BzrError):
3122
_fmt = "The filestamp for %(path)s is not available."
3124
internal_error = True
3126
def __init__(self, path):
3130
2939
class NoColocatedBranchSupport(BzrError):
3132
_fmt = ("%(bzrdir)r does not support co-located branches.")
3134
def __init__(self, bzrdir):
3135
self.bzrdir = bzrdir
3137
class NoWhoami(BzrError):
3139
_fmt = ('Unable to determine your name.\n'
3140
"Please, set your name with the 'whoami' command.\n"
3141
'E.g. bzr whoami "Your Name <name@example.com>"')
2941
_fmt = ("%(controldir)r does not support co-located branches.")
2943
def __init__(self, controldir):
2944
self.controldir = controldir
2947
class RecursiveBind(BzrError):
2949
_fmt = ('Branch "%(branch_url)s" appears to be bound to itself. '
2950
'Please use `brz unbind` to fix.')
2952
def __init__(self, branch_url):
2953
self.branch_url = branch_url
2956
class HpssVfsRequestNotAllowed(BzrError):
2958
_fmt = ("VFS requests over the smart server are not allowed. Encountered: "
2959
"%(method)s, %(arguments)s.")
2961
def __init__(self, method, arguments):
2962
self.method = method
2963
self.arguments = arguments
2966
class UnsupportedKindChange(BzrError):
2968
_fmt = ("Kind change from %(from_kind)s to %(to_kind)s for "
2969
"%(path)s not supported by format %(format)r")
2971
def __init__(self, path, from_kind, to_kind, format):
2973
self.from_kind = from_kind
2974
self.to_kind = to_kind
2975
self.format = format
2978
class FeatureAlreadyRegistered(BzrError):
2980
_fmt = 'The feature %(feature)s has already been registered.'
2982
def __init__(self, feature):
2983
self.feature = feature
2986
class ChangesAlreadyStored(BzrCommandError):
2988
_fmt = ('Cannot store uncommitted changes because this branch already'
2989
' stores uncommitted changes.')