Mercurial > public > mercurial-scm > hg-stable
diff mercurial/pure/mpatch.py @ 32545:0e8b0b9a7acc
cffi: split modules from pure
The copyright lines are updated per change history.
cffi/osutil.py isn't tested since I have no access to OS X machine right now,
sorry.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Tue, 02 May 2017 21:15:31 +0900 |
parents | 2dcb3d52ef41 |
children | 5326e4ef1dab |
line wrap: on
line diff
--- 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