setup_mpatch_cffi.py
author Durham Goode <durham@fb.com>
Mon, 12 Sep 2016 10:55:43 -0700
changeset 29926 be16091ac14d
parent 29871 90af59b40d8a
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.
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()