setup_bdiff_cffi.py
author Durham Goode <durham@fb.com>
Mon, 12 Sep 2016 10:55:43 -0700
changeset 29926 be16091ac14d
parent 29833 a8933d992a71
permissions -rw-r--r--
manifest: change manifestctx to not inherit from manifestdict If manifestctx inherits from manifestdict, it requires some weird logic to lazily load the dict if a piece of information is asked for. This ended up being complicated and unintuitive to use. Let's move the dict creation to .read(). This will make even more sense once we start adding readdelta() and other similar methods to manifestctx.

from __future__ import absolute_import

import cffi
import os

ffi = cffi.FFI()
ffi.set_source("_bdiff_cffi",
    open(os.path.join(os.path.join(os.path.dirname(__file__), 'mercurial'),
        'bdiff.c')).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()