54
54
Base class for errors raised by bzrlib.
56
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
59
details. (That can be overridden by -Derror on the command line.)
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.)
61
61
:cvar _fmt: Format string to display the error; this is expanded
62
by the instance's dict.
62
by the instance's dict.
65
65
internal_error = False
639
class UnstackableLocationError(BzrError):
641
_fmt = "The branch '%(branch_url)s' cannot be stacked on '%(target_url)s'."
643
def __init__(self, branch_url, target_url):
644
BzrError.__init__(self)
645
self.branch_url = branch_url
646
self.target_url = target_url
649
639
class UnstackableRepositoryFormat(BzrError):
651
641
_fmt = ("The repository '%(url)s'(%(format)s) is not a stackable format. "
702
692
# TODO: Probably this behavior of should be a common superclass
703
693
class NotBranchError(PathError):
705
_fmt = 'Not a branch: "%(path)s"%(detail)s.'
695
_fmt = 'Not a branch: "%(path)s".'
707
def __init__(self, path, detail=None, bzrdir=None):
697
def __init__(self, path):
708
698
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)
717
return '<%s %r>' % (self.__class__.__name__, self.__dict__)
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.
723
if self.detail is None:
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'
742
return PathError._format(self)
699
self.path = urlutils.unescape_for_display(path, 'ascii')
745
702
class NoSubmitBranch(PathError):
864
813
"""Construct a new AlreadyVersionedError.
866
815
:param path: This is the path which is versioned,
867
which should be in a user friendly form.
816
which should be in a user friendly form.
868
817
:param context_info: If given, this is information about the context,
869
which could explain why this is expected to not be versioned.
818
which could explain why this is expected to not be versioned.
871
820
BzrError.__init__(self)
885
834
"""Construct a new NotVersionedError.
887
836
:param path: This is the path which is not versioned,
888
which should be in a user friendly form.
837
which should be in a user friendly form.
889
838
:param context_info: If given, this is information about the context,
890
which could explain why this is expected to be versioned.
839
which could explain why this is expected to be versioned.
892
841
BzrError.__init__(self)
961
910
# original exception is available as e.original_error
963
912
# New code should prefer to raise specific subclasses
964
def __init__(self, msg):
913
def __init__(self, message):
914
# Python 2.5 uses a slot for StandardError.message,
915
# so use a different variable name. We now work around this in
916
# BzrError.__str__, but this member name is kept for compatability.
968
920
class LockActive(LockError):
1084
1038
self.target = target
1087
class LockCorrupt(LockError):
1089
_fmt = ("Lock is apparently held, but corrupted: %(corruption_info)s\n"
1090
"Use 'bzr break-lock' to clear it")
1092
internal_error = False
1094
def __init__(self, corruption_info, file_data=None):
1095
self.corruption_info = corruption_info
1096
self.file_data = file_data
1099
1041
class LockNotHeld(LockError):
1101
1043
_fmt = "Lock not held: %(lock)s"
1140
1082
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
1085
class BadCommitMessageEncoding(BzrError):
1154
1087
_fmt = 'The specified commit message contains characters unsupported by '\
1210
1143
class InvalidRevisionSpec(BzrError):
1212
_fmt = ("Requested revision: '%(spec)s' does not exist in branch:"
1213
" %(branch_url)s%(extra)s")
1145
_fmt = ("Requested revision: %(spec)r does not exist in branch:"
1146
" %(branch)s%(extra)s")
1215
1148
def __init__(self, spec, branch, extra=None):
1216
1149
BzrError.__init__(self, branch=branch, spec=spec)
1217
self.branch_url = getattr(branch, 'user_url', str(branch))
1219
1151
self.extra = '\n' + str(extra)
1241
1173
class DivergedBranches(BzrError):
1243
1175
_fmt = ("These branches have diverged."
1244
" Use the missing command to see how.\n"
1245
"Use the merge command to reconcile them.")
1176
" Use the merge command to reconcile them.")
1247
1178
def __init__(self, branch1, branch2):
1248
1179
self.branch1 = branch1
1296
1227
not_ancestor_id=not_ancestor_id)
1230
class InstallFailed(BzrError):
1232
def __init__(self, revisions):
1233
revision_str = ", ".join(str(r) for r in revisions)
1234
msg = "Could not install revisions:\n%s" % revision_str
1235
BzrError.__init__(self, msg)
1236
self.revisions = revisions
1299
1239
class AmbiguousBase(BzrError):
1301
1241
def __init__(self, bases):
1302
symbol_versioning.warn("BzrError AmbiguousBase has been deprecated "
1303
"as of bzrlib 0.8.", DeprecationWarning, stacklevel=2)
1242
warn("BzrError AmbiguousBase has been deprecated as of bzrlib 0.8.",
1304
1244
msg = ("The correct base is unclear, because %s are all equally close"
1305
1245
% ", ".join(bases))
1306
1246
BzrError.__init__(self, msg)
1412
1351
class WeaveParentMismatch(WeaveError):
1414
_fmt = "Parents are mismatched between two revisions. %(msg)s"
1353
_fmt = "Parents are mismatched between two revisions. %(message)s"
1417
1356
class WeaveInvalidChecksum(WeaveError):
1419
_fmt = "Text did not match its checksum: %(msg)s"
1358
_fmt = "Text did not match it's checksum: %(message)s"
1422
1361
class WeaveTextDiffers(WeaveError):
1716
1655
class InvalidHttpResponse(TransportError):
1718
_fmt = "Invalid http response for %(path)s: %(msg)s%(orig_error)s"
1657
_fmt = "Invalid http response for %(path)s: %(msg)s"
1720
1659
def __init__(self, path, msg, orig_error=None):
1721
1660
self.path = path
1722
if orig_error is None:
1725
# This is reached for obscure and unusual errors so we want to
1726
# preserve as much info as possible to ease debug.
1727
orig_error = ': %r' % (orig_error,)
1728
1661
TransportError.__init__(self, msg, orig_error=orig_error)
1770
1703
_fmt = "Working tree has conflicts."
1773
class ConfigContentError(BzrError):
1775
_fmt = "Config file %(filename)s is not UTF-8 encoded\n"
1777
def __init__(self, filename):
1778
BzrError.__init__(self)
1779
self.filename = filename
1782
1706
class ParseConfigError(BzrError):
1784
_fmt = "Error(s) parsing config file %(filename)s:\n%(errors)s"
1786
1708
def __init__(self, errors, filename):
1787
BzrError.__init__(self)
1788
self.filename = filename
1789
self.errors = '\n'.join(e.msg for e in errors)
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)
1792
1716
class NoEmailInUsername(BzrError):
1801
1725
class SigningFailed(BzrError):
1803
_fmt = 'Failed to GPG sign data with command "%(command_line)s"'
1727
_fmt = 'Failed to gpg sign data with command "%(command_line)s"'
1805
1729
def __init__(self, command_line):
1806
1730
BzrError.__init__(self, command_line=command_line)
1809
class SignatureVerificationFailed(BzrError):
1811
_fmt = 'Failed to verify GPG signature data with error "%(error)s"'
1813
def __init__(self, error):
1814
BzrError.__init__(self, error=error)
1817
class DependencyNotPresent(BzrError):
1819
_fmt = 'Unable to import library "%(library)s": %(error)s'
1821
def __init__(self, library, error):
1822
BzrError.__init__(self, library=library, error=error)
1825
class GpgmeNotInstalled(DependencyNotPresent):
1827
_fmt = 'python-gpgme is not installed, it is needed to verify signatures'
1829
def __init__(self, error):
1830
DependencyNotPresent.__init__(self, 'gpgme', error)
1833
1733
class WorkingTreeNotRevision(BzrError):
1835
1735
_fmt = ("The working tree for %(basedir)s has changed since"
1995
1895
_fmt = "Moving the root directory is not supported at this time"
1998
class TransformRenameFailed(BzrError):
2000
_fmt = "Failed to rename %(from_path)s to %(to_path)s: %(why)s"
2002
def __init__(self, from_path, to_path, why, errno):
2003
self.from_path = from_path
2004
self.to_path = to_path
2009
1898
class BzrMoveFailedError(BzrError):
2011
_fmt = ("Could not move %(from_path)s%(operator)s %(to_path)s"
2012
"%(_has_extra)s%(extra)s")
1900
_fmt = "Could not move %(from_path)s%(operator)s %(to_path)s%(extra)s"
2014
1902
def __init__(self, from_path='', to_path='', extra=None):
2015
1903
from bzrlib.osutils import splitpath
2016
1904
BzrError.__init__(self)
2018
self.extra, self._has_extra = extra, ': '
1906
self.extra = ': ' + str(extra)
2020
self.extra = self._has_extra = ''
2022
1910
has_from = len(from_path) > 0
2023
1911
has_to = len(to_path) > 0
2045
1933
class BzrRenameFailedError(BzrMoveFailedError):
2047
_fmt = ("Could not rename %(from_path)s%(operator)s %(to_path)s"
2048
"%(_has_extra)s%(extra)s")
1935
_fmt = "Could not rename %(from_path)s%(operator)s %(to_path)s%(extra)s"
2050
1937
def __init__(self, from_path, to_path, extra=None):
2051
1938
BzrMoveFailedError.__init__(self, from_path, to_path, extra)
2054
1940
class BzrRemoveChangedFilesError(BzrError):
2055
1941
"""Used when user is trying to remove changed files."""
2059
1945
"Use --keep to not delete them, or --force to delete them regardless.")
2061
1947
def __init__(self, tree_delta):
2062
symbol_versioning.warn(symbol_versioning.deprecated_in((2, 3, 0)) %
2063
"BzrRemoveChangedFilesError", DeprecationWarning, stacklevel=2)
2064
1948
BzrError.__init__(self)
2065
1949
self.changes_as_text = tree_delta.get_changes_as_text()
2066
1950
#self.paths_as_string = '\n'.join(changed_files)
2088
1972
_fmt = "Parameter %(param)s contains a newline."
1975
class DependencyNotPresent(BzrError):
1977
_fmt = 'Unable to import library "%(library)s": %(error)s'
1979
def __init__(self, library, error):
1980
BzrError.__init__(self, library=library, error=error)
2091
1983
class ParamikoNotPresent(DependencyNotPresent):
2093
1985
_fmt = "Unable to import paramiko (required for sftp support): %(error)s"
2113
2005
class BadConversionTarget(BzrError):
2115
_fmt = "Cannot convert from format %(from_format)s to format %(format)s." \
2007
_fmt = "Cannot convert to format %(format)s. %(problem)s"
2118
def __init__(self, problem, format, from_format=None):
2009
def __init__(self, problem, format):
2119
2010
BzrError.__init__(self)
2120
2011
self.problem = problem
2121
2012
self.format = format
2122
self.from_format = from_format or '(unspecified)'
2125
2015
class NoDiffFound(BzrError):
2202
2092
class OutOfDateTree(BzrError):
2204
_fmt = "Working tree is out of date, please run 'bzr update'.%(more)s"
2094
_fmt = "Working tree is out of date, please run 'bzr update'."
2206
def __init__(self, tree, more=None):
2096
def __init__(self, tree):
2211
2097
BzrError.__init__(self)
2212
2098
self.tree = tree
2216
2101
class PublicBranchOutOfDate(BzrError):
2270
2155
self.reason = reason
2273
class InconsistentDeltaDelta(InconsistentDelta):
2274
"""Used when we get a delta that is not valid."""
2276
_fmt = ("An inconsistent delta was supplied: %(delta)r"
2277
"\nreason: %(reason)s")
2279
def __init__(self, delta, reason):
2280
BzrError.__init__(self)
2282
self.reason = reason
2285
2158
class UpgradeRequired(BzrError):
2287
2160
_fmt = "To use this feature you must upgrade your branch at %(path)s."
2296
2169
_fmt = "To use this feature you must upgrade your repository at %(path)s."
2299
class RichRootUpgradeRequired(UpgradeRequired):
2301
_fmt = ("To use this feature you must upgrade your branch at %(path)s to"
2302
" a format which supports rich roots.")
2305
2172
class LocalRequiresBoundBranch(BzrError):
2307
2174
_fmt = "Cannot perform local-only commits on unbound branches."
2177
class InvalidProgressBarType(BzrError):
2179
_fmt = ("Environment variable BZR_PROGRESS_BAR='%(bar_type)s"
2180
" is not a supported type Select one of: %(valid_types)s")
2182
def __init__(self, bar_type, valid_types):
2183
BzrError.__init__(self, bar_type=bar_type, valid_types=valid_types)
2310
2186
class UnsupportedOperation(BzrError):
2312
2188
_fmt = ("The method %(mname)s is not supported on"
2697
2573
This is distinct from ErrorFromSmartServer so that it is possible to
2698
2574
distinguish between the following two cases:
2700
- ErrorFromSmartServer was uncaught. This is logic error in the client
2701
and so should provoke a traceback to the user.
2702
- ErrorFromSmartServer was caught but its error_tuple could not be
2703
translated. This is probably because the server sent us garbage, and
2704
should not provoke a traceback.
2575
- ErrorFromSmartServer was uncaught. This is logic error in the client
2576
and so should provoke a traceback to the user.
2577
- ErrorFromSmartServer was caught but its error_tuple could not be
2578
translated. This is probably because the server sent us garbage, and
2579
should not provoke a traceback.
2707
2582
_fmt = "Server sent an unexpected error: %(error_tuple)r"
2834
2709
def __init__(self, bzrdir):
2835
2710
import bzrlib.urlutils as urlutils
2836
display_url = urlutils.unescape_for_display(bzrdir.user_url,
2711
display_url = urlutils.unescape_for_display(bzrdir.root_transport.base,
2838
2713
BzrError.__init__(self, bzrdir=bzrdir, display_url=display_url)
2905
2780
class UncommittedChanges(BzrError):
2907
_fmt = ('Working tree "%(display_url)s" has uncommitted changes'
2908
' (See bzr status).%(more)s')
2782
_fmt = 'Working tree "%(display_url)s" has uncommitted changes.'
2910
def __init__(self, tree, more=None):
2784
def __init__(self, tree):
2915
2785
import bzrlib.urlutils as urlutils
2916
user_url = getattr(tree, "user_url", None)
2917
if user_url is None:
2918
display_url = str(tree)
2920
display_url = urlutils.unescape_for_display(user_url, 'ascii')
2921
BzrError.__init__(self, tree=tree, display_url=display_url, more=more)
2924
class ShelvedChanges(UncommittedChanges):
2926
_fmt = ('Working tree "%(display_url)s" has shelved changes'
2927
' (See bzr shelve --list).%(more)s')
2786
display_url = urlutils.unescape_for_display(
2787
tree.bzrdir.root_transport.base, 'ascii')
2788
BzrError.__init__(self, tree=tree, display_url=display_url)
2930
2791
class MissingTemplateVariable(BzrError):
3001
2862
self.user_encoding = osutils.get_user_encoding()
3004
class NoSuchConfig(BzrError):
3006
_fmt = ('The "%(config_id)s" configuration does not exist.')
3008
def __init__(self, config_id):
3009
BzrError.__init__(self, config_id=config_id)
3012
class NoSuchConfigOption(BzrError):
3014
_fmt = ('The "%(option_name)s" configuration option does not exist.')
3016
def __init__(self, option_name):
3017
BzrError.__init__(self, option_name=option_name)
3020
2865
class NoSuchAlias(BzrError):
3022
2867
_fmt = ('The alias "%(alias_name)s" does not exist.')
3052
2897
_fmt = 'Cannot bind address "%(host)s:%(port)i": %(orig_error)s.'
3054
2899
def __init__(self, host, port, orig_error):
3055
# nb: in python2.4 socket.error doesn't have a useful repr
3056
2900
BzrError.__init__(self, host=host, port=port,
3057
orig_error=repr(orig_error.args))
2901
orig_error=orig_error[1])
3060
2904
class UnknownRules(BzrError):
3068
2912
class HookFailed(BzrError):
3069
2913
"""Raised when a pre_change_branch_tip hook function fails anything other
3070
2914
than TipChangeRejected.
3072
Note that this exception is no longer raised, and the import is only left
3073
to be nice to code which might catch it in a plugin.
3076
2917
_fmt = ("Hook '%(hook_name)s' during %(hook_stage)s failed:\n"
3077
2918
"%(traceback_text)s%(exc_value)s")
3079
def __init__(self, hook_stage, hook_name, exc_info, warn=True):
3081
symbol_versioning.warn("BzrError HookFailed has been deprecated "
3082
"as of bzrlib 2.1.", DeprecationWarning, stacklevel=2)
2920
def __init__(self, hook_stage, hook_name, exc_info):
3083
2921
import traceback
3084
2922
self.hook_stage = hook_stage
3085
2923
self.hook_name = hook_name
3106
2944
_fmt = "Shelf corrupt."
3109
class DecompressCorruption(BzrError):
3111
_fmt = "Corruption while decompressing repository file%(orig_error)s"
3113
def __init__(self, orig_error=None):
3114
if orig_error is not None:
3115
self.orig_error = ", %s" % (orig_error,)
3117
self.orig_error = ""
3118
BzrError.__init__(self)
3121
2947
class NoSuchShelfId(BzrError):
3123
2949
_fmt = 'No changes are shelved with id "%(shelf_id)d".'
3208
3034
def __init__(self, repository):
3209
3035
self.repository = repository
3212
class LossyPushToSameVCS(BzrError):
3214
_fmt = ("Lossy push not possible between %(source_branch)r and "
3215
"%(target_branch)r that are in the same VCS.")
3217
internal_error = True
3219
def __init__(self, source_branch, target_branch):
3220
self.source_branch = source_branch
3221
self.target_branch = target_branch
3224
class NoRoundtrippingSupport(BzrError):
3226
_fmt = ("Roundtripping is not supported between %(source_branch)r and "
3227
"%(target_branch)r.")
3229
internal_error = True
3231
def __init__(self, source_branch, target_branch):
3232
self.source_branch = source_branch
3233
self.target_branch = target_branch
3236
class FileTimestampUnavailable(BzrError):
3238
_fmt = "The filestamp for %(path)s is not available."
3240
internal_error = True
3242
def __init__(self, path):
3246
class NoColocatedBranchSupport(BzrError):
3248
_fmt = ("%(bzrdir)r does not support co-located branches.")
3250
def __init__(self, bzrdir):
3251
self.bzrdir = bzrdir
3254
class NoWhoami(BzrError):
3256
_fmt = ('Unable to determine your name.\n'
3257
"Please, set your name with the 'whoami' command.\n"
3258
'E.g. bzr whoami "Your Name <name@example.com>"')
3261
class InvalidPattern(BzrError):
3263
_fmt = ('Invalid pattern(s) found. %(msg)s')
3265
def __init__(self, msg):
3269
class RecursiveBind(BzrError):
3271
_fmt = ('Branch "%(branch_url)s" appears to be bound to itself. '
3272
'Please use `bzr unbind` to fix.')
3274
def __init__(self, branch_url):
3275
self.branch_url = branch_url
3278
# FIXME: I would prefer to define the config related exception classes in
3279
# config.py but the lazy import mechanism proscribes this -- vila 20101222
3280
class OptionExpansionLoop(BzrError):
3282
_fmt = 'Loop involving %(refs)r while expanding "%(string)s".'
3284
def __init__(self, string, refs):
3285
self.string = string
3286
self.refs = '->'.join(refs)
3289
class ExpandingUnknownOption(BzrError):
3291
_fmt = 'Option %(name)s is not defined while expanding "%(string)s".'
3293
def __init__(self, name, string):
3295
self.string = string
3298
class NoCompatibleInter(BzrError):
3300
_fmt = ('No compatible object available for operations from %(source)r '
3303
def __init__(self, source, target):
3304
self.source = source
3305
self.target = target