setup_mpatch_cffi.py
author Durham Goode <durham@fb.com>
Mon, 29 Aug 2016 18:02:09 -0700
changeset 29908 bb3281b3fcaa
parent 29871 90af59b40d8a
permissions -rw-r--r--
manifest: make uses of _mancache aware of contexts In a future patch we will change manifestctx and treemanifestctx to no longer derive from manifestdict and treemanifest, respectively. This means that consumers of the _mancache will now need to be aware of the different between the two, until we get rid of the manifest entirely and the _mancache becomes only filled with ctxs.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
29871
90af59b40d8a mpatch: add setup_mpatch_cffi.py
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
     1
from __future__ import absolute_import
90af59b40d8a mpatch: add setup_mpatch_cffi.py
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
     2
90af59b40d8a mpatch: add setup_mpatch_cffi.py
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
     3
import cffi
90af59b40d8a mpatch: add setup_mpatch_cffi.py
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
     4
import os
90af59b40d8a mpatch: add setup_mpatch_cffi.py
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
     5
90af59b40d8a mpatch: add setup_mpatch_cffi.py
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
     6
ffi = cffi.FFI()
90af59b40d8a mpatch: add setup_mpatch_cffi.py
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
     7
mpatch_c = os.path.join(os.path.join(os.path.dirname(__file__), 'mercurial',
90af59b40d8a mpatch: add setup_mpatch_cffi.py
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
     8
                                     'mpatch.c'))
90af59b40d8a mpatch: add setup_mpatch_cffi.py
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
     9
ffi.set_source("_mpatch_cffi", open(mpatch_c).read(),
90af59b40d8a mpatch: add setup_mpatch_cffi.py
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
    10
               include_dirs=["mercurial"])
90af59b40d8a mpatch: add setup_mpatch_cffi.py
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
    11
ffi.cdef("""
90af59b40d8a mpatch: add setup_mpatch_cffi.py
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
    12
90af59b40d8a mpatch: add setup_mpatch_cffi.py
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
    13
struct mpatch_frag {
90af59b40d8a mpatch: add setup_mpatch_cffi.py
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
    14
       int start, end, len;
90af59b40d8a mpatch: add setup_mpatch_cffi.py
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
    15
       const char *data;
90af59b40d8a mpatch: add setup_mpatch_cffi.py
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
    16
};
90af59b40d8a mpatch: add setup_mpatch_cffi.py
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
    17
90af59b40d8a mpatch: add setup_mpatch_cffi.py
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
    18
struct mpatch_flist {
90af59b40d8a mpatch: add setup_mpatch_cffi.py
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
    19
       struct mpatch_frag *base, *head, *tail;
90af59b40d8a mpatch: add setup_mpatch_cffi.py
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
    20
};
90af59b40d8a mpatch: add setup_mpatch_cffi.py
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
    21
90af59b40d8a mpatch: add setup_mpatch_cffi.py
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
    22
extern "Python" struct mpatch_flist* cffi_get_next_item(void*, ssize_t);
90af59b40d8a mpatch: add setup_mpatch_cffi.py
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
    23
90af59b40d8a mpatch: add setup_mpatch_cffi.py
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
    24
int mpatch_decode(const char *bin, ssize_t len, struct mpatch_flist** res);
90af59b40d8a mpatch: add setup_mpatch_cffi.py
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
    25
ssize_t mpatch_calcsize(size_t len, struct mpatch_flist *l);
90af59b40d8a mpatch: add setup_mpatch_cffi.py
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
    26
void mpatch_lfree(struct mpatch_flist *a);
90af59b40d8a mpatch: add setup_mpatch_cffi.py
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
    27
static int mpatch_apply(char *buf, const char *orig, size_t len,
90af59b40d8a mpatch: add setup_mpatch_cffi.py
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
    28
                        struct mpatch_flist *l);
90af59b40d8a mpatch: add setup_mpatch_cffi.py
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
    29
struct mpatch_flist *mpatch_fold(void *bins,
90af59b40d8a mpatch: add setup_mpatch_cffi.py
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
    30
                       struct mpatch_flist* (*get_next_item)(void*, ssize_t),
90af59b40d8a mpatch: add setup_mpatch_cffi.py
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
    31
                       ssize_t start, ssize_t end);
90af59b40d8a mpatch: add setup_mpatch_cffi.py
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
    32
""")
90af59b40d8a mpatch: add setup_mpatch_cffi.py
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
    33
90af59b40d8a mpatch: add setup_mpatch_cffi.py
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
    34
if __name__ == '__main__':
90af59b40d8a mpatch: add setup_mpatch_cffi.py
Maciej Fijalkowski <fijall@gmail.com>
parents:
diff changeset
    35
    ffi.compile()