1
# Copyright (C) 2005-2010 Canonical Ltd
1
# Copyright (C) 2005-2011 Canonical Ltd
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
713
713
self.bzrdir = bzrdir
714
714
PathError.__init__(self, path=path)
717
return '<%s %r>' % (self.__class__.__name__, self.__dict__)
716
719
def _format(self):
717
720
# XXX: Ideally self.detail would be a property, but Exceptions in
718
721
# Python 2.4 have to be old-style classes so properties don't work.
723
726
self.bzrdir.open_repository()
724
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.
727
739
self.detail = ': location is a repository'
783
795
_fmt = 'File "%(path)s" is not in branch %(branch_base)s.'
797
# use PathNotChild instead
798
@symbol_versioning.deprecated_method(symbol_versioning.deprecated_in((2, 3, 0)))
785
799
def __init__(self, branch, path):
786
800
BzrError.__init__(self)
787
801
self.branch = branch
947
961
# original exception is available as e.original_error
949
963
# 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.
964
def __init__(self, msg):
957
968
class LockActive(LockError):
1075
1084
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
1078
1099
class LockNotHeld(LockError):
1080
1101
_fmt = "Lock not held: %(lock)s"
1119
1140
BzrError.__init__(self, files=files, files_str=files_str)
1143
class ExcludesUnsupported(BzrError):
1145
_fmt = ('Excluding paths during commit is not supported by '
1146
'repository at %(repository)r.')
1148
def __init__(self, repository):
1149
BzrError.__init__(self, repository=repository)
1122
1152
class BadCommitMessageEncoding(BzrError):
1124
1154
_fmt = 'The specified commit message contains characters unsupported by '\
1180
1210
class InvalidRevisionSpec(BzrError):
1182
1212
_fmt = ("Requested revision: '%(spec)s' does not exist in branch:"
1183
" %(branch)s%(extra)s")
1213
" %(branch_url)s%(extra)s")
1185
1215
def __init__(self, spec, branch, extra=None):
1186
1216
BzrError.__init__(self, branch=branch, spec=spec)
1217
self.branch_url = getattr(branch, 'user_url', str(branch))
1188
1219
self.extra = '\n' + str(extra)
1381
1412
class WeaveParentMismatch(WeaveError):
1383
_fmt = "Parents are mismatched between two revisions. %(message)s"
1414
_fmt = "Parents are mismatched between two revisions. %(msg)s"
1386
1417
class WeaveInvalidChecksum(WeaveError):
1388
_fmt = "Text did not match it's checksum: %(message)s"
1419
_fmt = "Text did not match its checksum: %(msg)s"
1391
1422
class WeaveTextDiffers(WeaveError):
1736
1767
class ParseConfigError(BzrError):
1769
_fmt = "Error(s) parsing config file %(filename)s:\n%(errors)s"
1738
1771
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)
1772
BzrError.__init__(self)
1773
self.filename = filename
1774
self.errors = '\n'.join(e.msg for e in errors)
1746
1777
class NoEmailInUsername(BzrError):
1925
1956
_fmt = "Moving the root directory is not supported at this time"
1959
class TransformRenameFailed(BzrError):
1961
_fmt = "Failed to rename %(from_path)s to %(to_path)s: %(why)s"
1963
def __init__(self, from_path, to_path, why, errno):
1964
self.from_path = from_path
1965
self.to_path = to_path
1928
1970
class BzrMoveFailedError(BzrError):
1930
_fmt = "Could not move %(from_path)s%(operator)s %(to_path)s%(extra)s"
1972
_fmt = ("Could not move %(from_path)s%(operator)s %(to_path)s"
1973
"%(_has_extra)s%(extra)s")
1932
1975
def __init__(self, from_path='', to_path='', extra=None):
1933
1976
from bzrlib.osutils import splitpath
1934
1977
BzrError.__init__(self)
1936
self.extra = ': ' + str(extra)
1979
self.extra, self._has_extra = extra, ': '
1981
self.extra = self._has_extra = ''
1940
1983
has_from = len(from_path) > 0
1941
1984
has_to = len(to_path) > 0
1963
2006
class BzrRenameFailedError(BzrMoveFailedError):
1965
_fmt = "Could not rename %(from_path)s%(operator)s %(to_path)s%(extra)s"
2008
_fmt = ("Could not rename %(from_path)s%(operator)s %(to_path)s"
2009
"%(_has_extra)s%(extra)s")
1967
2011
def __init__(self, from_path, to_path, extra=None):
1968
2012
BzrMoveFailedError.__init__(self, from_path, to_path, extra)
1970
2015
class BzrRemoveChangedFilesError(BzrError):
1971
2016
"""Used when user is trying to remove changed files."""
1975
2020
"Use --keep to not delete them, or --force to delete them regardless.")
1977
2022
def __init__(self, tree_delta):
2023
symbol_versioning.warn(symbol_versioning.deprecated_in((2, 3, 0)) %
2024
"BzrRemoveChangedFilesError", DeprecationWarning, stacklevel=2)
1978
2025
BzrError.__init__(self)
1979
2026
self.changes_as_text = tree_delta.get_changes_as_text()
1980
2027
#self.paths_as_string = '\n'.join(changed_files)
1989
2036
class BzrBadParameterMissing(BzrBadParameter):
1991
_fmt = "Parameter $(param)s is required but not present."
2038
_fmt = "Parameter %(param)s is required but not present."
1994
2041
class BzrBadParameterUnicode(BzrBadParameter):
2835
2882
more = ' ' + more
2836
2883
import bzrlib.urlutils as urlutils
2837
display_url = urlutils.unescape_for_display(
2838
tree.user_url, 'ascii')
2884
user_url = getattr(tree, "user_url", None)
2885
if user_url is None:
2886
display_url = str(tree)
2888
display_url = urlutils.unescape_for_display(user_url, 'ascii')
2839
2889
BzrError.__init__(self, tree=tree, display_url=display_url, more=more)
2892
class ShelvedChanges(UncommittedChanges):
2894
_fmt = ('Working tree "%(display_url)s" has shelved changes'
2895
' (See bzr shelve --list).%(more)s')
2842
2898
class MissingTemplateVariable(BzrError):
2844
2900
_fmt = 'Variable {%(name)s} is not available.'
2913
2969
self.user_encoding = osutils.get_user_encoding()
2972
class NoSuchConfig(BzrError):
2974
_fmt = ('The "%(config_id)s" configuration does not exist.')
2976
def __init__(self, config_id):
2977
BzrError.__init__(self, config_id=config_id)
2980
class NoSuchConfigOption(BzrError):
2982
_fmt = ('The "%(option_name)s" configuration option does not exist.')
2984
def __init__(self, option_name):
2985
BzrError.__init__(self, option_name=option_name)
2916
2988
class NoSuchAlias(BzrError):
2918
2990
_fmt = ('The alias "%(alias_name)s" does not exist.')
3134
3206
def __init__(self, bzrdir):
3135
3207
self.bzrdir = bzrdir
3210
class NoWhoami(BzrError):
3212
_fmt = ('Unable to determine your name.\n'
3213
"Please, set your name with the 'whoami' command.\n"
3214
'E.g. bzr whoami "Your Name <name@example.com>"')
3217
class InvalidPattern(BzrError):
3219
_fmt = ('Invalid pattern(s) found. %(msg)s')
3221
def __init__(self, msg):
3225
class RecursiveBind(BzrError):
3227
_fmt = ('Branch "%(branch_url)s" appears to be bound to itself. '
3228
'Please use `bzr unbind` to fix.')
3230
def __init__(self, branch_url):
3231
self.branch_url = branch_url
3234
# FIXME: I would prefer to define the config related exception classes in
3235
# config.py but the lazy import mechanism proscribes this -- vila 20101222
3236
class OptionExpansionLoop(BzrError):
3238
_fmt = 'Loop involving %(refs)r while expanding "%(string)s".'
3240
def __init__(self, string, refs):
3241
self.string = string
3242
self.refs = '->'.join(refs)
3245
class ExpandingUnknownOption(BzrError):
3247
_fmt = 'Option %(name)s is not defined while expanding "%(string)s".'
3249
def __init__(self, name, string):
3251
self.string = string
3254
class NoCompatibleInter(BzrError):
3256
_fmt = ('No compatible object available for operations from %(source)r '
3259
def __init__(self, source, target):
3260
self.source = source
3261
self.target = target