view hgext/git/gitutil.py @ 47776:036b9b3cc79a stable

run-tests: use a small timeout for chg instance There is case where the test runner fails to clean up the temporary files in that case, spawned chg instance can stay around for 1 hours. Getting them to shut down sooner cannot hurt. (We should also use a more robust approach for this cleanup) Differential Revision: https://phab.mercurial-scm.org/D11227
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Wed, 28 Jul 2021 13:18:13 +0200
parents d55b71393907
children 6000f5b25c9b
line wrap: on
line source

"""utilities to assist in working with pygit2"""
from __future__ import absolute_import

from mercurial.node import bin, hex, sha1nodeconstants

from mercurial import pycompat

pygit2_module = None


def get_pygit2():
    global pygit2_module
    if pygit2_module is None:
        try:
            import pygit2 as pygit2_module

            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 pycompat.sysstr(hex(n))


def fromgitnode(n):
    """Opposite of togitnode."""
    assert len(n) == 40
    if pycompat.ispy3:
        return bin(n.encode('ascii'))
    return bin(n)


nullgit = togitnode(sha1nodeconstants.nullid)