D9281: cext: add .pyi files for C extensions
indygreg (Gregory Szorc)
phabricator at mercurial-scm.org
Sun Nov 8 01:23:30 UTC 2020
indygreg created this revision.
Herald added a reviewer: hg-reviewers.
Herald added a subscriber: mercurial-patches.
REVISION SUMMARY
I'm unsure if all the annotations are completely accurate. But having
these helps type checkers reason about our C extensions.
REPOSITORY
rHG Mercurial
BRANCH
default
REVISION DETAIL
https://phab.mercurial-scm.org/D9281
AFFECTED FILES
mercurial/cext/base85.pyi
mercurial/cext/bdiff.pyi
mercurial/cext/mpatch.pyi
mercurial/cext/osutil.pyi
mercurial/cext/parsers.pyi
CHANGE DETAILS
diff --git a/mercurial/cext/parsers.pyi b/mercurial/cext/parsers.pyi
new file mode 100644
--- /dev/null
+++ b/mercurial/cext/parsers.pyi
@@ -0,0 +1,78 @@
+from typing import (
+ Callable,
+ Dict,
+ Iterator,
+ List,
+ Optional,
+ Set,
+ Tuple,
+ Union,
+)
+
+version: int
+versionerrortext: str
+
+class dirstatetuple:
+ __doc__: str
+
+ def __len__(self) -> int: ...
+ def __getitem__(self, key: int) -> Union[bytes, int]: ...
+
+# From dirs.c
+
+class dirs:
+ __doc__: str
+ def __init__(self, source, skipchar: bytes): ...
+ def __iter__(self) -> Iterator[bytes]: ...
+ def addpath(self, path: bytes) -> None: ...
+ def delpath(self, path: bytes) -> None: ...
+
+# From manifest.c
+class lazymanifest:
+ def __init__(self, data: bytes): ...
+ def __iter__(self) -> Iterator[bytes]: ...
+
+ def __len__(self) -> int: ...
+ def __getitem__(self, item: bytes) -> Optional[Tuple[bytes, bytes]]: ...
+ def __setitem__(self, key: bytes, value: Tuple[bytes, bytes]) -> None: ...
+ def __delitem__(self, key: bytes) -> None: ...
+
+ def iterkeys(self) -> Iterator[bytes]: ...
+ def iterentries(self) -> Iterator[Tuple[bytes, bytes, bytes]]: ...
+ def copy(self) -> lazymanifest: ...
+ def filtercopy(self, matchfn: Callable[[bytes], bool]) -> lazymanifest: ...
+ def diff(self, other: lazymanifest, clean: Optional[bool]) -> Dict[bytes, Tuple[bytes, Tuple]]: ...
+ def text(self) -> bytes: ...
+
+# From revlog.c
+
+class index:
+ __doc__: str
+
+ nodemap: Dict[bytes, int]
+
+ def ancestors(self, *args: int) -> Iterator[int]: ...
+ def commonancestorsheads(self, *args: int) -> List[int]: ...
+ def clearcaches(self) -> None: ...
+ def get(self, value: bytes) -> Optional[int]: ...
+ def get_rev(self, value: bytes) -> Optional[int]: ...
+ def has_node(self, value: Union[int, bytes]) -> bool: ...
+ def rev(self, node: bytes) -> int: ...
+ def computephasesmapsets(self, root: Dict[int, Set[bytes]]) -> Tuple[int, Dict[int, Set[bytes]]]: ...
+ def reachableroots2(self, minroot: int, heads: List[int], roots: List[int], includepath: bool) -> List[int]: ...
+ def headrevs(self, filteredrevs: Optional[List[int]]) -> List[int]: ...
+ def headrevsfiltered(self, filteredrevs: Optional[List[int]]) -> List[int]: ...
+ def issnapshot(self, value: int) -> bool: ...
+ def findsnapshots(self, cache: Dict[int, List[int]], start_rev: int) -> None: ...
+ def deltachain(self, rev: int, stop: int, generaldelta: bool) -> Tuple[List[int], bool]: ...
+ def slicechunktodensity(self, revs: List[int], targetdensity: float, mingapsize: int) -> List[List[int]]: ...
+ def append(self, value: Tuple[int, int, int, int, int, int, int, bytes]) -> None: ...
+ def partialmatch(self, node: bytes) -> bytes: ...
+ def shortest(self, value: bytes) -> int: ...
+ def stats(self) -> Dict[bytes, int]: ...
+
+class nodetree:
+ __doc__: str
+
+ def insert(self, rev: int) -> None: ...
+ def shortest(self, node: bytes) -> int: ...
diff --git a/mercurial/cext/osutil.pyi b/mercurial/cext/osutil.pyi
new file mode 100644
--- /dev/null
+++ b/mercurial/cext/osutil.pyi
@@ -0,0 +1,26 @@
+from typing import (
+ AnyStr,
+ IO,
+ List,
+ Sequence,
+)
+
+version: int
+
+class stat:
+ st_dev: int
+ st_mode: int
+ st_nlink: int
+ st_size: int
+ st_mtime: int
+ st_ctime: int
+
+def listdir(path: bytes, st: stat, skip: bool) -> List[stat]: ...
+def posixfile(name: AnyStr, mode: bytes, buffering: int) -> IO: ...
+def statfiles(names: Sequence[bytes]) -> List[stat]: ...
+def recvfds(sockfd: int) -> List[int]: ...
+def setprocname(name: bytes) -> None: ...
+def getfstype(path: bytes) -> bytes: ...
+def getfsmountpoint(path: bytes) -> bytes: ...
+def unblocksignal(sig: int) -> None: ...
+def isgui() -> bool: ...
diff --git a/mercurial/cext/mpatch.pyi b/mercurial/cext/mpatch.pyi
new file mode 100644
--- /dev/null
+++ b/mercurial/cext/mpatch.pyi
@@ -0,0 +1,10 @@
+from typing import (
+ List,
+)
+
+version: int
+
+class mpatchError(Exception): ...
+
+def patches(text: bytes, bins: List[bytes]) -> bytes: ...
+def patchedsize(orig: int, data: bytes) -> int: ...
diff --git a/mercurial/cext/bdiff.pyi b/mercurial/cext/bdiff.pyi
new file mode 100644
--- /dev/null
+++ b/mercurial/cext/bdiff.pyi
@@ -0,0 +1,12 @@
+from typing import (
+ List,
+ Tuple,
+)
+
+version: int
+
+def bdiff(a: bytes, b: bytes): bytes
+def blocks(a: bytes, b: bytes) -> List[Tuple[int, int, int, int]]: ...
+def fixws(s: bytes, allws: bool) -> bytes: ...
+def splitnewlines(text: bytes) -> List[bytes]: ...
+def xdiffblocks(a: bytes, b: bytes) -> List[Tuple[int, int, int, int]]: ...
diff --git a/mercurial/cext/base85.pyi b/mercurial/cext/base85.pyi
new file mode 100644
--- /dev/null
+++ b/mercurial/cext/base85.pyi
@@ -0,0 +1,6 @@
+from typing import Optional
+
+version: int
+
+def b85encode(text: bytes, pad: Optional[int]) -> bytes: ...
+def b85decode(text: bytes) -> bytes: ...
To: indygreg, #hg-reviewers
Cc: mercurial-patches, mercurial-devel
More information about the Mercurial-devel
mailing list