--- a/mercurial/error.py Wed Dec 20 20:13:22 2023 +0100
+++ b/mercurial/error.py Tue Dec 19 21:29:34 2023 +0100
@@ -40,8 +40,7 @@
]
-def _tobytes(exc):
- # type: (...) -> bytes
+def _tobytes(exc) -> bytes:
"""Byte-stringify exception in the same way as BaseException_str()"""
if not exc.args:
return b''
@@ -68,8 +67,7 @@
coarse_exit_code = None
detailed_exit_code = None
- def __init__(self, message, hint=None):
- # type: (bytes, Optional[bytes]) -> None
+ def __init__(self, message: bytes, hint: Optional[bytes] = None) -> None:
self.message = message
self.hint = hint
# Pass the message into the Exception constructor to help extensions
@@ -79,15 +77,13 @@
def __bytes__(self):
return self.message
- def __str__(self):
- # type: () -> str
+ def __str__(self) -> str:
# the output would be unreadable if the message was translated,
# but do not replace it with encoding.strfromlocal(), which
# may raise another exception.
return pycompat.sysstr(self.__bytes__())
- def format(self):
- # type: () -> bytes
+ def format(self) -> bytes:
from .i18n import _
message = _(b"abort: %s\n") % self.message
@@ -114,8 +110,7 @@
class SidedataHashError(RevlogError):
- def __init__(self, key, expected, got):
- # type: (int, bytes, bytes) -> None
+ def __init__(self, key: int, expected: bytes, got: bytes) -> None:
self.hint = None
self.sidedatakey = key
self.expecteddigest = expected
@@ -127,8 +122,7 @@
class LookupError(RevlogError, KeyError):
- def __init__(self, name, index, message):
- # type: (bytes, bytes, bytes) -> None
+ def __init__(self, name: bytes, index: bytes, message: bytes) -> None:
self.name = name
self.index = index
# this can't be called 'message' because at least some installs of
@@ -165,8 +159,7 @@
class CommandError(Exception):
"""Exception raised on errors in parsing the command line."""
- def __init__(self, command, message):
- # type: (Optional[bytes], bytes) -> None
+ def __init__(self, command: Optional[bytes], message: bytes) -> None:
self.command = command
self.message = message
super(CommandError, self).__init__()
@@ -177,8 +170,11 @@
class UnknownCommand(Exception):
"""Exception raised if command is not in the command table."""
- def __init__(self, command, all_commands=None):
- # type: (bytes, Optional[List[bytes]]) -> None
+ def __init__(
+ self,
+ command: bytes,
+ all_commands: Optional[List[bytes]] = None,
+ ) -> None:
self.command = command
self.all_commands = all_commands
super(UnknownCommand, self).__init__()
@@ -189,8 +185,7 @@
class AmbiguousCommand(Exception):
"""Exception raised if command shortcut matches more than one command."""
- def __init__(self, prefix, matches):
- # type: (bytes, List[bytes]) -> None
+ def __init__(self, prefix: bytes, matches: List[bytes]) -> None:
self.prefix = prefix
self.matches = matches
super(AmbiguousCommand, self).__init__()
@@ -201,8 +196,7 @@
class WorkerError(Exception):
"""Exception raised when a worker process dies."""
- def __init__(self, status_code):
- # type: (int) -> None
+ def __init__(self, status_code: int) -> None:
self.status_code = status_code
# Pass status code to superclass just so it becomes part of __bytes__
super(WorkerError, self).__init__(status_code)
@@ -216,8 +210,7 @@
coarse_exit_code = 1
detailed_exit_code = 240
- def format(self):
- # type: () -> bytes
+ def format(self) -> bytes:
from .i18n import _
message = _(b"%s\n") % self.message
@@ -229,8 +222,7 @@
class ConflictResolutionRequired(InterventionRequired):
"""Exception raised when a continuable command required merge conflict resolution."""
- def __init__(self, opname):
- # type: (bytes) -> None
+ def __init__(self, opname: bytes) -> None:
from .i18n import _
self.opname = opname
@@ -299,13 +291,16 @@
detailed_exit_code = 30
- def __init__(self, message, location=None, hint=None):
- # type: (bytes, Optional[bytes], Optional[bytes]) -> None
+ def __init__(
+ self,
+ message: bytes,
+ location: Optional[bytes] = None,
+ hint: Optional[bytes] = None,
+ ) -> None:
super(ConfigError, self).__init__(message, hint=hint)
self.location = location
- def format(self):
- # type: () -> bytes
+ def format(self) -> bytes:
from .i18n import _
if self.location is not None:
@@ -354,8 +349,11 @@
class OutOfBandError(RemoteError):
"""Exception raised when a remote repo reports failure"""
- def __init__(self, message=None, hint=None):
- # type: (Optional[bytes], Optional[bytes]) -> None
+ def __init__(
+ self,
+ message: Optional[bytes] = None,
+ hint: Optional[bytes] = None,
+ ):
from .i18n import _
if message:
@@ -371,13 +369,16 @@
detailed_exit_code = 10
- def __init__(self, message, location=None, hint=None):
- # type: (bytes, Optional[Union[bytes, int]], Optional[bytes]) -> None
+ def __init__(
+ self,
+ message: bytes,
+ location: Optional[Union[bytes, int]] = None,
+ hint: Optional[bytes] = None,
+ ):
super(ParseError, self).__init__(message, hint=hint)
self.location = location
- def format(self):
- # type: () -> bytes
+ def format(self) -> bytes:
from .i18n import _
if self.location is not None:
@@ -404,16 +405,14 @@
__bytes__ = _tobytes
-def getsimilar(symbols, value):
- # type: (Iterable[bytes], bytes) -> List[bytes]
+def getsimilar(symbols: Iterable[bytes], value: bytes) -> List[bytes]:
sim = lambda x: difflib.SequenceMatcher(None, value, x).ratio()
# The cutoff for similarity here is pretty arbitrary. It should
# probably be investigated and tweaked.
return [s for s in symbols if sim(s) > 0.6]
-def similarity_hint(similar):
- # type: (List[bytes]) -> Optional[bytes]
+def similarity_hint(similar: List[bytes]) -> Optional[bytes]:
from .i18n import _
if len(similar) == 1:
@@ -428,8 +427,7 @@
class UnknownIdentifier(ParseError):
"""Exception raised when a {rev,file}set references an unknown identifier"""
- def __init__(self, function, symbols):
- # type: (bytes, Iterable[bytes]) -> None
+ def __init__(self, function: bytes, symbols: Iterable[bytes]) -> None:
from .i18n import _
similar = getsimilar(symbols, function)
@@ -463,16 +461,14 @@
class StdioError(IOError):
"""Raised if I/O to stdout or stderr fails"""
- def __init__(self, err):
- # type: (IOError) -> None
+ def __init__(self, err: IOError) -> None:
IOError.__init__(self, err.errno, err.strerror)
# no __bytes__() because error message is derived from the standard IOError
class UnsupportedMergeRecords(Abort):
- def __init__(self, recordtypes):
- # type: (Iterable[bytes]) -> None
+ def __init__(self, recordtypes: Iterable[bytes]) -> None:
from .i18n import _
self.recordtypes = sorted(recordtypes)
@@ -490,15 +486,24 @@
class UnknownVersion(Abort):
"""generic exception for aborting from an encounter with an unknown version"""
- def __init__(self, msg, hint=None, version=None):
- # type: (bytes, Optional[bytes], Optional[bytes]) -> None
+ def __init__(
+ self,
+ msg: bytes,
+ hint: Optional[bytes] = None,
+ version: Optional[bytes] = None,
+ ) -> None:
self.version = version
super(UnknownVersion, self).__init__(msg, hint=hint)
class LockError(IOError):
- def __init__(self, errno, strerror, filename, desc):
- # _type: (int, str, bytes, bytes) -> None
+ def __init__(
+ self,
+ errno: int,
+ strerror: str,
+ filename: bytes,
+ desc: Optional[bytes],
+ ) -> None:
IOError.__init__(self, errno, strerror, filename)
self.desc = desc
@@ -506,8 +511,15 @@
class LockHeld(LockError):
- def __init__(self, errno, filename, desc, locker):
+ def __init__(
+ self,
+ errno: int,
+ filename: bytes,
+ desc: Optional[bytes],
+ locker,
+ ):
LockError.__init__(self, errno, 'Lock held', filename, desc)
+ self.filename: bytes = filename
self.locker = locker
@@ -544,8 +556,7 @@
class ProgrammingError(Hint, RuntimeError):
"""Raised if a mercurial (core or extension) developer made a mistake"""
- def __init__(self, msg, *args, **kwargs):
- # type: (AnyStr, Any, Any) -> None
+ def __init__(self, msg: AnyStr, *args, **kwargs):
# On Python 3, turn the message back into a string since this is
# an internal-only error that won't be printed except in a
# stack traces.
@@ -622,8 +633,7 @@
Also contains the tombstone data substituted for the uncensored data.
"""
- def __init__(self, filename, node, tombstone):
- # type: (bytes, bytes, bytes) -> None
+ def __init__(self, filename: bytes, node: bytes, tombstone: bytes):
from .node import short
StorageError.__init__(self, b'%s:%s' % (filename, short(node)))
@@ -685,7 +695,10 @@
The error is a formatter string and an optional iterable of arguments.
"""
- def __init__(self, message, args=None):
- # type: (bytes, Optional[Sequence[bytes]]) -> None
+ def __init__(
+ self,
+ message: bytes,
+ args: Optional[Sequence[bytes]] = None,
+ ) -> None:
self.message = message
self.messageargs = args