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
class AlreadyBuilding(BzrError):
208
_fmt = "The tree builder is already building a tree."
211
149
class BranchError(BzrError):
212
150
"""Base class for concrete 'errors about a branch'."""
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):
175
class IncompatibleVersion(BzrError):
177
_fmt = 'API %(api)s is not compatible; one of versions %(wanted)r '\
178
'is required, but current version is %(current)r.'
180
def __init__(self, api, wanted, current):
253
182
self.wanted = wanted
254
self.minimum = minimum
255
183
self.current = current
312
240
_fmt = 'There is no public branch set for "%(branch_url)s".'
314
242
def __init__(self, branch):
315
import bzrlib.urlutils as urlutils
243
from . import urlutils
316
244
public_location = urlutils.unescape_for_display(branch.base, 'ascii')
317
245
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
248
class NoSuchId(BzrError):
331
250
_fmt = 'The file id "%(file_id)s" is not present in the tree %(tree)s.'
470
379
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
382
class StrictCommitFailed(BzrError):
483
384
_fmt = "Commit refused because there are unknown files in the tree"
569
470
_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
473
class UnavailableRepresentation(InternalBzrError):
600
475
_fmt = ("The encoding '%(wanted)s' is not available for key %(key)s which "
705
580
_fmt = 'Not a branch: "%(path)s"%(detail)s.'
707
def __init__(self, path, detail=None, bzrdir=None):
708
import bzrlib.urlutils as urlutils
582
def __init__(self, path, detail=None, controldir=None):
583
from . import urlutils
709
584
path = urlutils.unescape_for_display(path, 'ascii')
710
585
if detail is not None:
711
586
detail = ': ' + detail
712
587
self.detail = detail
588
self.controldir = controldir
714
589
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.
592
return '<%s %r>' % (self.__class__.__name__, self.__dict__)
594
def _get_format_string(self):
595
# GZ 2017-06-08: Not the best place to lazy fill detail in.
720
596
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'
597
self.detail = self._get_detail()
598
return super(NotBranchError, self)._get_format_string()
600
def _get_detail(self):
601
if self.controldir is not None:
603
self.controldir.open_repository()
604
except NoRepositoryPresent:
606
except Exception as e:
607
# Just ignore unexpected errors. Raising arbitrary errors
608
# during str(err) can provoke strange bugs. Concretely
609
# Launchpad's codehosting managed to raise NotBranchError
610
# here, and then get stuck in an infinite loop/recursion
611
# trying to str() that error. All this error really cares
612
# about that there's no working repository there, and if
613
# open_repository() fails, there probably isn't.
614
return ': ' + e.__class__.__name__
730
return PathError._format(self)
616
return ': location is a repository'
733
620
class NoSubmitBranch(PathError):
735
622
_fmt = 'No submit branch available for branch "%(path)s"'
737
624
def __init__(self, branch):
738
import bzrlib.urlutils as urlutils
625
from . import urlutils
739
626
self.path = urlutils.unescape_for_display(branch.base, 'ascii')
629
class AlreadyControlDirError(PathError):
631
_fmt = 'A control directory already exists: "%(path)s".'
742
634
class AlreadyBranchError(PathError):
744
636
_fmt = 'Already a branch: "%(path)s".'
639
class InvalidBranchName(PathError):
641
_fmt = "Invalid branch name: %(name)s"
643
def __init__(self, name):
644
BzrError.__init__(self)
648
class ParentBranchExists(AlreadyBranchError):
650
_fmt = 'Parent branch already exists: "%(path)s".'
747
653
class BranchExistsWithoutWorkingTree(PathError):
749
655
_fmt = 'Directory contains a branch, but no working tree \
750
(use bzr checkout if you wish to build a working tree): "%(path)s"'
656
(use brz checkout if you wish to build a working tree): "%(path)s"'
753
659
class AtomicFileAlreadyClosed(PathError):
773
679
class NoRepositoryPresent(BzrError):
775
681
_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
682
def __init__(self, controldir):
683
BzrError.__init__(self)
684
self.path = controldir.transport.clone('..').base
792
687
class UnsupportedFormatError(BzrError):
794
_fmt = "Unsupported branch format: %(format)s\nPlease run 'bzr upgrade'"
689
_fmt = "Unsupported branch format: %(format)s\nPlease run 'brz upgrade'"
797
692
class UnknownFormatError(BzrError):
806
701
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
703
_fmt = "Format %(format)s is not compatible with .bzr version %(controldir)s."
705
def __init__(self, format, controldir_format):
706
BzrError.__init__(self)
708
self.controldir = controldir_format
711
class ParseFormatError(BzrError):
713
_fmt = "Parse error on line %(lineno)d of %(format)s format: %(line)s"
715
def __init__(self, format, lineno, line, text):
716
BzrError.__init__(self)
816
723
class IncompatibleRepositories(BzrError):
850
757
"""Construct a new AlreadyVersionedError.
852
759
:param path: This is the path which is versioned,
853
which should be in a user friendly form.
760
which should be in a user friendly form.
854
761
:param context_info: If given, this is information about the context,
855
which could explain why this is expected to not be versioned.
762
which could explain why this is expected to not be versioned.
857
764
BzrError.__init__(self)
871
778
"""Construct a new NotVersionedError.
873
780
:param path: This is the path which is not versioned,
874
which should be in a user friendly form.
781
which should be in a user friendly form.
875
782
:param context_info: If given, this is information about the context,
876
which could explain why this is expected to be versioned.
783
which could explain why this is expected to be versioned.
878
785
BzrError.__init__(self)
947
854
# original exception is available as e.original_error
949
856
# 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.
857
def __init__(self, msg):
957
861
class LockActive(LockError):
1075
977
self.target = target
980
class LockCorrupt(LockError):
982
_fmt = ("Lock is apparently held, but corrupted: %(corruption_info)s\n"
983
"Use 'brz break-lock' to clear it")
985
internal_error = False
987
def __init__(self, corruption_info, file_data=None):
988
self.corruption_info = corruption_info
989
self.file_data = file_data
1078
992
class LockNotHeld(LockError):
1080
994
_fmt = "Lock not held: %(lock)s"
1119
1033
BzrError.__init__(self, files=files, files_str=files_str)
1036
class ExcludesUnsupported(BzrError):
1038
_fmt = ('Excluding paths during commit is not supported by '
1039
'repository at %(repository)r.')
1041
def __init__(self, repository):
1042
BzrError.__init__(self, repository=repository)
1122
1045
class BadCommitMessageEncoding(BzrError):
1124
1047
_fmt = 'The specified commit message contains characters unsupported by '\
1180
1103
class InvalidRevisionSpec(BzrError):
1182
1105
_fmt = ("Requested revision: '%(spec)s' does not exist in branch:"
1183
" %(branch)s%(extra)s")
1106
" %(branch_url)s%(extra)s")
1185
1108
def __init__(self, spec, branch, extra=None):
1186
1109
BzrError.__init__(self, branch=branch, spec=spec)
1110
self.branch_url = getattr(branch, 'user_url', str(branch))
1188
1112
self.extra = '\n' + str(extra)
1190
1114
self.extra = ''
1193
class HistoryMissing(BzrError):
1195
_fmt = "%(branch)s is missing %(object_type)s {%(object_id)s}"
1198
1117
class AppendRevisionsOnlyViolation(BzrError):
1200
1119
_fmt = ('Operation denied because it would change the main history,'
1202
1121
' branch "%(location)s".')
1204
1123
def __init__(self, location):
1205
import bzrlib.urlutils as urlutils
1124
import breezy.urlutils as urlutils
1206
1125
location = urlutils.unescape_for_display(location, 'ascii')
1207
1126
BzrError.__init__(self, location=location)
1265
1184
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
1187
class NoCommits(BranchError):
1281
1189
_fmt = "Branch %(branch)s has no commits."
1339
1247
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
1250
class VersionedFileError(BzrError):
1417
1252
_fmt = "Versioned file error"
1685
1527
class InvalidHttpResponse(TransportError):
1687
_fmt = "Invalid http response for %(path)s: %(msg)s"
1529
_fmt = "Invalid http response for %(path)s: %(msg)s%(orig_error)s"
1689
1531
def __init__(self, path, msg, orig_error=None):
1690
1532
self.path = path
1533
if orig_error is None:
1536
# This is reached for obscure and unusual errors so we want to
1537
# preserve as much info as possible to ease debug.
1538
orig_error = ': %r' % (orig_error,)
1691
1539
TransportError.__init__(self, msg, orig_error=orig_error)
1700
1548
InvalidHttpResponse.__init__(self, path, msg)
1551
class HttpBoundaryMissing(InvalidHttpResponse):
1552
"""A multipart response ends with no boundary marker.
1554
This is a special case caused by buggy proxies, described in
1555
<https://bugs.launchpad.net/bzr/+bug/198646>.
1558
_fmt = "HTTP MIME Boundary missing for %(path)s: %(msg)s"
1560
def __init__(self, path, msg):
1561
InvalidHttpResponse.__init__(self, path, msg)
1703
1564
class InvalidHttpContentType(InvalidHttpResponse):
1705
1566
_fmt = 'Invalid http Content-type "%(ctype)s" for %(path)s: %(msg)s'
1733
1594
_fmt = "Working tree has conflicts."
1736
class ParseConfigError(BzrError):
1738
def __init__(self, errors, filename):
1739
if filename is None:
1741
message = "Error(s) parsing config file %s:\n%s" % \
1742
(filename, ('\n'.join(e.msg for e in errors)))
1743
BzrError.__init__(self, message)
1746
class NoEmailInUsername(BzrError):
1748
_fmt = "%(username)r does not seem to contain a reasonable email address"
1750
def __init__(self, username):
1751
BzrError.__init__(self)
1752
self.username = username
1755
class SigningFailed(BzrError):
1757
_fmt = 'Failed to gpg sign data with command "%(command_line)s"'
1759
def __init__(self, command_line):
1760
BzrError.__init__(self, command_line=command_line)
1597
class DependencyNotPresent(BzrError):
1599
_fmt = 'Unable to import library "%(library)s": %(error)s'
1601
def __init__(self, library, error):
1602
BzrError.__init__(self, library=library, error=error)
1763
1605
class WorkingTreeNotRevision(BzrError):
1925
1767
_fmt = "Moving the root directory is not supported at this time"
1770
class TransformRenameFailed(BzrError):
1772
_fmt = "Failed to rename %(from_path)s to %(to_path)s: %(why)s"
1774
def __init__(self, from_path, to_path, why, errno):
1775
self.from_path = from_path
1776
self.to_path = to_path
1928
1781
class BzrMoveFailedError(BzrError):
1930
_fmt = "Could not move %(from_path)s%(operator)s %(to_path)s%(extra)s"
1783
_fmt = ("Could not move %(from_path)s%(operator)s %(to_path)s"
1784
"%(_has_extra)s%(extra)s")
1932
1786
def __init__(self, from_path='', to_path='', extra=None):
1933
from bzrlib.osutils import splitpath
1787
from breezy.osutils import splitpath
1934
1788
BzrError.__init__(self)
1936
self.extra = ': ' + str(extra)
1790
self.extra, self._has_extra = extra, ': '
1792
self.extra = self._has_extra = ''
1940
1794
has_from = len(from_path) > 0
1941
1795
has_to = len(to_path) > 0
1963
1817
class BzrRenameFailedError(BzrMoveFailedError):
1965
_fmt = "Could not rename %(from_path)s%(operator)s %(to_path)s%(extra)s"
1819
_fmt = ("Could not rename %(from_path)s%(operator)s %(to_path)s"
1820
"%(_has_extra)s%(extra)s")
1967
1822
def __init__(self, from_path, to_path, extra=None):
1968
1823
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
1826
class BzrBadParameterNotString(BzrBadParameter):
2002
1844
_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
1847
class ParamikoNotPresent(DependencyNotPresent):
2015
1849
_fmt = "Unable to import paramiko (required for sftp support): %(error)s"
2141
1975
'"%(revstring)s".'
2143
1977
def __init__(self, public_location, revstring):
2144
import bzrlib.urlutils as urlutils
1978
import breezy.urlutils as urlutils
2145
1979
public_location = urlutils.unescape_for_display(public_location,
2147
1981
BzrError.__init__(self, public_location=public_location,
2539
2381
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
2384
class UnexpectedSmartServerResponse(BzrError):
2590
2386
_fmt = "Could not understand response from smart server: %(response_tuple)r"
2615
2411
class UnknownErrorFromSmartServer(BzrError):
2616
"""An ErrorFromSmartServer could not be translated into a typical bzrlib
2412
"""An ErrorFromSmartServer could not be translated into a typical breezy
2619
2415
This is distinct from ErrorFromSmartServer so that it is possible to
2620
2416
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.
2418
- ErrorFromSmartServer was uncaught. This is logic error in the client
2419
and so should provoke a traceback to the user.
2420
- ErrorFromSmartServer was caught but its error_tuple could not be
2421
translated. This is probably because the server sent us garbage, and
2422
should not provoke a traceback.
2628
2425
_fmt = "Server sent an unexpected error: %(error_tuple)r"
2700
2492
self.reason = reason
2703
class SMTPError(BzrError):
2705
_fmt = "SMTP error: %(error)s"
2707
def __init__(self, error):
2711
class NoMessageSupplied(BzrError):
2713
_fmt = "No message supplied."
2716
class NoMailAddressSpecified(BzrError):
2718
_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
class MailClientNotFound(BzrError):
2731
_fmt = "Unable to find mail client with the following names:"\
2732
" %(mail_command_list_string)s"
2734
def __init__(self, mail_command_list):
2735
mail_command_list_string = ', '.join(mail_command_list)
2736
BzrError.__init__(self, mail_command_list=mail_command_list,
2737
mail_command_list_string=mail_command_list_string)
2739
class SMTPConnectionRefused(SMTPError):
2741
_fmt = "SMTP connection to %(host)s refused"
2743
def __init__(self, error, host):
2748
class DefaultSMTPConnectionRefused(SMTPConnectionRefused):
2750
_fmt = "Please specify smtp_server. No server at default %(host)s."
2753
2495
class BzrDirError(BzrError):
2755
def __init__(self, bzrdir):
2756
import bzrlib.urlutils as urlutils
2757
display_url = urlutils.unescape_for_display(bzrdir.user_url,
2497
def __init__(self, controldir):
2498
from . import urlutils
2499
display_url = urlutils.unescape_for_display(controldir.user_url,
2759
BzrError.__init__(self, bzrdir=bzrdir, display_url=display_url)
2501
BzrError.__init__(self, controldir=controldir, display_url=display_url)
2762
2504
class UnsyncedBranches(BzrDirError):
2764
2506
_fmt = ("'%(display_url)s' is not in sync with %(target_url)s. See"
2765
" bzr help sync-for-reconfigure.")
2507
" brz help sync-for-reconfigure.")
2767
def __init__(self, bzrdir, target_branch):
2768
BzrDirError.__init__(self, bzrdir)
2769
import bzrlib.urlutils as urlutils
2509
def __init__(self, controldir, target_branch):
2510
BzrError.__init__(self, controldir)
2511
from . import urlutils
2770
2512
self.target_url = urlutils.unescape_for_display(target_branch.base,
2826
2568
class UncommittedChanges(BzrError):
2828
2570
_fmt = ('Working tree "%(display_url)s" has uncommitted changes'
2829
' (See bzr status).%(more)s')
2571
' (See brz status).%(more)s')
2831
2573
def __init__(self, tree, more=None):
2832
2574
if more is None:
2835
2577
more = ' ' + more
2836
import bzrlib.urlutils as urlutils
2837
display_url = urlutils.unescape_for_display(
2838
tree.user_url, 'ascii')
2578
import breezy.urlutils as urlutils
2579
user_url = getattr(tree, "user_url", None)
2580
if user_url is None:
2581
display_url = str(tree)
2583
display_url = urlutils.unescape_for_display(user_url, 'ascii')
2839
2584
BzrError.__init__(self, tree=tree, display_url=display_url, more=more)
2587
class StoringUncommittedNotSupported(BzrError):
2589
_fmt = ('Branch "%(display_url)s" does not support storing uncommitted'
2592
def __init__(self, branch):
2593
import breezy.urlutils as urlutils
2594
user_url = getattr(branch, "user_url", None)
2595
if user_url is None:
2596
display_url = str(branch)
2598
display_url = urlutils.unescape_for_display(user_url, 'ascii')
2599
BzrError.__init__(self, branch=branch, display_url=display_url)
2602
class ShelvedChanges(UncommittedChanges):
2604
_fmt = ('Working tree "%(display_url)s" has shelved changes'
2605
' (See brz shelve --list).%(more)s')
2842
2608
class MissingTemplateVariable(BzrError):
2844
2610
_fmt = 'Variable {%(name)s} is not available.'
2876
2642
self.timezone = timezone
2879
class CommandAvailableInPlugin(StandardError):
2881
internal_error = False
2883
def __init__(self, cmd_name, plugin_metadata, provider):
2885
self.plugin_metadata = plugin_metadata
2886
self.cmd_name = cmd_name
2887
self.provider = provider
2891
_fmt = ('"%s" is not a standard bzr command. \n'
2892
'However, the following official plugin provides this command: %s\n'
2893
'You can install it by going to: %s'
2894
% (self.cmd_name, self.plugin_metadata['name'],
2895
self.plugin_metadata['url']))
2900
class NoPluginAvailable(BzrError):
2904
2645
class UnableEncodePath(BzrError):
2906
2647
_fmt = ('Unable to encode %(kind)s path %(path)r in '
2907
2648
'user encoding %(user_encoding)s')
2909
2650
def __init__(self, path, kind):
2910
from bzrlib.osutils import get_user_encoding
2651
from breezy.osutils import get_user_encoding
2911
2652
self.path = path
2912
2653
self.kind = kind
2913
self.user_encoding = osutils.get_user_encoding()
2654
self.user_encoding = get_user_encoding()
2916
2657
class NoSuchAlias(BzrError):
2961
2702
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
2705
class TipChangeRejected(BzrError):
2990
2706
"""A pre_change_branch_tip hook function may raise this to cleanly and
2991
2707
explicitly abort a change to a branch tip.
3000
class ShelfCorrupt(BzrError):
3002
_fmt = "Shelf corrupt."
3005
class NoSuchShelfId(BzrError):
3007
_fmt = 'No changes are shelved with id "%(shelf_id)d".'
3009
def __init__(self, shelf_id):
3010
BzrError.__init__(self, shelf_id=shelf_id)
3013
class InvalidShelfId(BzrError):
3015
_fmt = '"%(invalid_id)s" is not a valid shelf id, try a number instead.'
3017
def __init__(self, invalid_id):
3018
BzrError.__init__(self, invalid_id=invalid_id)
2716
class DecompressCorruption(BzrError):
2718
_fmt = "Corruption while decompressing repository file%(orig_error)s"
2720
def __init__(self, orig_error=None):
2721
if orig_error is not None:
2722
self.orig_error = ", %s" % (orig_error,)
2724
self.orig_error = ""
2725
BzrError.__init__(self)
3021
2728
class JailBreak(BzrError):
3039
2746
BzrError.__init__(self, format=format, url=url)
3042
class NoSuchView(BzrError):
3043
"""A view does not exist.
3046
_fmt = u"No such view: %(view_name)s."
3048
def __init__(self, view_name):
3049
self.view_name = view_name
3052
class ViewsNotSupported(BzrError):
3053
"""Views are not supported by a tree format.
3056
_fmt = ("Views are not supported by %(tree)s;"
3057
" use 'bzr upgrade' to change your tree to a later format.")
3059
def __init__(self, tree):
3063
class FileOutsideView(BzrError):
3065
_fmt = ('Specified file "%(file_name)s" is outside the current view: '
3068
def __init__(self, file_name, view_files):
3069
self.file_name = file_name
3070
self.view_str = ", ".join(view_files)
3073
2749
class UnresumableWriteGroup(BzrError):
3075
2751
_fmt = ("Repository %(repository)s cannot resume write group "
3117
2793
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
2796
class NoColocatedBranchSupport(BzrError):
3132
_fmt = ("%(bzrdir)r does not support co-located branches.")
3134
def __init__(self, bzrdir):
3135
self.bzrdir = bzrdir
2798
_fmt = ("%(controldir)r does not support co-located branches.")
2800
def __init__(self, controldir):
2801
self.controldir = controldir
2804
class RecursiveBind(BzrError):
2806
_fmt = ('Branch "%(branch_url)s" appears to be bound to itself. '
2807
'Please use `brz unbind` to fix.')
2809
def __init__(self, branch_url):
2810
self.branch_url = branch_url
2813
class UnsupportedKindChange(BzrError):
2815
_fmt = ("Kind change from %(from_kind)s to %(to_kind)s for "
2816
"%(path)s not supported by format %(format)r")
2818
def __init__(self, path, from_kind, to_kind, format):
2820
self.from_kind = from_kind
2821
self.to_kind = to_kind
2822
self.format = format
2825
class FeatureAlreadyRegistered(BzrError):
2827
_fmt = 'The feature %(feature)s has already been registered.'
2829
def __init__(self, feature):
2830
self.feature = feature
2833
class ChangesAlreadyStored(BzrCommandError):
2835
_fmt = ('Cannot store uncommitted changes because this branch already'
2836
' stores uncommitted changes.')