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'
1685
1723
class InvalidHttpResponse(TransportError):
1687
_fmt = "Invalid http response for %(path)s: %(msg)s"
1725
_fmt = "Invalid http response for %(path)s: %(msg)s%(orig_error)s"
1689
1727
def __init__(self, path, msg, orig_error=None):
1690
1728
self.path = path
1729
if orig_error is None:
1732
# This is reached for obscure and unusual errors so we want to
1733
# preserve as much info as possible to ease debug.
1734
orig_error = ': %r' % (orig_error,)
1691
1735
TransportError.__init__(self, msg, orig_error=orig_error)
1700
1744
InvalidHttpResponse.__init__(self, path, msg)
1747
class HttpBoundaryMissing(InvalidHttpResponse):
1748
"""A multipart response ends with no boundary marker.
1750
This is a special case caused by buggy proxies, described in
1751
<https://bugs.launchpad.net/bzr/+bug/198646>.
1754
_fmt = "HTTP MIME Boundary missing for %(path)s: %(msg)s"
1756
def __init__(self, path, msg):
1757
InvalidHttpResponse.__init__(self, path, msg)
1703
1760
class InvalidHttpContentType(InvalidHttpResponse):
1705
1762
_fmt = 'Invalid http Content-type "%(ctype)s" for %(path)s: %(msg)s'
1733
1790
_fmt = "Working tree has conflicts."
1793
class ConfigContentError(BzrError):
1795
_fmt = "Config file %(filename)s is not UTF-8 encoded\n"
1797
def __init__(self, filename):
1798
BzrError.__init__(self)
1799
self.filename = filename
1736
1802
class ParseConfigError(BzrError):
1804
_fmt = "Error(s) parsing config file %(filename)s:\n%(errors)s"
1738
1806
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)
1807
BzrError.__init__(self)
1808
self.filename = filename
1809
self.errors = '\n'.join(e.msg for e in errors)
1812
class ConfigOptionValueError(BzrError):
1814
_fmt = """Bad value "%(value)s" for option "%(name)s"."""
1816
def __init__(self, name, value):
1817
BzrError.__init__(self, name=name, value=value)
1746
1820
class NoEmailInUsername(BzrError):
1755
1829
class SigningFailed(BzrError):
1757
_fmt = 'Failed to gpg sign data with command "%(command_line)s"'
1831
_fmt = 'Failed to GPG sign data with command "%(command_line)s"'
1759
1833
def __init__(self, command_line):
1760
1834
BzrError.__init__(self, command_line=command_line)
1837
class SignatureVerificationFailed(BzrError):
1839
_fmt = 'Failed to verify GPG signature data with error "%(error)s"'
1841
def __init__(self, error):
1842
BzrError.__init__(self, error=error)
1845
class DependencyNotPresent(BzrError):
1847
_fmt = 'Unable to import library "%(library)s": %(error)s'
1849
def __init__(self, library, error):
1850
BzrError.__init__(self, library=library, error=error)
1853
class GpgmeNotInstalled(DependencyNotPresent):
1855
_fmt = 'python-gpgme is not installed, it is needed to verify signatures'
1857
def __init__(self, error):
1858
DependencyNotPresent.__init__(self, 'gpgme', error)
1763
1861
class WorkingTreeNotRevision(BzrError):
1765
1863
_fmt = ("The working tree for %(basedir)s has changed since"
1925
2023
_fmt = "Moving the root directory is not supported at this time"
2026
class TransformRenameFailed(BzrError):
2028
_fmt = "Failed to rename %(from_path)s to %(to_path)s: %(why)s"
2030
def __init__(self, from_path, to_path, why, errno):
2031
self.from_path = from_path
2032
self.to_path = to_path
1928
2037
class BzrMoveFailedError(BzrError):
1930
_fmt = "Could not move %(from_path)s%(operator)s %(to_path)s%(extra)s"
2039
_fmt = ("Could not move %(from_path)s%(operator)s %(to_path)s"
2040
"%(_has_extra)s%(extra)s")
1932
2042
def __init__(self, from_path='', to_path='', extra=None):
1933
2043
from bzrlib.osutils import splitpath
1934
2044
BzrError.__init__(self)
1936
self.extra = ': ' + str(extra)
2046
self.extra, self._has_extra = extra, ': '
2048
self.extra = self._has_extra = ''
1940
2050
has_from = len(from_path) > 0
1941
2051
has_to = len(to_path) > 0
1963
2073
class BzrRenameFailedError(BzrMoveFailedError):
1965
_fmt = "Could not rename %(from_path)s%(operator)s %(to_path)s%(extra)s"
2075
_fmt = ("Could not rename %(from_path)s%(operator)s %(to_path)s"
2076
"%(_has_extra)s%(extra)s")
1967
2078
def __init__(self, from_path, to_path, extra=None):
1968
2079
BzrMoveFailedError.__init__(self, from_path, to_path, extra)
1970
2082
class BzrRemoveChangedFilesError(BzrError):
1971
2083
"""Used when user is trying to remove changed files."""
2619
2733
This is distinct from ErrorFromSmartServer so that it is possible to
2620
2734
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.
2736
- ErrorFromSmartServer was uncaught. This is logic error in the client
2737
and so should provoke a traceback to the user.
2738
- ErrorFromSmartServer was caught but its error_tuple could not be
2739
translated. This is probably because the server sent us garbage, and
2740
should not provoke a traceback.
2628
2743
_fmt = "Server sent an unexpected error: %(error_tuple)r"
2835
2950
more = ' ' + more
2836
2951
import bzrlib.urlutils as urlutils
2837
display_url = urlutils.unescape_for_display(
2838
tree.user_url, 'ascii')
2952
user_url = getattr(tree, "user_url", None)
2953
if user_url is None:
2954
display_url = str(tree)
2956
display_url = urlutils.unescape_for_display(user_url, 'ascii')
2839
2957
BzrError.__init__(self, tree=tree, display_url=display_url, more=more)
2960
class ShelvedChanges(UncommittedChanges):
2962
_fmt = ('Working tree "%(display_url)s" has shelved changes'
2963
' (See bzr shelve --list).%(more)s')
2842
2966
class MissingTemplateVariable(BzrError):
2844
2968
_fmt = 'Variable {%(name)s} is not available.'
2913
3037
self.user_encoding = osutils.get_user_encoding()
3040
class NoSuchConfig(BzrError):
3042
_fmt = ('The "%(config_id)s" configuration does not exist.')
3044
def __init__(self, config_id):
3045
BzrError.__init__(self, config_id=config_id)
3048
class NoSuchConfigOption(BzrError):
3050
_fmt = ('The "%(option_name)s" configuration option does not exist.')
3052
def __init__(self, option_name):
3053
BzrError.__init__(self, option_name=option_name)
2916
3056
class NoSuchAlias(BzrError):
2918
3058
_fmt = ('The alias "%(alias_name)s" does not exist.')
3134
3286
def __init__(self, bzrdir):
3135
3287
self.bzrdir = bzrdir
3290
class NoWhoami(BzrError):
3292
_fmt = ('Unable to determine your name.\n'
3293
"Please, set your name with the 'whoami' command.\n"
3294
'E.g. bzr whoami "Your Name <name@example.com>"')
3297
class InvalidPattern(BzrError):
3299
_fmt = ('Invalid pattern(s) found. %(msg)s')
3301
def __init__(self, msg):
3305
class RecursiveBind(BzrError):
3307
_fmt = ('Branch "%(branch_url)s" appears to be bound to itself. '
3308
'Please use `bzr unbind` to fix.')
3310
def __init__(self, branch_url):
3311
self.branch_url = branch_url
3314
# FIXME: I would prefer to define the config related exception classes in
3315
# config.py but the lazy import mechanism proscribes this -- vila 20101222
3316
class OptionExpansionLoop(BzrError):
3318
_fmt = 'Loop involving %(refs)r while expanding "%(string)s".'
3320
def __init__(self, string, refs):
3321
self.string = string
3322
self.refs = '->'.join(refs)
3325
class ExpandingUnknownOption(BzrError):
3327
_fmt = 'Option %(name)s is not defined while expanding "%(string)s".'
3329
def __init__(self, name, string):
3331
self.string = string
3334
class NoCompatibleInter(BzrError):
3336
_fmt = ('No compatible object available for operations from %(source)r '
3339
def __init__(self, source, target):
3340
self.source = source
3341
self.target = target
3344
class HpssVfsRequestNotAllowed(BzrError):
3346
_fmt = ("VFS requests over the smart server are not allowed. Encountered: "
3347
"%(method)s, %(arguments)s.")
3349
def __init__(self, method, arguments):
3350
self.method = method
3351
self.arguments = arguments
3354
class UnsupportedKindChange(BzrError):
3356
_fmt = ("Kind change from %(from_kind)s to %(to_kind)s for "
3357
"%(path)s not supported by format %(format)r")
3359
def __init__(self, path, from_kind, to_kind, format):
3361
self.from_kind = from_kind
3362
self.to_kind = to_kind
3363
self.format = format
3366
class PatchSyntax(BzrError):
3367
"""Base class for patch syntax errors."""
3370
class BinaryFiles(BzrError):
3372
_fmt = 'Binary files section encountered.'
3374
def __init__(self, orig_name, mod_name):
3375
self.orig_name = orig_name
3376
self.mod_name = mod_name
3379
class MalformedPatchHeader(PatchSyntax):
3381
_fmt = "Malformed patch header. %(desc)s\n%(line)r"
3383
def __init__(self, desc, line):
3388
class MalformedHunkHeader(PatchSyntax):
3390
_fmt = "Malformed hunk header. %(desc)s\n%(line)r"
3392
def __init__(self, desc, line):
3397
class MalformedLine(PatchSyntax):
3399
_fmt = "Malformed line. %(desc)s\n%(line)r"
3401
def __init__(self, desc, line):
3406
class PatchConflict(BzrError):
3408
_fmt = ('Text contents mismatch at line %(line_no)d. Original has '
3409
'"%(orig_line)s", but patch says it should be "%(patch_line)s"')
3411
def __init__(self, line_no, orig_line, patch_line):
3412
self.line_no = line_no
3413
self.orig_line = orig_line.rstrip('\n')
3414
self.patch_line = patch_line.rstrip('\n')