##// END OF EJS Templates
typing: add type hints to the `opener` attributes and arguments of revlog...
typing: add type hints to the `opener` attributes and arguments of revlog When making revlog and filelog classes visible to pytype, it got confused quite a bit in `mercurial/revlogutils/rewrite.py`, thinking it had a plain `Callable`, and flagging additional methods on it like `join()` and `rename()`. I couldn't figure out how it reduced to that (and PyCharm flagged `opener` references as `Any`), but this makes it happy. So make this change before making the classes visible. The vfs class hierarchy is a bit wonky (e.g. `filteredvfs` is not a `vfs`), so this may need to be revisited with a Protocol class that covers all of the `vfs` classes. But for now, everything works.

File last commit:

r50744:de9ffb82 default
r52713:71fb6e0a default
Show More
gitutil.py
48 lines | 988 B | text/x-python | PythonLexer
"""utilities to assist in working with pygit2"""
from mercurial.node import bin, sha1nodeconstants
pygit2_module = None
def get_pygit2():
global pygit2_module
if pygit2_module is None:
try:
import pygit2 as pygit2_module # pytype: disable=import-error
pygit2_module.InvalidSpecError
except (ImportError, AttributeError):
pass
return pygit2_module
def pygit2_version():
mod = get_pygit2()
v = "N/A"
if mod:
try:
v = mod.__version__
except AttributeError:
pass
return b"(pygit2 %s)" % v.encode("utf-8")
def togitnode(n):
"""Wrapper to convert a Mercurial binary node to a unicode hexlified node.
pygit2 and sqlite both need nodes as strings, not bytes.
"""
assert len(n) == 20
return n.hex()
def fromgitnode(n):
"""Opposite of togitnode."""
assert len(n) == 40
return bin(n)
nullgit = togitnode(sha1nodeconstants.nullid)