diff -r 2e431fb98c6b -r 0e8b0b9a7acc mercurial/pure/mpatch.py --- a/mercurial/pure/mpatch.py Sun May 28 15:45:52 2017 +0900 +++ b/mercurial/pure/mpatch.py Tue May 02 21:15:31 2017 +0900 @@ -9,10 +9,8 @@ import struct -from .. import policy, pycompat +from .. import pycompat stringio = pycompat.stringio -modulepolicy = policy.policy -policynocffi = policy.policynocffi class mpatchError(Exception): """error raised when a delta cannot be decoded @@ -127,43 +125,3 @@ outlen += orig - last return outlen - -if modulepolicy not in policynocffi: - try: - from ..cffi._mpatch import ffi, lib - except ImportError: - if modulepolicy == 'cffi': # strict cffi import - raise - else: - @ffi.def_extern() - def cffi_get_next_item(arg, pos): - all, bins = ffi.from_handle(arg) - container = ffi.new("struct mpatch_flist*[1]") - to_pass = ffi.new("char[]", str(bins[pos])) - all.append(to_pass) - r = lib.mpatch_decode(to_pass, len(to_pass) - 1, container) - if r < 0: - return ffi.NULL - return container[0] - - def patches(text, bins): - lgt = len(bins) - all = [] - if not lgt: - return text - arg = (all, bins) - patch = lib.mpatch_fold(ffi.new_handle(arg), - lib.cffi_get_next_item, 0, lgt) - if not patch: - raise mpatchError("cannot decode chunk") - outlen = lib.mpatch_calcsize(len(text), patch) - if outlen < 0: - lib.mpatch_lfree(patch) - raise mpatchError("inconsistency detected") - buf = ffi.new("char[]", outlen) - if lib.mpatch_apply(buf, text, len(text), patch) < 0: - lib.mpatch_lfree(patch) - raise mpatchError("error applying patches") - res = ffi.buffer(buf, outlen)[:] - lib.mpatch_lfree(patch) - return res