100
106
# __str__() should always return a 'str' object
101
107
# never a 'unicode' object.
103
except Exception as e:
105
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' \
106
151
% (self.__class__.__name__,
108
153
getattr(self, '_fmt', None),
115
return self._format().encode('utf-8')
117
__unicode__ = _format
120
return '%s(%s)' % (self.__class__.__name__, str(self))
122
def _get_format_string(self):
123
"""Return format string for this exception or None"""
124
fmt = getattr(self, '_fmt', None)
126
from breezy.i18n import gettext
127
return gettext(fmt) # _fmt strings should be ascii
129
156
def __eq__(self, other):
130
157
if self.__class__ is not other.__class__:
131
158
return NotImplemented
132
159
return self.__dict__ == other.__dict__
138
162
class InternalBzrError(BzrError):
139
163
"""Base class for errors that are internal in nature.
146
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."
149
211
class BranchError(BzrError):
150
212
"""Base class for concrete 'errors about a branch'."""
311
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)
314
481
class StrictCommitFailed(BzrError):
316
483
_fmt = "Commit refused because there are unknown files in the tree"
402
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.')
405
598
class UnavailableRepresentation(InternalBzrError):
407
600
_fmt = ("The encoding '%(wanted)s' is not available for key %(key)s which "
408
"is encoded as '%(native)s'.")
601
"is encoded as '%(native)s'.")
410
603
def __init__(self, key, wanted, native):
411
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
417
620
class UnsupportedProtocol(PathError):
419
622
_fmt = 'Unsupported protocol for url "%(path)s"%(extra)s'
421
def __init__(self, url, extra=""):
624
def __init__(self, url, extra):
422
625
PathError.__init__(self, url, extra=extra)
425
class UnstackableLocationError(BzrError):
427
_fmt = "The branch '%(branch_url)s' cannot be stacked on '%(target_url)s'."
429
def __init__(self, branch_url, target_url):
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):
430
634
BzrError.__init__(self)
431
self.branch_url = branch_url
432
self.target_url = target_url
435
639
class UnstackableRepositoryFormat(BzrError):
437
641
_fmt = ("The repository '%(url)s'(%(format)s) is not a stackable format. "
438
"You will need to upgrade the repository to permit branch stacking.")
642
"You will need to upgrade the repository to permit branch stacking.")
440
644
def __init__(self, format, url):
441
645
BzrError.__init__(self)
488
692
# TODO: Probably this behavior of should be a common superclass
489
693
class NotBranchError(PathError):
491
_fmt = 'Not a branch: "%(path)s"%(detail)s.'
493
def __init__(self, path, detail=None, controldir=None):
494
from . import urlutils
495
path = urlutils.unescape_for_display(path, 'ascii')
496
if detail is not None:
497
detail = ': ' + detail
499
self.controldir = controldir
500
PathError.__init__(self, path=path)
503
return '<%s %r>' % (self.__class__.__name__, self.__dict__)
505
def _get_format_string(self):
506
# GZ 2017-06-08: Not the best place to lazy fill detail in.
507
if self.detail is None:
508
self.detail = self._get_detail()
509
return super(NotBranchError, self)._get_format_string()
511
def _get_detail(self):
512
if self.controldir is not None:
514
self.controldir.open_repository()
515
except NoRepositoryPresent:
517
except Exception as e:
518
# Just ignore unexpected errors. Raising arbitrary errors
519
# during str(err) can provoke strange bugs. Concretely
520
# Launchpad's codehosting managed to raise NotBranchError
521
# here, and then get stuck in an infinite loop/recursion
522
# trying to str() that error. All this error really cares
523
# about that there's no working repository there, and if
524
# open_repository() fails, there probably isn't.
525
return ': ' + e.__class__.__name__
527
return ': location is a repository'
695
_fmt = 'Not a branch: "%(path)s".'
697
def __init__(self, path):
698
import bzrlib.urlutils as urlutils
699
self.path = urlutils.unescape_for_display(path, 'ascii')
531
702
class NoSubmitBranch(PathError):
600
772
self.format = format
603
class LineEndingError(BzrError):
605
_fmt = ("Line ending corrupted for file: %(file)s; "
606
"Maybe your files got corrupted in transport?")
608
def __init__(self, file):
612
775
class IncompatibleFormat(BzrError):
614
_fmt = "Format %(format)s is not compatible with .bzr version %(controldir)s."
616
def __init__(self, format, controldir_format):
617
BzrError.__init__(self)
619
self.controldir = controldir_format
622
class ParseFormatError(BzrError):
624
_fmt = "Parse error on line %(lineno)d of %(format)s format: %(line)s"
626
def __init__(self, format, lineno, line, text):
627
BzrError.__init__(self)
777
_fmt = "Format %(format)s is not compatible with .bzr version %(bzrdir)s."
779
def __init__(self, format, bzrdir_format):
780
BzrError.__init__(self)
782
self.bzrdir = bzrdir_format
634
785
class IncompatibleRepositories(BzrError):
635
"""Report an error that two repositories are not compatible.
637
Note that the source and target repositories are permitted to be strings:
638
this exception is thrown from the smart server and may refer to a
639
repository the client hasn't opened.
642
787
_fmt = "%(target)s\n" \
643
"is not compatible with\n" \
788
"is not compatible with\n" \
647
792
def __init__(self, source, target, details=None):
648
793
if details is None:
979
1143
class InvalidRevisionSpec(BzrError):
981
_fmt = ("Requested revision: '%(spec)s' does not exist in branch:"
982
" %(branch_url)s%(extra)s")
1145
_fmt = ("Requested revision: %(spec)r does not exist in branch:"
1146
" %(branch)s%(extra)s")
984
1148
def __init__(self, spec, branch, extra=None):
985
1149
BzrError.__init__(self, branch=branch, spec=spec)
986
self.branch_url = getattr(branch, 'user_url', str(branch))
988
1151
self.extra = '\n' + str(extra)
1156
class HistoryMissing(BzrError):
1158
_fmt = "%(branch)s is missing %(object_type)s {%(object_id)s}"
993
1161
class AppendRevisionsOnlyViolation(BzrError):
995
1163
_fmt = ('Operation denied because it would change the main history,'
996
' which is not permitted by the append_revisions_only setting on'
997
' branch "%(location)s".')
1164
' which is not permitted by the append_revisions_only setting on'
1165
' branch "%(location)s".')
999
1167
def __init__(self, location):
1000
import breezy.urlutils as urlutils
1001
location = urlutils.unescape_for_display(location, 'ascii')
1002
BzrError.__init__(self, location=location)
1168
import bzrlib.urlutils as urlutils
1169
location = urlutils.unescape_for_display(location, 'ascii')
1170
BzrError.__init__(self, location=location)
1005
1173
class DivergedBranches(BzrError):
1007
1175
_fmt = ("These branches have diverged."
1008
" Use the missing command to see how.\n"
1009
"Use the merge command to reconcile them.")
1176
" Use the merge command to reconcile them.")
1011
1178
def __init__(self, branch1, branch2):
1012
1179
self.branch1 = branch1
1122
1309
self.error = error
1312
class WeaveError(BzrError):
1314
_fmt = "Error in processing weave: %(msg)s"
1316
def __init__(self, msg=None):
1317
BzrError.__init__(self)
1321
class WeaveRevisionAlreadyPresent(WeaveError):
1323
_fmt = "Revision {%(revision_id)s} already present in %(weave)s"
1325
def __init__(self, revision_id, weave):
1327
WeaveError.__init__(self)
1328
self.revision_id = revision_id
1332
class WeaveRevisionNotPresent(WeaveError):
1334
_fmt = "Revision {%(revision_id)s} not present in %(weave)s"
1336
def __init__(self, revision_id, weave):
1337
WeaveError.__init__(self)
1338
self.revision_id = revision_id
1342
class WeaveFormatError(WeaveError):
1344
_fmt = "Weave invariant violated: %(what)s"
1346
def __init__(self, what):
1347
WeaveError.__init__(self)
1351
class WeaveParentMismatch(WeaveError):
1353
_fmt = "Parents are mismatched between two revisions. %(message)s"
1356
class WeaveInvalidChecksum(WeaveError):
1358
_fmt = "Text did not match it's checksum: %(message)s"
1361
class WeaveTextDiffers(WeaveError):
1363
_fmt = ("Weaves differ on text content. Revision:"
1364
" {%(revision_id)s}, %(weave_a)s, %(weave_b)s")
1366
def __init__(self, revision_id, weave_a, weave_b):
1367
WeaveError.__init__(self)
1368
self.revision_id = revision_id
1369
self.weave_a = weave_a
1370
self.weave_b = weave_b
1373
class WeaveTextDiffers(WeaveError):
1375
_fmt = ("Weaves differ on text content. Revision:"
1376
" {%(revision_id)s}, %(weave_a)s, %(weave_b)s")
1378
def __init__(self, revision_id, weave_a, weave_b):
1379
WeaveError.__init__(self)
1380
self.revision_id = revision_id
1381
self.weave_a = weave_a
1382
self.weave_b = weave_b
1125
1385
class VersionedFileError(BzrError):
1127
1387
_fmt = "Versioned file error"
1150
1410
class VersionedFileInvalidChecksum(VersionedFileError):
1152
_fmt = "Text did not match its checksum: %(msg)s"
1412
_fmt = "Text did not match its checksum: %(message)s"
1415
class KnitError(InternalBzrError):
1420
class KnitCorrupt(KnitError):
1422
_fmt = "Knit %(filename)s corrupt: %(how)s"
1424
def __init__(self, filename, how):
1425
KnitError.__init__(self)
1426
self.filename = filename
1430
class SHA1KnitCorrupt(KnitCorrupt):
1432
_fmt = ("Knit %(filename)s corrupt: sha-1 of reconstructed text does not "
1433
"match expected sha-1. key %(key)s expected sha %(expected)s actual "
1436
def __init__(self, filename, actual, expected, key, content):
1437
KnitError.__init__(self)
1438
self.filename = filename
1439
self.actual = actual
1440
self.expected = expected
1442
self.content = content
1445
class KnitDataStreamIncompatible(KnitError):
1446
# Not raised anymore, as we can convert data streams. In future we may
1447
# need it again for more exotic cases, so we're keeping it around for now.
1449
_fmt = "Cannot insert knit data stream of format \"%(stream_format)s\" into knit of format \"%(target_format)s\"."
1451
def __init__(self, stream_format, target_format):
1452
self.stream_format = stream_format
1453
self.target_format = target_format
1456
class KnitDataStreamUnknown(KnitError):
1457
# Indicates a data stream we don't know how to handle.
1459
_fmt = "Cannot parse knit data stream of format \"%(stream_format)s\"."
1461
def __init__(self, stream_format):
1462
self.stream_format = stream_format
1465
class KnitHeaderError(KnitError):
1467
_fmt = 'Knit header error: %(badline)r unexpected for file "%(filename)s".'
1469
def __init__(self, badline, filename):
1470
KnitError.__init__(self)
1471
self.badline = badline
1472
self.filename = filename
1474
class KnitIndexUnknownMethod(KnitError):
1475
"""Raised when we don't understand the storage method.
1477
Currently only 'fulltext' and 'line-delta' are supported.
1480
_fmt = ("Knit index %(filename)s does not have a known method"
1481
" in options: %(options)r")
1483
def __init__(self, filename, options):
1484
KnitError.__init__(self)
1485
self.filename = filename
1486
self.options = options
1155
1489
class RetryWithNewPacks(BzrError):
1395
1703
_fmt = "Working tree has conflicts."
1398
class DependencyNotPresent(BzrError):
1400
_fmt = 'Unable to import library "%(library)s": %(error)s'
1402
def __init__(self, library, error):
1403
BzrError.__init__(self, library=library, error=error)
1706
class ParseConfigError(BzrError):
1708
def __init__(self, errors, filename):
1709
if filename is None:
1711
message = "Error(s) parsing config file %s:\n%s" % \
1712
(filename, ('\n'.join(e.msg for e in errors)))
1713
BzrError.__init__(self, message)
1716
class NoEmailInUsername(BzrError):
1718
_fmt = "%(username)r does not seem to contain a reasonable email address"
1720
def __init__(self, username):
1721
BzrError.__init__(self)
1722
self.username = username
1725
class SigningFailed(BzrError):
1727
_fmt = 'Failed to gpg sign data with command "%(command_line)s"'
1729
def __init__(self, command_line):
1730
BzrError.__init__(self, command_line=command_line)
1406
1733
class WorkingTreeNotRevision(BzrError):
1736
2075
keep, and delete it when you are done."""
1738
2077
def __init__(self, limbo_dir):
1739
BzrError.__init__(self)
1740
self.limbo_dir = limbo_dir
2078
BzrError.__init__(self)
2079
self.limbo_dir = limbo_dir
1743
2082
class ImmortalPendingDeletion(BzrError):
1745
2084
_fmt = ("Unable to delete transform temporary directory "
1746
"%(pending_deletion)s. Please examine %(pending_deletion)s to see if it "
1747
"contains any files you wish to keep, and delete it when you are done.")
2085
"%(pending_deletion)s. Please examine %(pending_deletion)s to see if it "
2086
"contains any files you wish to keep, and delete it when you are done.")
1749
2088
def __init__(self, pending_deletion):
1750
BzrError.__init__(self, pending_deletion=pending_deletion)
2089
BzrError.__init__(self, pending_deletion=pending_deletion)
1753
2092
class OutOfDateTree(BzrError):
1755
_fmt = "Working tree is out of date, please run 'brz update'.%(more)s"
2094
_fmt = "Working tree is out of date, please run 'bzr update'."
1757
def __init__(self, tree, more=None):
2096
def __init__(self, tree):
1762
2097
BzrError.__init__(self)
1763
2098
self.tree = tree
1767
2101
class PublicBranchOutOfDate(BzrError):
2132
2502
self.tag_name = tag_name
2505
class MalformedBugIdentifier(BzrError):
2507
_fmt = ('Did not understand bug identifier %(bug_id)s: %(reason)s. '
2508
'See "bzr help bugs" for more information on this feature.')
2510
def __init__(self, bug_id, reason):
2511
self.bug_id = bug_id
2512
self.reason = reason
2515
class InvalidBugTrackerURL(BzrError):
2517
_fmt = ("The URL for bug tracker \"%(abbreviation)s\" doesn't "
2518
"contain {id}: %(url)s")
2520
def __init__(self, abbreviation, url):
2521
self.abbreviation = abbreviation
2525
class UnknownBugTrackerAbbreviation(BzrError):
2527
_fmt = ("Cannot find registered bug tracker called %(abbreviation)s "
2530
def __init__(self, abbreviation, branch):
2531
self.abbreviation = abbreviation
2532
self.branch = branch
2535
class InvalidLineInBugsProperty(BzrError):
2537
_fmt = ("Invalid line in bugs property: '%(line)s'")
2539
def __init__(self, line):
2543
class InvalidBugStatus(BzrError):
2545
_fmt = ("Invalid bug status: '%(status)s'")
2547
def __init__(self, status):
2548
self.status = status
2135
2551
class UnexpectedSmartServerResponse(BzrError):
2137
2553
_fmt = "Could not understand response from smart server: %(response_tuple)r"
2243
2663
self.reason = reason
2666
class SMTPError(BzrError):
2668
_fmt = "SMTP error: %(error)s"
2670
def __init__(self, error):
2674
class NoMessageSupplied(BzrError):
2676
_fmt = "No message supplied."
2679
class NoMailAddressSpecified(BzrError):
2681
_fmt = "No mail-to address (--mail-to) or output (-o) specified."
2684
class UnknownMailClient(BzrError):
2686
_fmt = "Unknown mail client: %(mail_client)s"
2688
def __init__(self, mail_client):
2689
BzrError.__init__(self, mail_client=mail_client)
2692
class MailClientNotFound(BzrError):
2694
_fmt = "Unable to find mail client with the following names:"\
2695
" %(mail_command_list_string)s"
2697
def __init__(self, mail_command_list):
2698
mail_command_list_string = ', '.join(mail_command_list)
2699
BzrError.__init__(self, mail_command_list=mail_command_list,
2700
mail_command_list_string=mail_command_list_string)
2702
class SMTPConnectionRefused(SMTPError):
2704
_fmt = "SMTP connection to %(host)s refused"
2706
def __init__(self, error, host):
2711
class DefaultSMTPConnectionRefused(SMTPConnectionRefused):
2713
_fmt = "Please specify smtp_server. No server at default %(host)s."
2716
class BzrDirError(BzrError):
2718
def __init__(self, bzrdir):
2719
import bzrlib.urlutils as urlutils
2720
display_url = urlutils.unescape_for_display(bzrdir.root_transport.base,
2722
BzrError.__init__(self, bzrdir=bzrdir, display_url=display_url)
2725
class UnsyncedBranches(BzrDirError):
2727
_fmt = ("'%(display_url)s' is not in sync with %(target_url)s. See"
2728
" bzr help sync-for-reconfigure.")
2730
def __init__(self, bzrdir, target_branch):
2731
BzrDirError.__init__(self, bzrdir)
2732
import bzrlib.urlutils as urlutils
2733
self.target_url = urlutils.unescape_for_display(target_branch.base,
2737
class AlreadyBranch(BzrDirError):
2739
_fmt = "'%(display_url)s' is already a branch."
2742
class AlreadyTree(BzrDirError):
2744
_fmt = "'%(display_url)s' is already a tree."
2747
class AlreadyCheckout(BzrDirError):
2749
_fmt = "'%(display_url)s' is already a checkout."
2752
class AlreadyLightweightCheckout(BzrDirError):
2754
_fmt = "'%(display_url)s' is already a lightweight checkout."
2757
class AlreadyUsingShared(BzrDirError):
2759
_fmt = "'%(display_url)s' is already using a shared repository."
2762
class AlreadyStandalone(BzrDirError):
2764
_fmt = "'%(display_url)s' is already standalone."
2767
class AlreadyWithTrees(BzrDirError):
2769
_fmt = ("Shared repository '%(display_url)s' already creates "
2773
class AlreadyWithNoTrees(BzrDirError):
2775
_fmt = ("Shared repository '%(display_url)s' already doesn't create "
2779
class ReconfigurationNotSupported(BzrDirError):
2781
_fmt = "Requested reconfiguration of '%(display_url)s' is not supported."
2784
class NoBindLocation(BzrDirError):
2786
_fmt = "No location could be found to bind to at %(display_url)s."
2246
2789
class UncommittedChanges(BzrError):
2248
_fmt = ('Working tree "%(display_url)s" has uncommitted changes'
2249
' (See brz status).%(more)s')
2251
def __init__(self, tree, more=None):
2256
import breezy.urlutils as urlutils
2257
user_url = getattr(tree, "user_url", None)
2258
if user_url is None:
2259
display_url = str(tree)
2261
display_url = urlutils.unescape_for_display(user_url, 'ascii')
2262
BzrError.__init__(self, tree=tree, display_url=display_url, more=more)
2265
class StoringUncommittedNotSupported(BzrError):
2267
_fmt = ('Branch "%(display_url)s" does not support storing uncommitted'
2270
def __init__(self, branch):
2271
import breezy.urlutils as urlutils
2272
user_url = getattr(branch, "user_url", None)
2273
if user_url is None:
2274
display_url = str(branch)
2276
display_url = urlutils.unescape_for_display(user_url, 'ascii')
2277
BzrError.__init__(self, branch=branch, display_url=display_url)
2280
class ShelvedChanges(UncommittedChanges):
2282
_fmt = ('Working tree "%(display_url)s" has shelved changes'
2283
' (See brz shelve --list).%(more)s')
2791
_fmt = 'Working tree "%(display_url)s" has uncommitted changes.'
2793
def __init__(self, tree):
2794
import bzrlib.urlutils as urlutils
2795
display_url = urlutils.unescape_for_display(
2796
tree.bzrdir.root_transport.base, 'ascii')
2797
BzrError.__init__(self, tree=tree, display_url=display_url)
2800
class MissingTemplateVariable(BzrError):
2802
_fmt = 'Variable {%(name)s} is not available.'
2804
def __init__(self, name):
2808
class NoTemplate(BzrError):
2810
_fmt = 'No template specified.'
2813
class UnableCreateSymlink(BzrError):
2815
_fmt = 'Unable to create symlink %(path_str)son this platform'
2817
def __init__(self, path=None):
2821
path_str = repr(str(path))
2822
except UnicodeEncodeError:
2823
path_str = repr(path)
2825
self.path_str = path_str
2828
class UnsupportedTimezoneFormat(BzrError):
2830
_fmt = ('Unsupported timezone format "%(timezone)s", '
2831
'options are "utc", "original", "local".')
2833
def __init__(self, timezone):
2834
self.timezone = timezone
2837
class CommandAvailableInPlugin(StandardError):
2839
internal_error = False
2841
def __init__(self, cmd_name, plugin_metadata, provider):
2843
self.plugin_metadata = plugin_metadata
2844
self.cmd_name = cmd_name
2845
self.provider = provider
2849
_fmt = ('"%s" is not a standard bzr command. \n'
2850
'However, the following official plugin provides this command: %s\n'
2851
'You can install it by going to: %s'
2852
% (self.cmd_name, self.plugin_metadata['name'],
2853
self.plugin_metadata['url']))
2858
class NoPluginAvailable(BzrError):
2862
class NotATerminal(BzrError):
2864
_fmt = 'Unable to ask for a password without real terminal.'
2286
2867
class UnableEncodePath(BzrError):
2303
2884
BzrError.__init__(self, alias_name=alias_name)
2887
class DirectoryLookupFailure(BzrError):
2888
"""Base type for lookup errors."""
2893
class InvalidLocationAlias(DirectoryLookupFailure):
2895
_fmt = '"%(alias_name)s" is not a valid location alias.'
2897
def __init__(self, alias_name):
2898
DirectoryLookupFailure.__init__(self, alias_name=alias_name)
2901
class UnsetLocationAlias(DirectoryLookupFailure):
2903
_fmt = 'No %(alias_name)s location assigned.'
2905
def __init__(self, alias_name):
2906
DirectoryLookupFailure.__init__(self, alias_name=alias_name[1:])
2306
2909
class CannotBindAddress(BzrError):
2308
2911
_fmt = 'Cannot bind address "%(host)s:%(port)i": %(orig_error)s.'
2310
2913
def __init__(self, host, port, orig_error):
2311
# nb: in python2.4 socket.error doesn't have a useful repr
2312
2914
BzrError.__init__(self, host=host, port=port,
2313
orig_error=repr(orig_error.args))
2915
orig_error=orig_error[1])
2918
class UnknownRules(BzrError):
2920
_fmt = ('Unknown rules detected: %(unknowns_str)s.')
2922
def __init__(self, unknowns):
2923
BzrError.__init__(self, unknowns_str=", ".join(unknowns))
2926
class HookFailed(BzrError):
2927
"""Raised when a pre_change_branch_tip hook function fails anything other
2928
than TipChangeRejected.
2931
_fmt = ("Hook '%(hook_name)s' during %(hook_stage)s failed:\n"
2932
"%(traceback_text)s%(exc_value)s")
2934
def __init__(self, hook_stage, hook_name, exc_info):
2936
self.hook_stage = hook_stage
2937
self.hook_name = hook_name
2938
self.exc_info = exc_info
2939
self.exc_type = exc_info[0]
2940
self.exc_value = exc_info[1]
2941
self.exc_tb = exc_info[2]
2942
self.traceback_text = ''.join(traceback.format_tb(self.exc_tb))
2316
2945
class TipChangeRejected(BzrError):
2337
2979
_fmt = 'The user aborted the operation.'
2982
class MustHaveWorkingTree(BzrError):
2984
_fmt = ("Branching '%(url)s'(%(format)s) must create a working tree.")
2986
def __init__(self, format, url):
2987
BzrError.__init__(self, format=format, url=url)
2990
class NoSuchView(BzrError):
2991
"""A view does not exist.
2994
_fmt = u"No such view: %(view_name)s."
2996
def __init__(self, view_name):
2997
self.view_name = view_name
3000
class ViewsNotSupported(BzrError):
3001
"""Views are not supported by a tree format.
3004
_fmt = ("Views are not supported by %(tree)s;"
3005
" use 'bzr upgrade' to change your tree to a later format.")
3007
def __init__(self, tree):
3011
class FileOutsideView(BzrError):
3013
_fmt = ('Specified file "%(file_name)s" is outside the current view: '
3016
def __init__(self, file_name, view_files):
3017
self.file_name = file_name
3018
self.view_str = ", ".join(view_files)
2340
3021
class UnresumableWriteGroup(BzrError):
2342
3023
_fmt = ("Repository %(repository)s cannot resume write group "
2359
3040
def __init__(self, repository):
2360
3041
self.repository = repository
2363
class LossyPushToSameVCS(BzrError):
2365
_fmt = ("Lossy push not possible between %(source_branch)r and "
2366
"%(target_branch)r that are in the same VCS.")
2368
internal_error = True
2370
def __init__(self, source_branch, target_branch):
2371
self.source_branch = source_branch
2372
self.target_branch = target_branch
2375
class NoRoundtrippingSupport(BzrError):
2377
_fmt = ("Roundtripping is not supported between %(source_branch)r and "
2378
"%(target_branch)r.")
2380
internal_error = True
2382
def __init__(self, source_branch, target_branch):
2383
self.source_branch = source_branch
2384
self.target_branch = target_branch
2387
class NoColocatedBranchSupport(BzrError):
2389
_fmt = ("%(controldir)r does not support co-located branches.")
2391
def __init__(self, controldir):
2392
self.controldir = controldir
2395
class RecursiveBind(BzrError):
2397
_fmt = ('Branch "%(branch_url)s" appears to be bound to itself. '
2398
'Please use `brz unbind` to fix.')
2400
def __init__(self, branch_url):
2401
self.branch_url = branch_url
2404
class UnsupportedKindChange(BzrError):
2406
_fmt = ("Kind change from %(from_kind)s to %(to_kind)s for "
2407
"%(path)s not supported by format %(format)r")
2409
def __init__(self, path, from_kind, to_kind, format):
2411
self.from_kind = from_kind
2412
self.to_kind = to_kind
2413
self.format = format
2416
class ChangesAlreadyStored(BzrCommandError):
2418
_fmt = ('Cannot store uncommitted changes because this branch already'
2419
' stores uncommitted changes.')
2422
class RevnoOutOfBounds(InternalBzrError):
2424
_fmt = ("The requested revision number %(revno)d is outside of the "
2425
"expected boundaries (%(minimum)d <= %(maximum)d).")
2427
def __init__(self, revno, bounds):
2428
InternalBzrError.__init__(
2429
self, revno=revno, minimum=bounds[0], maximum=bounds[1])