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
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.'
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"
705
625
_fmt = 'Not a branch: "%(path)s"%(detail)s.'
707
def __init__(self, path, detail=None, bzrdir=None):
708
import bzrlib.urlutils as urlutils
627
def __init__(self, path, detail=None, controldir=None):
628
from . import urlutils
709
629
path = urlutils.unescape_for_display(path, 'ascii')
710
630
if detail is not None:
711
631
detail = ': ' + detail
712
632
self.detail = detail
633
self.controldir = controldir
714
634
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.
637
return '<%s %r>' % (self.__class__.__name__, self.__dict__)
639
def _get_format_string(self):
640
# GZ 2017-06-08: Not the best place to lazy fill detail in.
720
641
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'
642
self.detail = self._get_detail()
643
return super(NotBranchError, self)._get_format_string()
645
def _get_detail(self):
646
if self.controldir is not None:
648
self.controldir.open_repository()
649
except NoRepositoryPresent:
651
except Exception as e:
652
# Just ignore unexpected errors. Raising arbitrary errors
653
# during str(err) can provoke strange bugs. Concretely
654
# Launchpad's codehosting managed to raise NotBranchError
655
# here, and then get stuck in an infinite loop/recursion
656
# trying to str() that error. All this error really cares
657
# about that there's no working repository there, and if
658
# open_repository() fails, there probably isn't.
659
return ': ' + e.__class__.__name__
730
return PathError._format(self)
661
return ': location is a repository'
733
665
class NoSubmitBranch(PathError):
735
667
_fmt = 'No submit branch available for branch "%(path)s"'
737
669
def __init__(self, branch):
738
import bzrlib.urlutils as urlutils
670
from . import urlutils
739
671
self.path = urlutils.unescape_for_display(branch.base, 'ascii')
674
class AlreadyControlDirError(PathError):
676
_fmt = 'A control directory already exists: "%(path)s".'
742
679
class AlreadyBranchError(PathError):
744
681
_fmt = 'Already a branch: "%(path)s".'
684
class InvalidBranchName(PathError):
686
_fmt = "Invalid branch name: %(name)s"
688
def __init__(self, name):
689
BzrError.__init__(self)
693
class ParentBranchExists(AlreadyBranchError):
695
_fmt = 'Parent branch already exists: "%(path)s".'
747
698
class BranchExistsWithoutWorkingTree(PathError):
749
700
_fmt = 'Directory contains a branch, but no working tree \
750
(use bzr checkout if you wish to build a working tree): "%(path)s"'
701
(use brz checkout if you wish to build a working tree): "%(path)s"'
753
704
class AtomicFileAlreadyClosed(PathError):
773
724
class NoRepositoryPresent(BzrError):
775
726
_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
727
def __init__(self, controldir):
728
BzrError.__init__(self)
729
self.path = controldir.transport.clone('..').base
792
732
class UnsupportedFormatError(BzrError):
794
_fmt = "Unsupported branch format: %(format)s\nPlease run 'bzr upgrade'"
734
_fmt = "Unsupported branch format: %(format)s\nPlease run 'brz upgrade'"
797
737
class UnknownFormatError(BzrError):
806
746
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
748
_fmt = "Format %(format)s is not compatible with .bzr version %(controldir)s."
750
def __init__(self, format, controldir_format):
751
BzrError.__init__(self)
753
self.controldir = controldir_format
756
class ParseFormatError(BzrError):
758
_fmt = "Parse error on line %(lineno)d of %(format)s format: %(line)s"
760
def __init__(self, format, lineno, line, text):
761
BzrError.__init__(self)
816
768
class IncompatibleRepositories(BzrError):
850
802
"""Construct a new AlreadyVersionedError.
852
804
:param path: This is the path which is versioned,
853
which should be in a user friendly form.
805
which should be in a user friendly form.
854
806
:param context_info: If given, this is information about the context,
855
which could explain why this is expected to not be versioned.
807
which could explain why this is expected to not be versioned.
857
809
BzrError.__init__(self)
871
823
"""Construct a new NotVersionedError.
873
825
:param path: This is the path which is not versioned,
874
which should be in a user friendly form.
826
which should be in a user friendly form.
875
827
:param context_info: If given, this is information about the context,
876
which could explain why this is expected to be versioned.
828
which could explain why this is expected to be versioned.
878
830
BzrError.__init__(self)
947
899
# original exception is available as e.original_error
949
901
# 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.
902
def __init__(self, msg):
957
906
class LockActive(LockError):
1075
1022
self.target = target
1025
class LockCorrupt(LockError):
1027
_fmt = ("Lock is apparently held, but corrupted: %(corruption_info)s\n"
1028
"Use 'brz break-lock' to clear it")
1030
internal_error = False
1032
def __init__(self, corruption_info, file_data=None):
1033
self.corruption_info = corruption_info
1034
self.file_data = file_data
1078
1037
class LockNotHeld(LockError):
1080
1039
_fmt = "Lock not held: %(lock)s"
1119
1078
BzrError.__init__(self, files=files, files_str=files_str)
1081
class ExcludesUnsupported(BzrError):
1083
_fmt = ('Excluding paths during commit is not supported by '
1084
'repository at %(repository)r.')
1086
def __init__(self, repository):
1087
BzrError.__init__(self, repository=repository)
1122
1090
class BadCommitMessageEncoding(BzrError):
1124
1092
_fmt = 'The specified commit message contains characters unsupported by '\
1180
1148
class InvalidRevisionSpec(BzrError):
1182
1150
_fmt = ("Requested revision: '%(spec)s' does not exist in branch:"
1183
" %(branch)s%(extra)s")
1151
" %(branch_url)s%(extra)s")
1185
1153
def __init__(self, spec, branch, extra=None):
1186
1154
BzrError.__init__(self, branch=branch, spec=spec)
1155
self.branch_url = getattr(branch, 'user_url', str(branch))
1188
1157
self.extra = '\n' + str(extra)
1190
1159
self.extra = ''
1193
class HistoryMissing(BzrError):
1195
_fmt = "%(branch)s is missing %(object_type)s {%(object_id)s}"
1198
1162
class AppendRevisionsOnlyViolation(BzrError):
1200
1164
_fmt = ('Operation denied because it would change the main history,'
1265
1229
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
1232
class NoCommits(BranchError):
1281
1234
_fmt = "Branch %(branch)s has no commits."
1339
1292
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
1295
class VersionedFileError(BzrError):
1417
1297
_fmt = "Versioned file error"
1685
1572
class InvalidHttpResponse(TransportError):
1687
_fmt = "Invalid http response for %(path)s: %(msg)s"
1574
_fmt = "Invalid http response for %(path)s: %(msg)s%(orig_error)s"
1689
1576
def __init__(self, path, msg, orig_error=None):
1690
1577
self.path = path
1578
if orig_error is None:
1581
# This is reached for obscure and unusual errors so we want to
1582
# preserve as much info as possible to ease debug.
1583
orig_error = ': %r' % (orig_error,)
1691
1584
TransportError.__init__(self, msg, orig_error=orig_error)
1700
1593
InvalidHttpResponse.__init__(self, path, msg)
1596
class HttpBoundaryMissing(InvalidHttpResponse):
1597
"""A multipart response ends with no boundary marker.
1599
This is a special case caused by buggy proxies, described in
1600
<https://bugs.launchpad.net/bzr/+bug/198646>.
1603
_fmt = "HTTP MIME Boundary missing for %(path)s: %(msg)s"
1605
def __init__(self, path, msg):
1606
InvalidHttpResponse.__init__(self, path, msg)
1703
1609
class InvalidHttpContentType(InvalidHttpResponse):
1705
1611
_fmt = 'Invalid http Content-type "%(ctype)s" for %(path)s: %(msg)s'
1733
1639
_fmt = "Working tree has conflicts."
1642
class ConfigContentError(BzrError):
1644
_fmt = "Config file %(filename)s is not UTF-8 encoded\n"
1646
def __init__(self, filename):
1647
BzrError.__init__(self)
1648
self.filename = filename
1736
1651
class ParseConfigError(BzrError):
1653
_fmt = "Error(s) parsing config file %(filename)s:\n%(errors)s"
1738
1655
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)
1656
BzrError.__init__(self)
1657
self.filename = filename
1658
self.errors = '\n'.join(e.msg for e in errors)
1661
class ConfigOptionValueError(BzrError):
1663
_fmt = ('Bad value "%(value)s" for option "%(name)s".\n'
1664
'See ``brz help %(name)s``')
1666
def __init__(self, name, value):
1667
BzrError.__init__(self, name=name, value=value)
1746
1670
class NoEmailInUsername(BzrError):
1752
1676
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)
1679
class DependencyNotPresent(BzrError):
1681
_fmt = 'Unable to import library "%(library)s": %(error)s'
1683
def __init__(self, library, error):
1684
BzrError.__init__(self, library=library, error=error)
1763
1687
class WorkingTreeNotRevision(BzrError):
1925
1849
_fmt = "Moving the root directory is not supported at this time"
1852
class TransformRenameFailed(BzrError):
1854
_fmt = "Failed to rename %(from_path)s to %(to_path)s: %(why)s"
1856
def __init__(self, from_path, to_path, why, errno):
1857
self.from_path = from_path
1858
self.to_path = to_path
1928
1863
class BzrMoveFailedError(BzrError):
1930
_fmt = "Could not move %(from_path)s%(operator)s %(to_path)s%(extra)s"
1865
_fmt = ("Could not move %(from_path)s%(operator)s %(to_path)s"
1866
"%(_has_extra)s%(extra)s")
1932
1868
def __init__(self, from_path='', to_path='', extra=None):
1933
from bzrlib.osutils import splitpath
1869
from breezy.osutils import splitpath
1934
1870
BzrError.__init__(self)
1936
self.extra = ': ' + str(extra)
1872
self.extra, self._has_extra = extra, ': '
1874
self.extra = self._has_extra = ''
1940
1876
has_from = len(from_path) > 0
1941
1877
has_to = len(to_path) > 0
1963
1899
class BzrRenameFailedError(BzrMoveFailedError):
1965
_fmt = "Could not rename %(from_path)s%(operator)s %(to_path)s%(extra)s"
1901
_fmt = ("Could not rename %(from_path)s%(operator)s %(to_path)s"
1902
"%(_has_extra)s%(extra)s")
1967
1904
def __init__(self, from_path, to_path, extra=None):
1968
1905
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
1908
class BzrBadParameterNotString(BzrBadParameter):
2002
1926
_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
1929
class ParamikoNotPresent(DependencyNotPresent):
2015
1931
_fmt = "Unable to import paramiko (required for sftp support): %(error)s"
2539
2463
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
2466
class UnexpectedSmartServerResponse(BzrError):
2590
2468
_fmt = "Could not understand response from smart server: %(response_tuple)r"
2615
2493
class UnknownErrorFromSmartServer(BzrError):
2616
"""An ErrorFromSmartServer could not be translated into a typical bzrlib
2494
"""An ErrorFromSmartServer could not be translated into a typical breezy
2619
2497
This is distinct from ErrorFromSmartServer so that it is possible to
2620
2498
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.
2500
- ErrorFromSmartServer was uncaught. This is logic error in the client
2501
and so should provoke a traceback to the user.
2502
- ErrorFromSmartServer was caught but its error_tuple could not be
2503
translated. This is probably because the server sent us garbage, and
2504
should not provoke a traceback.
2628
2507
_fmt = "Server sent an unexpected error: %(error_tuple)r"
2718
2597
_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
2600
class MailClientNotFound(BzrError):
2731
2602
_fmt = "Unable to find mail client with the following names:"\
2753
2624
class BzrDirError(BzrError):
2755
def __init__(self, bzrdir):
2756
import bzrlib.urlutils as urlutils
2757
display_url = urlutils.unescape_for_display(bzrdir.user_url,
2626
def __init__(self, controldir):
2627
from . import urlutils
2628
display_url = urlutils.unescape_for_display(controldir.user_url,
2759
BzrError.__init__(self, bzrdir=bzrdir, display_url=display_url)
2630
BzrError.__init__(self, controldir=controldir, display_url=display_url)
2762
2633
class UnsyncedBranches(BzrDirError):
2764
2635
_fmt = ("'%(display_url)s' is not in sync with %(target_url)s. See"
2765
" bzr help sync-for-reconfigure.")
2636
" brz help sync-for-reconfigure.")
2767
def __init__(self, bzrdir, target_branch):
2768
BzrDirError.__init__(self, bzrdir)
2769
import bzrlib.urlutils as urlutils
2638
def __init__(self, controldir, target_branch):
2639
BzrError.__init__(self, controldir)
2640
from . import urlutils
2770
2641
self.target_url = urlutils.unescape_for_display(target_branch.base,
2826
2697
class UncommittedChanges(BzrError):
2828
2699
_fmt = ('Working tree "%(display_url)s" has uncommitted changes'
2829
' (See bzr status).%(more)s')
2700
' (See brz status).%(more)s')
2831
2702
def __init__(self, tree, more=None):
2832
2703
if more is None:
2835
2706
more = ' ' + more
2836
import bzrlib.urlutils as urlutils
2837
display_url = urlutils.unescape_for_display(
2838
tree.user_url, 'ascii')
2707
import breezy.urlutils as urlutils
2708
user_url = getattr(tree, "user_url", None)
2709
if user_url is None:
2710
display_url = str(tree)
2712
display_url = urlutils.unescape_for_display(user_url, 'ascii')
2839
2713
BzrError.__init__(self, tree=tree, display_url=display_url, more=more)
2716
class StoringUncommittedNotSupported(BzrError):
2718
_fmt = ('Branch "%(display_url)s" does not support storing uncommitted'
2721
def __init__(self, branch):
2722
import breezy.urlutils as urlutils
2723
user_url = getattr(branch, "user_url", None)
2724
if user_url is None:
2725
display_url = str(branch)
2727
display_url = urlutils.unescape_for_display(user_url, 'ascii')
2728
BzrError.__init__(self, branch=branch, display_url=display_url)
2731
class ShelvedChanges(UncommittedChanges):
2733
_fmt = ('Working tree "%(display_url)s" has shelved changes'
2734
' (See brz shelve --list).%(more)s')
2842
2737
class MissingTemplateVariable(BzrError):
2844
2739
_fmt = 'Variable {%(name)s} is not available.'
2907
2802
'user encoding %(user_encoding)s')
2909
2804
def __init__(self, path, kind):
2910
from bzrlib.osutils import get_user_encoding
2805
from breezy.osutils import get_user_encoding
2911
2806
self.path = path
2912
2807
self.kind = kind
2913
self.user_encoding = osutils.get_user_encoding()
2808
self.user_encoding = get_user_encoding()
2811
class NoSuchConfig(BzrError):
2813
_fmt = ('The "%(config_id)s" configuration does not exist.')
2815
def __init__(self, config_id):
2816
BzrError.__init__(self, config_id=config_id)
2819
class NoSuchConfigOption(BzrError):
2821
_fmt = ('The "%(option_name)s" configuration option does not exist.')
2823
def __init__(self, option_name):
2824
BzrError.__init__(self, option_name=option_name)
2916
2827
class NoSuchAlias(BzrError):
2961
2872
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
2875
class TipChangeRejected(BzrError):
2990
2876
"""A pre_change_branch_tip hook function may raise this to cleanly and
2991
2877
explicitly abort a change to a branch tip.
3002
2888
_fmt = "Shelf corrupt."
2891
class DecompressCorruption(BzrError):
2893
_fmt = "Corruption while decompressing repository file%(orig_error)s"
2895
def __init__(self, orig_error=None):
2896
if orig_error is not None:
2897
self.orig_error = ", %s" % (orig_error,)
2899
self.orig_error = ""
2900
BzrError.__init__(self)
3005
2903
class NoSuchShelfId(BzrError):
3007
2905
_fmt = 'No changes are shelved with id "%(shelf_id)d".'
3117
3015
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
3018
class NoColocatedBranchSupport(BzrError):
3132
_fmt = ("%(bzrdir)r does not support co-located branches.")
3134
def __init__(self, bzrdir):
3135
self.bzrdir = bzrdir
3020
_fmt = ("%(controldir)r does not support co-located branches.")
3022
def __init__(self, controldir):
3023
self.controldir = controldir
3026
class NoWhoami(BzrError):
3028
_fmt = ('Unable to determine your name.\n'
3029
"Please, set your name with the 'whoami' command.\n"
3030
'E.g. brz whoami "Your Name <name@example.com>"')
3033
class RecursiveBind(BzrError):
3035
_fmt = ('Branch "%(branch_url)s" appears to be bound to itself. '
3036
'Please use `brz unbind` to fix.')
3038
def __init__(self, branch_url):
3039
self.branch_url = branch_url
3042
# FIXME: I would prefer to define the config related exception classes in
3043
# config.py but the lazy import mechanism proscribes this -- vila 20101222
3044
class OptionExpansionLoop(BzrError):
3046
_fmt = 'Loop involving %(refs)r while expanding "%(string)s".'
3048
def __init__(self, string, refs):
3049
self.string = string
3050
self.refs = '->'.join(refs)
3053
class ExpandingUnknownOption(BzrError):
3055
_fmt = 'Option "%(name)s" is not defined while expanding "%(string)s".'
3057
def __init__(self, name, string):
3059
self.string = string
3062
class IllegalOptionName(BzrError):
3064
_fmt = 'Option "%(name)s" is not allowed.'
3066
def __init__(self, name):
3070
class HpssVfsRequestNotAllowed(BzrError):
3072
_fmt = ("VFS requests over the smart server are not allowed. Encountered: "
3073
"%(method)s, %(arguments)s.")
3075
def __init__(self, method, arguments):
3076
self.method = method
3077
self.arguments = arguments
3080
class UnsupportedKindChange(BzrError):
3082
_fmt = ("Kind change from %(from_kind)s to %(to_kind)s for "
3083
"%(path)s not supported by format %(format)r")
3085
def __init__(self, path, from_kind, to_kind, format):
3087
self.from_kind = from_kind
3088
self.to_kind = to_kind
3089
self.format = format
3092
class FeatureAlreadyRegistered(BzrError):
3094
_fmt = 'The feature %(feature)s has already been registered.'
3096
def __init__(self, feature):
3097
self.feature = feature
3100
class ChangesAlreadyStored(BzrCommandError):
3102
_fmt = ('Cannot store uncommitted changes because this branch already'
3103
' stores uncommitted changes.')