##// END OF EJS Templates
rust-matchers: improve `Matcher` trait ergonomics...
rust-matchers: improve `Matcher` trait ergonomics `VisitChildrenSet` has no need to own the set, this will save allocations. The `file_set` return type change is motivated by both ergonomics and... being able to compile code. The `AlwaysMatcher` does not store a `file_set`, which requires it to return an owned `HashSet`, which in turn would change our return type to `Cow<&HgPath>` (lifetimes omitted). This is both un-ergonomic and troublesome for more complex lifetime issues (especially with the upcoming `FileMatcher` in the following patch). Differential Revision: https://phab.mercurial-scm.org/D7525

File last commit:

r44085:53607fd3 stable
r44284:1bb4e9b0 default
Show More
bdiffbuild.py
36 lines | 757 B | text/x-python | PythonLexer
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()