view setup_bdiff_cffi.py @ 30188:8a864844d5a0

checkcopies: add a sanity check against false-positive copies When grafting a copy backwards through a rename, a copy is wrongly detected, which causes the graft to be applied inappropriately, in a destructive way. Make sure that the old file name really exists in the common ancestor, and bail out if it doesn't. This fixes the aggravated case of bug 5343, although the basic issue (failure to duplicate the copy information) still occurs.
author Gábor Stefanik <gabor.stefanik@nng.com>
date Wed, 12 Oct 2016 21:33:45 +0200
parents a8933d992a71
children
line wrap: on
line source

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()