view mercurial/cffi/bdiffbuild.py @ 47055:553451522113 stable

extensions: ignore exceptions from an extension's `getversion()` method This method is usually called when there's a stacktrace being generated, or with `hg version -v`. Raising another exception risks mangling the bug report info. I hit this issue when trying to add the method to the keyring extension to report the version of the extension and the underlying module, and ran into demandimport issues prior to py3.8. It seems like a wise thing to do anyway, though unfortunately there's no convenient `ui` object around to issue a warning. Use 'unknown' to signal that it tried to report a version and failed, unlike the default case of printing nothing. Differential Revision: https://phab.mercurial-scm.org/D10540
author Matt Harbison <matt_harbison@yahoo.com>
date Fri, 30 Apr 2021 17:36:09 -0400
parents 53607fd3ec6c
children 6000f5b25c9b
line wrap: on
line source

from __future__ import absolute_import

import cffi
import os

ffi = cffi.FFI()
with open(
    os.path.join(os.path.join(os.path.dirname(__file__), '..'), 'bdiff.c')
) as f:
    ffi.set_source(
        "mercurial.cffi._bdiff", f.read(), include_dirs=['mercurial']
    )
ffi.cdef(
    """
struct bdiff_line {
    int hash, n, e;
    ssize_t len;
    const char *l;
};

struct bdiff_hunk;
struct bdiff_hunk {
    int a1, a2, b1, b2;
    struct bdiff_hunk *next;
};

int bdiff_splitlines(const char *a, ssize_t len, struct bdiff_line **lr);
int bdiff_diff(struct bdiff_line *a, int an, struct bdiff_line *b, int bn,
    struct bdiff_hunk *base);
void bdiff_freehunks(struct bdiff_hunk *l);
void free(void*);
"""
)

if __name__ == '__main__':
    ffi.compile()