mercurial/error.py
changeset 48284 9de0823705b4
parent 47304 73f52278a158
child 48363 6a454e7053a1
equal deleted inserted replaced
48283:ebac18733142 48284:9de0823705b4
    29         Union,
    29         Union,
    30     )
    30     )
    31 
    31 
    32 
    32 
    33 def _tobytes(exc):
    33 def _tobytes(exc):
       
    34     # type: (...) -> bytes
    34     """Byte-stringify exception in the same way as BaseException_str()"""
    35     """Byte-stringify exception in the same way as BaseException_str()"""
    35     if not exc.args:
    36     if not exc.args:
    36         return b''
    37         return b''
    37     if len(exc.args) == 1:
    38     if len(exc.args) == 1:
    38         return pycompat.bytestr(exc.args[0])
    39         return pycompat.bytestr(exc.args[0])
    45     This should come first in the inheritance list to consume a hint and
    46     This should come first in the inheritance list to consume a hint and
    46     pass remaining arguments to the exception class.
    47     pass remaining arguments to the exception class.
    47     """
    48     """
    48 
    49 
    49     def __init__(self, *args, **kw):
    50     def __init__(self, *args, **kw):
    50         self.hint = kw.pop('hint', None)
    51         self.hint = kw.pop('hint', None)  # type: Optional[bytes]
    51         super(Hint, self).__init__(*args, **kw)
    52         super(Hint, self).__init__(*args, **kw)
    52 
    53 
    53 
    54 
    54 class Error(Hint, Exception):
    55 class Error(Hint, Exception):
    55     """Base class for Mercurial errors."""
    56     """Base class for Mercurial errors."""
    69         return self.message
    70         return self.message
    70 
    71 
    71     if pycompat.ispy3:
    72     if pycompat.ispy3:
    72 
    73 
    73         def __str__(self):
    74         def __str__(self):
       
    75             # type: () -> str
    74             # the output would be unreadable if the message was translated,
    76             # the output would be unreadable if the message was translated,
    75             # but do not replace it with encoding.strfromlocal(), which
    77             # but do not replace it with encoding.strfromlocal(), which
    76             # may raise another exception.
    78             # may raise another exception.
    77             return pycompat.sysstr(self.__bytes__())
    79             return pycompat.sysstr(self.__bytes__())
    78 
    80 
   103     pass
   105     pass
   104 
   106 
   105 
   107 
   106 class SidedataHashError(RevlogError):
   108 class SidedataHashError(RevlogError):
   107     def __init__(self, key, expected, got):
   109     def __init__(self, key, expected, got):
       
   110         # type: (int, bytes, bytes) -> None
   108         self.hint = None
   111         self.hint = None
   109         self.sidedatakey = key
   112         self.sidedatakey = key
   110         self.expecteddigest = expected
   113         self.expecteddigest = expected
   111         self.actualdigest = got
   114         self.actualdigest = got
   112 
   115 
   115     __bytes__ = _tobytes
   118     __bytes__ = _tobytes
   116 
   119 
   117 
   120 
   118 class LookupError(RevlogError, KeyError):
   121 class LookupError(RevlogError, KeyError):
   119     def __init__(self, name, index, message):
   122     def __init__(self, name, index, message):
       
   123         # type: (bytes, bytes, bytes) -> None
   120         self.name = name
   124         self.name = name
   121         self.index = index
   125         self.index = index
   122         # this can't be called 'message' because at least some installs of
   126         # this can't be called 'message' because at least some installs of
   123         # Python 2.6+ complain about the 'message' property being deprecated
   127         # Python 2.6+ complain about the 'message' property being deprecated
   124         self.lookupmessage = message
   128         self.lookupmessage = message
   341 
   345 
   342 class OutOfBandError(RemoteError):
   346 class OutOfBandError(RemoteError):
   343     """Exception raised when a remote repo reports failure"""
   347     """Exception raised when a remote repo reports failure"""
   344 
   348 
   345     def __init__(self, message=None, hint=None):
   349     def __init__(self, message=None, hint=None):
       
   350         # type: (Optional[bytes], Optional[bytes]) -> None
   346         from .i18n import _
   351         from .i18n import _
   347 
   352 
   348         if message:
   353         if message:
   349             # Abort.format() adds a trailing newline
   354             # Abort.format() adds a trailing newline
   350             message = _(b"remote error:\n%s") % message.rstrip(b'\n')
   355             message = _(b"remote error:\n%s") % message.rstrip(b'\n')