34
# return codes from the brz program
46
# return codes from the bzr program
37
49
EXIT_INTERNAL_ERROR = 4
40
class BzrError(Exception):
52
class BzrError(StandardError):
42
Base class for errors raised by breezy.
54
Base class for errors raised by bzrlib.
44
:cvar internal_error: if True this was probably caused by a brz bug and
45
should be displayed with a traceback; if False (or absent) this was
46
probably a user or environment error and they don't need the gory
47
details. (That can be overridden by -Derror on the command line.)
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
61
:cvar _fmt: Format string to display the error; this is expanded
50
by the instance's dict.
62
by the instance's dict.
53
65
internal_error = False
95
106
# __str__() should always return a 'str' object
96
107
# never a 'unicode' object.
98
except Exception as e:
100
return 'Unprintable exception %s: dict=%r, fmt=%r, error=%r' \
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.
137
return '%s(%s)' % (self.__class__.__name__, str(self))
139
def _get_format_string(self):
140
"""Return format string for this exception or None"""
141
fmt = getattr(self, '_fmt', 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' \
101
151
% (self.__class__.__name__,
103
153
getattr(self, '_fmt', None),
109
return '%s(%s)' % (self.__class__.__name__, str(self))
111
def _get_format_string(self):
112
"""Return format string for this exception or None"""
113
fmt = getattr(self, '_fmt', None)
115
from breezy.i18n import gettext
116
return gettext(fmt) # _fmt strings should be ascii
118
156
def __eq__(self, other):
119
157
if self.__class__ is not other.__class__:
120
158
return NotImplemented
121
159
return self.__dict__ == other.__dict__
127
162
class InternalBzrError(BzrError):
128
163
"""Base class for errors that are internal in nature.
135
170
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
class AlreadyBuilding(BzrError):
208
_fmt = "The tree builder is already building a tree."
138
211
class BranchError(BzrError):
139
212
"""Base class for concrete 'errors about a branch'."""
154
class IncompatibleVersion(BzrError):
156
_fmt = 'API %(api)s is not compatible; one of versions %(wanted)r '\
157
'is required, but current version is %(current)r.'
159
def __init__(self, api, wanted, current):
227
class DirstateCorrupt(BzrError):
229
_fmt = "The dirstate file (%(state)s) appears to be corrupt: %(msg)s"
231
def __init__(self, state, msg):
232
BzrError.__init__(self)
237
class DisabledMethod(InternalBzrError):
239
_fmt = "The smart server method '%(class_name)s' is disabled."
241
def __init__(self, class_name):
242
BzrError.__init__(self)
243
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):
161
253
self.wanted = wanted
254
self.minimum = minimum
162
255
self.current = current
210
312
_fmt = 'There is no public branch set for "%(branch_url)s".'
212
314
def __init__(self, branch):
213
from . import urlutils
315
import bzrlib.urlutils as urlutils
214
316
public_location = urlutils.unescape_for_display(branch.base, 'ascii')
215
317
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):
218
329
class NoSuchId(BzrError):
220
331
_fmt = 'The file id "%(file_id)s" is not present in the tree %(tree)s.'
339
class NoSuchIdInRepository(NoSuchId):
341
_fmt = ('The file id "%(file_id)s" is not present in the repository'
344
def __init__(self, repository, file_id):
345
BzrError.__init__(self, repository=repository, file_id=file_id)
228
348
class NotStacked(BranchError):
230
350
_fmt = "The branch '%(branch)s' is not stacked."
353
class InventoryModified(InternalBzrError):
355
_fmt = ("The current inventory for the tree %(tree)r has been modified,"
356
" so a clean inventory cannot be read without data loss.")
358
def __init__(self, tree):
233
362
class NoWorkingTree(BzrError):
235
364
_fmt = 'No WorkingTree exists for "%(base)s".'
286
409
self.not_locked = not_locked
412
class BzrOptionError(BzrCommandError):
414
_fmt = "Error in command line options"
417
class BadIndexFormatSignature(BzrError):
419
_fmt = "%(value)s is not an index of type %(_type)s."
421
def __init__(self, value, _type):
422
BzrError.__init__(self)
427
class BadIndexData(BzrError):
429
_fmt = "Error in data for index %(value)s."
431
def __init__(self, value):
432
BzrError.__init__(self)
436
class BadIndexDuplicateKey(BzrError):
438
_fmt = "The key '%(key)s' is already in index '%(index)s'."
440
def __init__(self, key, index):
441
BzrError.__init__(self)
446
class BadIndexKey(BzrError):
448
_fmt = "The key '%(key)s' is not a valid key."
450
def __init__(self, key):
451
BzrError.__init__(self)
455
class BadIndexOptions(BzrError):
457
_fmt = "Could not parse options for index %(value)s."
459
def __init__(self, value):
460
BzrError.__init__(self)
464
class BadIndexValue(BzrError):
466
_fmt = "The value '%(value)s' is not a valid value."
468
def __init__(self, value):
469
BzrError.__init__(self)
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)
289
481
class StrictCommitFailed(BzrError):
291
483
_fmt = "Commit refused because there are unknown files in the tree"
377
569
_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
class UnavailableRepresentation(InternalBzrError):
600
_fmt = ("The encoding '%(wanted)s' is not available for key %(key)s which "
601
"is encoded as '%(native)s'.")
603
def __init__(self, key, wanted, native):
604
InternalBzrError.__init__(self)
610
class UnknownHook(BzrError):
612
_fmt = "The %(type)s hook '%(hook)s' is unknown in this version of bzrlib."
614
def __init__(self, hook_type, hook_name):
615
BzrError.__init__(self)
616
self.type = hook_type
617
self.hook = hook_name
380
620
class UnsupportedProtocol(PathError):
382
622
_fmt = 'Unsupported protocol for url "%(path)s"%(extra)s'
384
def __init__(self, url, extra=""):
624
def __init__(self, url, extra):
385
625
PathError.__init__(self, url, extra=extra)
628
class UnstackableBranchFormat(BzrError):
630
_fmt = ("The branch '%(url)s'(%(format)s) is not a stackable format. "
631
"You will need to upgrade the branch to permit branch stacking.")
633
def __init__(self, format, url):
634
BzrError.__init__(self)
388
639
class UnstackableLocationError(BzrError):
390
641
_fmt = "The branch '%(branch_url)s' cannot be stacked on '%(target_url)s'."
454
705
_fmt = 'Not a branch: "%(path)s"%(detail)s.'
456
def __init__(self, path, detail=None, controldir=None):
457
from . import urlutils
458
path = urlutils.unescape_for_display(path, 'ascii')
459
if detail is not None:
460
detail = ': ' + detail
462
self.controldir = controldir
463
PathError.__init__(self, path=path)
707
def __init__(self, path, detail=None, bzrdir=None):
708
import bzrlib.urlutils as urlutils
709
path = urlutils.unescape_for_display(path, 'ascii')
710
if detail is not None:
711
detail = ': ' + detail
714
PathError.__init__(self, path=path)
465
716
def __repr__(self):
466
717
return '<%s %r>' % (self.__class__.__name__, self.__dict__)
468
def _get_format_string(self):
469
# GZ 2017-06-08: Not the best place to lazy fill detail in.
720
# XXX: Ideally self.detail would be a property, but Exceptions in
721
# Python 2.4 have to be old-style classes so properties don't work.
722
# Instead we override _format.
470
723
if self.detail is None:
471
self.detail = self._get_detail()
472
return super(NotBranchError, self)._get_format_string()
474
def _get_detail(self):
475
if self.controldir is not None:
477
self.controldir.open_repository()
478
except NoRepositoryPresent:
480
except Exception as e:
481
# Just ignore unexpected errors. Raising arbitrary errors
482
# during str(err) can provoke strange bugs. Concretely
483
# Launchpad's codehosting managed to raise NotBranchError
484
# here, and then get stuck in an infinite loop/recursion
485
# trying to str() that error. All this error really cares
486
# about that there's no working repository there, and if
487
# open_repository() fails, there probably isn't.
488
return ': ' + e.__class__.__name__
724
if self.bzrdir is not None:
726
self.bzrdir.open_repository()
727
except NoRepositoryPresent:
730
# Just ignore unexpected errors. Raising arbitrary errors
731
# during str(err) can provoke strange bugs. Concretely
732
# Launchpad's codehosting managed to raise NotBranchError
733
# here, and then get stuck in an infinite loop/recursion
734
# trying to str() that error. All this error really cares
735
# about that there's no working repository there, and if
736
# open_repository() fails, there probably isn't.
739
self.detail = ': location is a repository'
490
return ': location is a repository'
742
return PathError._format(self)
494
745
class NoSubmitBranch(PathError):
510
756
_fmt = 'Already a branch: "%(path)s".'
513
class InvalidBranchName(PathError):
515
_fmt = "Invalid branch name: %(name)s"
517
def __init__(self, name):
518
BzrError.__init__(self)
522
class ParentBranchExists(AlreadyBranchError):
524
_fmt = 'Parent branch already exists: "%(path)s".'
527
759
class BranchExistsWithoutWorkingTree(PathError):
529
761
_fmt = 'Directory contains a branch, but no working tree \
530
(use brz checkout if you wish to build a working tree): "%(path)s"'
762
(use bzr checkout if you wish to build a working tree): "%(path)s"'
765
class AtomicFileAlreadyClosed(PathError):
767
_fmt = ('"%(function)s" called on an AtomicFile after it was closed:'
770
def __init__(self, path, function):
771
PathError.__init__(self, path=path, extra=None)
772
self.function = function
533
775
class InaccessibleParent(PathError):
543
785
class NoRepositoryPresent(BzrError):
545
787
_fmt = 'No repository present: "%(path)s"'
547
def __init__(self, controldir):
548
BzrError.__init__(self)
549
self.path = controldir.transport.clone('..').base
788
def __init__(self, bzrdir):
789
BzrError.__init__(self)
790
self.path = bzrdir.transport.clone('..').base
793
class FileInWrongBranch(BzrError):
795
_fmt = 'File "%(path)s" is not in branch %(branch_base)s.'
797
# use PathNotChild instead
798
@symbol_versioning.deprecated_method(symbol_versioning.deprecated_in((2, 3, 0)))
799
def __init__(self, branch, path):
800
BzrError.__init__(self)
802
self.branch_base = branch.base
552
806
class UnsupportedFormatError(BzrError):
554
_fmt = "Unsupported branch format: %(format)s\nPlease run 'brz upgrade'"
808
_fmt = "Unsupported branch format: %(format)s\nPlease run 'bzr upgrade'"
557
811
class UnknownFormatError(BzrError):
566
820
class IncompatibleFormat(BzrError):
568
_fmt = "Format %(format)s is not compatible with .bzr version %(controldir)s."
570
def __init__(self, format, controldir_format):
571
BzrError.__init__(self)
573
self.controldir = controldir_format
576
class ParseFormatError(BzrError):
578
_fmt = "Parse error on line %(lineno)d of %(format)s format: %(line)s"
580
def __init__(self, format, lineno, line, text):
581
BzrError.__init__(self)
822
_fmt = "Format %(format)s is not compatible with .bzr version %(bzrdir)s."
824
def __init__(self, format, bzrdir_format):
825
BzrError.__init__(self)
827
self.bzrdir = bzrdir_format
588
830
class IncompatibleRepositories(BzrError):
883
1125
self.lock_token = lock_token
1128
class PointlessCommit(BzrError):
1130
_fmt = "No changes to commit"
1133
class CannotCommitSelectedFileMerge(BzrError):
1135
_fmt = 'Selected-file commit of merges is not supported yet:'\
1136
' files %(files_str)s'
1138
def __init__(self, files):
1139
files_str = ', '.join(files)
1140
BzrError.__init__(self, files=files, files_str=files_str)
1143
class ExcludesUnsupported(BzrError):
1145
_fmt = ('Excluding paths during commit is not supported by '
1146
'repository at %(repository)r.')
1148
def __init__(self, repository):
1149
BzrError.__init__(self, repository=repository)
1152
class BadCommitMessageEncoding(BzrError):
1154
_fmt = 'The specified commit message contains characters unsupported by '\
1155
'the current encoding.'
886
1158
class UpgradeReadonly(BzrError):
888
1160
_fmt = "Upgrade URL cannot work with readonly URLs."
930
1207
self.revision_id = revision_id
1210
class InvalidRevisionSpec(BzrError):
1212
_fmt = ("Requested revision: '%(spec)s' does not exist in branch:"
1213
" %(branch_url)s%(extra)s")
1215
def __init__(self, spec, branch, extra=None):
1216
BzrError.__init__(self, branch=branch, spec=spec)
1217
self.branch_url = getattr(branch, 'user_url', str(branch))
1219
self.extra = '\n' + str(extra)
1224
class HistoryMissing(BzrError):
1226
_fmt = "%(branch)s is missing %(object_type)s {%(object_id)s}"
933
1229
class AppendRevisionsOnlyViolation(BzrError):
935
1231
_fmt = ('Operation denied because it would change the main history,'
936
' which is not permitted by the append_revisions_only setting on'
937
' branch "%(location)s".')
1232
' which is not permitted by the append_revisions_only setting on'
1233
' branch "%(location)s".')
939
1235
def __init__(self, location):
940
import breezy.urlutils as urlutils
941
location = urlutils.unescape_for_display(location, 'ascii')
942
BzrError.__init__(self, location=location)
1236
import bzrlib.urlutils as urlutils
1237
location = urlutils.unescape_for_display(location, 'ascii')
1238
BzrError.__init__(self, location=location)
945
1241
class DivergedBranches(BzrError):
998
1294
def __init__(self, rev_id, not_ancestor_id):
999
1295
BzrError.__init__(self, rev_id=rev_id,
1000
not_ancestor_id=not_ancestor_id)
1296
not_ancestor_id=not_ancestor_id)
1299
class AmbiguousBase(BzrError):
1301
def __init__(self, bases):
1302
symbol_versioning.warn("BzrError AmbiguousBase has been deprecated "
1303
"as of bzrlib 0.8.", DeprecationWarning, stacklevel=2)
1304
msg = ("The correct base is unclear, because %s are all equally close"
1306
BzrError.__init__(self, msg)
1003
1310
class NoCommits(BranchError):
1062
1370
self.error = error
1373
class WeaveError(BzrError):
1375
_fmt = "Error in processing weave: %(msg)s"
1377
def __init__(self, msg=None):
1378
BzrError.__init__(self)
1382
class WeaveRevisionAlreadyPresent(WeaveError):
1384
_fmt = "Revision {%(revision_id)s} already present in %(weave)s"
1386
def __init__(self, revision_id, weave):
1388
WeaveError.__init__(self)
1389
self.revision_id = revision_id
1393
class WeaveRevisionNotPresent(WeaveError):
1395
_fmt = "Revision {%(revision_id)s} not present in %(weave)s"
1397
def __init__(self, revision_id, weave):
1398
WeaveError.__init__(self)
1399
self.revision_id = revision_id
1403
class WeaveFormatError(WeaveError):
1405
_fmt = "Weave invariant violated: %(what)s"
1407
def __init__(self, what):
1408
WeaveError.__init__(self)
1412
class WeaveParentMismatch(WeaveError):
1414
_fmt = "Parents are mismatched between two revisions. %(msg)s"
1417
class WeaveInvalidChecksum(WeaveError):
1419
_fmt = "Text did not match its checksum: %(msg)s"
1422
class WeaveTextDiffers(WeaveError):
1424
_fmt = ("Weaves differ on text content. Revision:"
1425
" {%(revision_id)s}, %(weave_a)s, %(weave_b)s")
1427
def __init__(self, revision_id, weave_a, weave_b):
1428
WeaveError.__init__(self)
1429
self.revision_id = revision_id
1430
self.weave_a = weave_a
1431
self.weave_b = weave_b
1434
class WeaveTextDiffers(WeaveError):
1436
_fmt = ("Weaves differ on text content. Revision:"
1437
" {%(revision_id)s}, %(weave_a)s, %(weave_b)s")
1439
def __init__(self, revision_id, weave_a, weave_b):
1440
WeaveError.__init__(self)
1441
self.revision_id = revision_id
1442
self.weave_a = weave_a
1443
self.weave_b = weave_b
1065
1446
class VersionedFileError(BzrError):
1067
1448
_fmt = "Versioned file error"
1092
1473
_fmt = "Text did not match its checksum: %(msg)s"
1476
class KnitError(InternalBzrError):
1481
class KnitCorrupt(KnitError):
1483
_fmt = "Knit %(filename)s corrupt: %(how)s"
1485
def __init__(self, filename, how):
1486
KnitError.__init__(self)
1487
self.filename = filename
1491
class SHA1KnitCorrupt(KnitCorrupt):
1493
_fmt = ("Knit %(filename)s corrupt: sha-1 of reconstructed text does not "
1494
"match expected sha-1. key %(key)s expected sha %(expected)s actual "
1497
def __init__(self, filename, actual, expected, key, content):
1498
KnitError.__init__(self)
1499
self.filename = filename
1500
self.actual = actual
1501
self.expected = expected
1503
self.content = content
1506
class KnitDataStreamIncompatible(KnitError):
1507
# Not raised anymore, as we can convert data streams. In future we may
1508
# need it again for more exotic cases, so we're keeping it around for now.
1510
_fmt = "Cannot insert knit data stream of format \"%(stream_format)s\" into knit of format \"%(target_format)s\"."
1512
def __init__(self, stream_format, target_format):
1513
self.stream_format = stream_format
1514
self.target_format = target_format
1517
class KnitDataStreamUnknown(KnitError):
1518
# Indicates a data stream we don't know how to handle.
1520
_fmt = "Cannot parse knit data stream of format \"%(stream_format)s\"."
1522
def __init__(self, stream_format):
1523
self.stream_format = stream_format
1526
class KnitHeaderError(KnitError):
1528
_fmt = 'Knit header error: %(badline)r unexpected for file "%(filename)s".'
1530
def __init__(self, badline, filename):
1531
KnitError.__init__(self)
1532
self.badline = badline
1533
self.filename = filename
1535
class KnitIndexUnknownMethod(KnitError):
1536
"""Raised when we don't understand the storage method.
1538
Currently only 'fulltext' and 'line-delta' are supported.
1541
_fmt = ("Knit index %(filename)s does not have a known method"
1542
" in options: %(options)r")
1544
def __init__(self, filename, options):
1545
KnitError.__init__(self)
1546
self.filename = filename
1547
self.options = options
1095
1550
class RetryWithNewPacks(BzrError):
1096
1551
"""Raised when we realize that the packs on disk have changed.
1268
1716
class InvalidHttpResponse(TransportError):
1270
_fmt = "Invalid http response for %(path)s: %(msg)s%(orig_error)s"
1718
_fmt = "Invalid http response for %(path)s: %(msg)s"
1272
1720
def __init__(self, path, msg, orig_error=None):
1273
1721
self.path = path
1274
if orig_error is None:
1277
# This is reached for obscure and unusual errors so we want to
1278
# preserve as much info as possible to ease debug.
1279
orig_error = ': %r' % (orig_error,)
1280
1722
TransportError.__init__(self, msg, orig_error=orig_error)
1283
class UnexpectedHttpStatus(InvalidHttpResponse):
1285
_fmt = "Unexpected HTTP status %(code)d for %(path)s"
1287
def __init__(self, path, code, msg=None):
1291
full_msg = 'status code %d unexpected' % code
1293
full_msg += ': ' + msg
1294
InvalidHttpResponse.__init__(
1295
self, path, full_msg)
1298
class BadHttpRequest(UnexpectedHttpStatus):
1300
_fmt = "Bad http request for %(path)s: %(reason)s"
1302
def __init__(self, path, reason):
1304
self.reason = reason
1305
TransportError.__init__(self, reason)
1308
1725
class InvalidHttpRange(InvalidHttpResponse):
1310
1727
_fmt = "Invalid http range %(range)r for %(path)s: %(msg)s"
1314
1731
InvalidHttpResponse.__init__(self, path, msg)
1317
class HttpBoundaryMissing(InvalidHttpResponse):
1318
"""A multipart response ends with no boundary marker.
1320
This is a special case caused by buggy proxies, described in
1321
<https://bugs.launchpad.net/bzr/+bug/198646>.
1324
_fmt = "HTTP MIME Boundary missing for %(path)s: %(msg)s"
1326
def __init__(self, path, msg):
1327
InvalidHttpResponse.__init__(self, path, msg)
1330
1734
class InvalidHttpContentType(InvalidHttpResponse):
1332
1736
_fmt = 'Invalid http Content-type "%(ctype)s" for %(path)s: %(msg)s'
1360
1764
_fmt = "Working tree has conflicts."
1363
class DependencyNotPresent(BzrError):
1365
_fmt = 'Unable to import library "%(library)s": %(error)s'
1367
def __init__(self, library, error):
1368
BzrError.__init__(self, library=library, error=error)
1767
class ParseConfigError(BzrError):
1769
def __init__(self, errors, filename):
1770
if filename is None:
1772
message = "Error(s) parsing config file %s:\n%s" % \
1773
(filename, ('\n'.join(e.msg for e in errors)))
1774
BzrError.__init__(self, message)
1777
class NoEmailInUsername(BzrError):
1779
_fmt = "%(username)r does not seem to contain a reasonable email address"
1781
def __init__(self, username):
1782
BzrError.__init__(self)
1783
self.username = username
1786
class SigningFailed(BzrError):
1788
_fmt = 'Failed to gpg sign data with command "%(command_line)s"'
1790
def __init__(self, command_line):
1791
BzrError.__init__(self, command_line=command_line)
1371
1794
class WorkingTreeNotRevision(BzrError):
1490
1946
_fmt = "Parameter %(param)s is neither unicode nor utf8."
1949
class ReusingTransform(BzrError):
1951
_fmt = "Attempt to reuse a transform that has already been applied."
1954
class CantMoveRoot(BzrError):
1956
_fmt = "Moving the root directory is not supported at this time"
1959
class TransformRenameFailed(BzrError):
1961
_fmt = "Failed to rename %(from_path)s to %(to_path)s: %(why)s"
1963
def __init__(self, from_path, to_path, why, errno):
1964
self.from_path = from_path
1965
self.to_path = to_path
1493
1970
class BzrMoveFailedError(BzrError):
1495
1972
_fmt = ("Could not move %(from_path)s%(operator)s %(to_path)s"
1496
"%(_has_extra)s%(extra)s")
1973
"%(_has_extra)s%(extra)s")
1498
1975
def __init__(self, from_path='', to_path='', extra=None):
1499
from breezy.osutils import splitpath
1976
from bzrlib.osutils import splitpath
1500
1977
BzrError.__init__(self)
1502
1979
self.extra, self._has_extra = extra, ': '
1529
2006
class BzrRenameFailedError(BzrMoveFailedError):
1531
2008
_fmt = ("Could not rename %(from_path)s%(operator)s %(to_path)s"
1532
"%(_has_extra)s%(extra)s")
2009
"%(_has_extra)s%(extra)s")
1534
2011
def __init__(self, from_path, to_path, extra=None):
1535
2012
BzrMoveFailedError.__init__(self, from_path, to_path, extra)
2015
class BzrRemoveChangedFilesError(BzrError):
2016
"""Used when user is trying to remove changed files."""
2018
_fmt = ("Can't safely remove modified or unknown files:\n"
2019
"%(changes_as_text)s"
2020
"Use --keep to not delete them, or --force to delete them regardless.")
2022
def __init__(self, tree_delta):
2023
symbol_versioning.warn(symbol_versioning.deprecated_in((2, 3, 0)) %
2024
"BzrRemoveChangedFilesError", DeprecationWarning, stacklevel=2)
2025
BzrError.__init__(self)
2026
self.changes_as_text = tree_delta.get_changes_as_text()
2027
#self.paths_as_string = '\n'.join(changed_files)
2028
#self.paths_as_string = '\n'.join([quotefn(p) for p in changed_files])
1538
2031
class BzrBadParameterNotString(BzrBadParameter):
1540
2033
_fmt = "Parameter %(param)s is not a string or unicode string."
1637
2144
wish to keep, and delete it when you are done."""
1639
2146
def __init__(self, pending_deletion):
1640
BzrError.__init__(self, pending_deletion=pending_deletion)
2147
BzrError.__init__(self, pending_deletion=pending_deletion)
2150
class ImmortalLimbo(BzrError):
2152
_fmt = """Unable to delete transform temporary directory %(limbo_dir)s.
2153
Please examine %(limbo_dir)s to see if it contains any files you wish to
2154
keep, and delete it when you are done."""
2156
def __init__(self, limbo_dir):
2157
BzrError.__init__(self)
2158
self.limbo_dir = limbo_dir
1643
2161
class ImmortalPendingDeletion(BzrError):
1645
2163
_fmt = ("Unable to delete transform temporary directory "
1646
"%(pending_deletion)s. Please examine %(pending_deletion)s to see if it "
1647
"contains any files you wish to keep, and delete it when you are done.")
2164
"%(pending_deletion)s. Please examine %(pending_deletion)s to see if it "
2165
"contains any files you wish to keep, and delete it when you are done.")
1649
2167
def __init__(self, pending_deletion):
1650
BzrError.__init__(self, pending_deletion=pending_deletion)
2168
BzrError.__init__(self, pending_deletion=pending_deletion)
1653
2171
class OutOfDateTree(BzrError):
1655
_fmt = "Working tree is out of date, please run 'brz update'.%(more)s"
2173
_fmt = "Working tree is out of date, please run 'bzr update'.%(more)s"
1657
2175
def __init__(self, tree, more=None):
1658
2176
if more is None:
1687
2205
_fmt = "Format error in conflict listings"
2208
class CorruptDirstate(BzrError):
2210
_fmt = ("Inconsistency in dirstate file %(dirstate_path)s.\n"
2211
"Error: %(description)s")
2213
def __init__(self, dirstate_path, description):
2214
BzrError.__init__(self)
2215
self.dirstate_path = dirstate_path
2216
self.description = description
1690
2219
class CorruptRepository(BzrError):
1692
2221
_fmt = ("An error has been detected in the repository %(repo_path)s.\n"
1693
"Please run brz reconcile on this repository.")
2222
"Please run bzr reconcile on this repository.")
1695
2224
def __init__(self, repo):
1696
2225
BzrError.__init__(self)
1914
2437
self.revision_id = revision_id
2440
class IllegalUseOfScopeReplacer(InternalBzrError):
2442
_fmt = ("ScopeReplacer object %(name)r was used incorrectly:"
2443
" %(msg)s%(extra)s")
2445
def __init__(self, name, msg, extra=None):
2446
BzrError.__init__(self)
2450
self.extra = ': ' + str(extra)
2455
class InvalidImportLine(InternalBzrError):
2457
_fmt = "Not a valid import statement: %(msg)\n%(text)s"
2459
def __init__(self, text, msg):
2460
BzrError.__init__(self)
2465
class ImportNameCollision(InternalBzrError):
2467
_fmt = ("Tried to import an object to the same name as"
2468
" an existing object. %(name)s")
2470
def __init__(self, name):
2471
BzrError.__init__(self)
1917
2475
class NotAMergeDirective(BzrError):
1918
2476
"""File starting with %(firstline)r is not a merge directive"""
1920
2477
def __init__(self, firstline):
1921
2478
BzrError.__init__(self, firstline=firstline)
2001
2586
self.tag_name = tag_name
2589
class MalformedBugIdentifier(BzrError):
2591
_fmt = ('Did not understand bug identifier %(bug_id)s: %(reason)s. '
2592
'See "bzr help bugs" for more information on this feature.')
2594
def __init__(self, bug_id, reason):
2595
self.bug_id = bug_id
2596
self.reason = reason
2599
class InvalidBugTrackerURL(BzrError):
2601
_fmt = ("The URL for bug tracker \"%(abbreviation)s\" doesn't "
2602
"contain {id}: %(url)s")
2604
def __init__(self, abbreviation, url):
2605
self.abbreviation = abbreviation
2609
class UnknownBugTrackerAbbreviation(BzrError):
2611
_fmt = ("Cannot find registered bug tracker called %(abbreviation)s "
2614
def __init__(self, abbreviation, branch):
2615
self.abbreviation = abbreviation
2616
self.branch = branch
2619
class InvalidLineInBugsProperty(BzrError):
2621
_fmt = ("Invalid line in bugs property: '%(line)s'")
2623
def __init__(self, line):
2627
class InvalidBugStatus(BzrError):
2629
_fmt = ("Invalid bug status: '%(status)s'")
2631
def __init__(self, status):
2632
self.status = status
2004
2635
class UnexpectedSmartServerResponse(BzrError):
2006
2637
_fmt = "Could not understand response from smart server: %(response_tuple)r"
2031
2662
class UnknownErrorFromSmartServer(BzrError):
2032
"""An ErrorFromSmartServer could not be translated into a typical breezy
2663
"""An ErrorFromSmartServer could not be translated into a typical bzrlib
2035
2666
This is distinct from ErrorFromSmartServer so that it is possible to
2036
2667
distinguish between the following two cases:
2038
- ErrorFromSmartServer was uncaught. This is logic error in the client
2039
and so should provoke a traceback to the user.
2040
- ErrorFromSmartServer was caught but its error_tuple could not be
2041
translated. This is probably because the server sent us garbage, and
2042
should not provoke a traceback.
2668
- ErrorFromSmartServer was uncaught. This is logic error in the client
2669
and so should provoke a traceback to the user.
2670
- ErrorFromSmartServer was caught but its error_tuple could not be
2671
translated. This is probably because the server sent us garbage, and
2672
should not provoke a traceback.
2045
2675
_fmt = "Server sent an unexpected error: %(error_tuple)r"
2112
2747
self.reason = reason
2750
class SMTPError(BzrError):
2752
_fmt = "SMTP error: %(error)s"
2754
def __init__(self, error):
2758
class NoMessageSupplied(BzrError):
2760
_fmt = "No message supplied."
2763
class NoMailAddressSpecified(BzrError):
2765
_fmt = "No mail-to address (--mail-to) or output (-o) specified."
2768
class UnknownMailClient(BzrError):
2770
_fmt = "Unknown mail client: %(mail_client)s"
2772
def __init__(self, mail_client):
2773
BzrError.__init__(self, mail_client=mail_client)
2776
class MailClientNotFound(BzrError):
2778
_fmt = "Unable to find mail client with the following names:"\
2779
" %(mail_command_list_string)s"
2781
def __init__(self, mail_command_list):
2782
mail_command_list_string = ', '.join(mail_command_list)
2783
BzrError.__init__(self, mail_command_list=mail_command_list,
2784
mail_command_list_string=mail_command_list_string)
2786
class SMTPConnectionRefused(SMTPError):
2788
_fmt = "SMTP connection to %(host)s refused"
2790
def __init__(self, error, host):
2795
class DefaultSMTPConnectionRefused(SMTPConnectionRefused):
2797
_fmt = "Please specify smtp_server. No server at default %(host)s."
2800
class BzrDirError(BzrError):
2802
def __init__(self, bzrdir):
2803
import bzrlib.urlutils as urlutils
2804
display_url = urlutils.unescape_for_display(bzrdir.user_url,
2806
BzrError.__init__(self, bzrdir=bzrdir, display_url=display_url)
2809
class UnsyncedBranches(BzrDirError):
2811
_fmt = ("'%(display_url)s' is not in sync with %(target_url)s. See"
2812
" bzr help sync-for-reconfigure.")
2814
def __init__(self, bzrdir, target_branch):
2815
BzrDirError.__init__(self, bzrdir)
2816
import bzrlib.urlutils as urlutils
2817
self.target_url = urlutils.unescape_for_display(target_branch.base,
2821
class AlreadyBranch(BzrDirError):
2823
_fmt = "'%(display_url)s' is already a branch."
2826
class AlreadyTree(BzrDirError):
2828
_fmt = "'%(display_url)s' is already a tree."
2831
class AlreadyCheckout(BzrDirError):
2833
_fmt = "'%(display_url)s' is already a checkout."
2836
class AlreadyLightweightCheckout(BzrDirError):
2838
_fmt = "'%(display_url)s' is already a lightweight checkout."
2841
class AlreadyUsingShared(BzrDirError):
2843
_fmt = "'%(display_url)s' is already using a shared repository."
2846
class AlreadyStandalone(BzrDirError):
2848
_fmt = "'%(display_url)s' is already standalone."
2851
class AlreadyWithTrees(BzrDirError):
2853
_fmt = ("Shared repository '%(display_url)s' already creates "
2857
class AlreadyWithNoTrees(BzrDirError):
2859
_fmt = ("Shared repository '%(display_url)s' already doesn't create "
2863
class ReconfigurationNotSupported(BzrDirError):
2865
_fmt = "Requested reconfiguration of '%(display_url)s' is not supported."
2868
class NoBindLocation(BzrDirError):
2870
_fmt = "No location could be found to bind to at %(display_url)s."
2115
2873
class UncommittedChanges(BzrError):
2117
2875
_fmt = ('Working tree "%(display_url)s" has uncommitted changes'
2118
' (See brz status).%(more)s')
2876
' (See bzr status).%(more)s')
2120
2878
def __init__(self, tree, more=None):
2121
2879
if more is None:
2124
2882
more = ' ' + more
2125
import breezy.urlutils as urlutils
2883
import bzrlib.urlutils as urlutils
2126
2884
user_url = getattr(tree, "user_url", None)
2127
2885
if user_url is None:
2128
2886
display_url = str(tree)
2131
2889
BzrError.__init__(self, tree=tree, display_url=display_url, more=more)
2134
class StoringUncommittedNotSupported(BzrError):
2136
_fmt = ('Branch "%(display_url)s" does not support storing uncommitted'
2139
def __init__(self, branch):
2140
import breezy.urlutils as urlutils
2141
user_url = getattr(branch, "user_url", None)
2142
if user_url is None:
2143
display_url = str(branch)
2145
display_url = urlutils.unescape_for_display(user_url, 'ascii')
2146
BzrError.__init__(self, branch=branch, display_url=display_url)
2149
2892
class ShelvedChanges(UncommittedChanges):
2151
2894
_fmt = ('Working tree "%(display_url)s" has shelved changes'
2152
' (See brz shelve --list).%(more)s')
2895
' (See bzr shelve --list).%(more)s')
2898
class MissingTemplateVariable(BzrError):
2900
_fmt = 'Variable {%(name)s} is not available.'
2902
def __init__(self, name):
2906
class NoTemplate(BzrError):
2908
_fmt = 'No template specified.'
2911
class UnableCreateSymlink(BzrError):
2913
_fmt = 'Unable to create symlink %(path_str)son this platform'
2915
def __init__(self, path=None):
2919
path_str = repr(str(path))
2920
except UnicodeEncodeError:
2921
path_str = repr(path)
2923
self.path_str = path_str
2926
class UnsupportedTimezoneFormat(BzrError):
2928
_fmt = ('Unsupported timezone format "%(timezone)s", '
2929
'options are "utc", "original", "local".')
2931
def __init__(self, timezone):
2932
self.timezone = timezone
2935
class CommandAvailableInPlugin(StandardError):
2937
internal_error = False
2939
def __init__(self, cmd_name, plugin_metadata, provider):
2941
self.plugin_metadata = plugin_metadata
2942
self.cmd_name = cmd_name
2943
self.provider = provider
2947
_fmt = ('"%s" is not a standard bzr command. \n'
2948
'However, the following official plugin provides this command: %s\n'
2949
'You can install it by going to: %s'
2950
% (self.cmd_name, self.plugin_metadata['name'],
2951
self.plugin_metadata['url']))
2956
class NoPluginAvailable(BzrError):
2155
2960
class UnableEncodePath(BzrError):
2158
2963
'user encoding %(user_encoding)s')
2160
2965
def __init__(self, path, kind):
2161
from breezy.osutils import get_user_encoding
2966
from bzrlib.osutils import get_user_encoding
2162
2967
self.path = path
2163
2968
self.kind = kind
2164
self.user_encoding = get_user_encoding()
2969
self.user_encoding = osutils.get_user_encoding()
2972
class NoSuchConfig(BzrError):
2974
_fmt = ('The "%(config_id)s" configuration does not exist.')
2976
def __init__(self, config_id):
2977
BzrError.__init__(self, config_id=config_id)
2980
class NoSuchConfigOption(BzrError):
2982
_fmt = ('The "%(option_name)s" configuration option does not exist.')
2984
def __init__(self, option_name):
2985
BzrError.__init__(self, option_name=option_name)
2167
2988
class NoSuchAlias(BzrError):
2172
2993
BzrError.__init__(self, alias_name=alias_name)
2996
class DirectoryLookupFailure(BzrError):
2997
"""Base type for lookup errors."""
3002
class InvalidLocationAlias(DirectoryLookupFailure):
3004
_fmt = '"%(alias_name)s" is not a valid location alias.'
3006
def __init__(self, alias_name):
3007
DirectoryLookupFailure.__init__(self, alias_name=alias_name)
3010
class UnsetLocationAlias(DirectoryLookupFailure):
3012
_fmt = 'No %(alias_name)s location assigned.'
3014
def __init__(self, alias_name):
3015
DirectoryLookupFailure.__init__(self, alias_name=alias_name[1:])
2175
3018
class CannotBindAddress(BzrError):
2177
3020
_fmt = 'Cannot bind address "%(host)s:%(port)i": %(orig_error)s.'
2179
3022
def __init__(self, host, port, orig_error):
2180
3023
# nb: in python2.4 socket.error doesn't have a useful repr
2181
3024
BzrError.__init__(self, host=host, port=port,
2182
orig_error=repr(orig_error.args))
3025
orig_error=repr(orig_error.args))
3028
class UnknownRules(BzrError):
3030
_fmt = ('Unknown rules detected: %(unknowns_str)s.')
3032
def __init__(self, unknowns):
3033
BzrError.__init__(self, unknowns_str=", ".join(unknowns))
3036
class HookFailed(BzrError):
3037
"""Raised when a pre_change_branch_tip hook function fails anything other
3038
than TipChangeRejected.
3040
Note that this exception is no longer raised, and the import is only left
3041
to be nice to code which might catch it in a plugin.
3044
_fmt = ("Hook '%(hook_name)s' during %(hook_stage)s failed:\n"
3045
"%(traceback_text)s%(exc_value)s")
3047
def __init__(self, hook_stage, hook_name, exc_info, warn=True):
3049
symbol_versioning.warn("BzrError HookFailed has been deprecated "
3050
"as of bzrlib 2.1.", DeprecationWarning, stacklevel=2)
3052
self.hook_stage = hook_stage
3053
self.hook_name = hook_name
3054
self.exc_info = exc_info
3055
self.exc_type = exc_info[0]
3056
self.exc_value = exc_info[1]
3057
self.exc_tb = exc_info[2]
3058
self.traceback_text = ''.join(traceback.format_tb(self.exc_tb))
2185
3061
class TipChangeRejected(BzrError):
3072
class ShelfCorrupt(BzrError):
3074
_fmt = "Shelf corrupt."
3077
class NoSuchShelfId(BzrError):
3079
_fmt = 'No changes are shelved with id "%(shelf_id)d".'
3081
def __init__(self, shelf_id):
3082
BzrError.__init__(self, shelf_id=shelf_id)
3085
class InvalidShelfId(BzrError):
3087
_fmt = '"%(invalid_id)s" is not a valid shelf id, try a number instead.'
3089
def __init__(self, invalid_id):
3090
BzrError.__init__(self, invalid_id=invalid_id)
2196
3093
class JailBreak(BzrError):
2198
3095
_fmt = "An attempt to access a url outside the server jail was made: '%(url)s'."
2206
3103
_fmt = 'The user aborted the operation.'
3106
class MustHaveWorkingTree(BzrError):
3108
_fmt = ("Branching '%(url)s'(%(format)s) must create a working tree.")
3110
def __init__(self, format, url):
3111
BzrError.__init__(self, format=format, url=url)
3114
class NoSuchView(BzrError):
3115
"""A view does not exist.
3118
_fmt = u"No such view: %(view_name)s."
3120
def __init__(self, view_name):
3121
self.view_name = view_name
3124
class ViewsNotSupported(BzrError):
3125
"""Views are not supported by a tree format.
3128
_fmt = ("Views are not supported by %(tree)s;"
3129
" use 'bzr upgrade' to change your tree to a later format.")
3131
def __init__(self, tree):
3135
class FileOutsideView(BzrError):
3137
_fmt = ('Specified file "%(file_name)s" is outside the current view: '
3140
def __init__(self, file_name, view_files):
3141
self.file_name = file_name
3142
self.view_str = ", ".join(view_files)
2209
3145
class UnresumableWriteGroup(BzrError):
2211
3147
_fmt = ("Repository %(repository)s cannot resume write group "
2253
3189
self.target_branch = target_branch
3192
class FileTimestampUnavailable(BzrError):
3194
_fmt = "The filestamp for %(path)s is not available."
3196
internal_error = True
3198
def __init__(self, path):
2256
3202
class NoColocatedBranchSupport(BzrError):
2258
_fmt = ("%(controldir)r does not support co-located branches.")
2260
def __init__(self, controldir):
2261
self.controldir = controldir
3204
_fmt = ("%(bzrdir)r does not support co-located branches.")
3206
def __init__(self, bzrdir):
3207
self.bzrdir = bzrdir
3210
class NoWhoami(BzrError):
3212
_fmt = ('Unable to determine your name.\n'
3213
"Please, set your name with the 'whoami' command.\n"
3214
'E.g. bzr whoami "Your Name <name@example.com>"')
3217
class InvalidPattern(BzrError):
3219
_fmt = ('Invalid pattern(s) found. %(msg)s')
3221
def __init__(self, msg):
2264
3225
class RecursiveBind(BzrError):
2266
3227
_fmt = ('Branch "%(branch_url)s" appears to be bound to itself. '
2267
'Please use `brz unbind` to fix.')
3228
'Please use `bzr unbind` to fix.')
2269
3230
def __init__(self, branch_url):
2270
3231
self.branch_url = branch_url
2273
class UnsupportedKindChange(BzrError):
2275
_fmt = ("Kind change from %(from_kind)s to %(to_kind)s for "
2276
"%(path)s not supported by format %(format)r")
2278
def __init__(self, path, from_kind, to_kind, format):
2280
self.from_kind = from_kind
2281
self.to_kind = to_kind
2282
self.format = format
2285
class ChangesAlreadyStored(CommandError):
2287
_fmt = ('Cannot store uncommitted changes because this branch already'
2288
' stores uncommitted changes.')
2291
class RevnoOutOfBounds(InternalBzrError):
2293
_fmt = ("The requested revision number %(revno)d is outside of the "
2294
"expected boundaries (%(minimum)d <= %(maximum)d).")
2296
def __init__(self, revno, bounds):
2297
InternalBzrError.__init__(
2298
self, revno=revno, minimum=bounds[0], maximum=bounds[1])
3234
# FIXME: I would prefer to define the config related exception classes in
3235
# config.py but the lazy import mechanism proscribes this -- vila 20101222
3236
class OptionExpansionLoop(BzrError):
3238
_fmt = 'Loop involving %(refs)r while expanding "%(string)s".'
3240
def __init__(self, string, refs):
3241
self.string = string
3242
self.refs = '->'.join(refs)
3245
class ExpandingUnknownOption(BzrError):
3247
_fmt = 'Option %(name)s is not defined while expanding "%(string)s".'
3249
def __init__(self, name, string):
3251
self.string = string