##// END OF EJS Templates
scheme: move the drive letter checking in its own function...
scheme: move the drive letter checking in its own function This help the readability of the main function as is was taking much more room than the main logic.

File last commit:

r50494:94a79703 default
r50585:1863584f default
Show More
mpatch.py
50 lines | 1.5 KiB | text/x-python | PythonLexer
Yuya Nishihara
cffi: split modules from pure...
r32512 # mpatch.py - CFFI implementation of mpatch.c
#
# Copyright 2016 Maciej Fijalkowski <fijall@gmail.com>
#
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.
Matt Harbison
typing: add type hints to mpatch implementations...
r50494 from typing import List
Yuya Nishihara
cffi: split modules from pure...
r32512 from ..pure.mpatch import *
from ..pure.mpatch import mpatchError # silence pyflakes
Matt Harbison
typing: disable import error warnings that are already handled...
r47543 from . import _mpatch # pytype: disable=import-error
Yuya Nishihara
cffi: split modules from pure...
r32512
ffi = _mpatch.ffi
lib = _mpatch.lib
Augie Fackler
formatting: blacken the codebase...
r43346
Yuya Nishihara
cffi: remove superfluous "if True" blocks
r32513 @ffi.def_extern()
def cffi_get_next_item(arg, pos):
all, bins = ffi.from_handle(arg)
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 container = ffi.new(b"struct mpatch_flist*[1]")
to_pass = ffi.new(b"char[]", str(bins[pos]))
Yuya Nishihara
cffi: remove superfluous "if True" blocks
r32513 all.append(to_pass)
r = lib.mpatch_decode(to_pass, len(to_pass) - 1, container)
if r < 0:
return ffi.NULL
return container[0]
Yuya Nishihara
cffi: split modules from pure...
r32512
Augie Fackler
formatting: blacken the codebase...
r43346
Matt Harbison
typing: add type hints to mpatch implementations...
r50494 def patches(text: bytes, bins: List[bytes]) -> bytes:
Yuya Nishihara
cffi: remove superfluous "if True" blocks
r32513 lgt = len(bins)
all = []
if not lgt:
return text
arg = (all, bins)
Augie Fackler
formatting: blacken the codebase...
r43346 patch = lib.mpatch_fold(ffi.new_handle(arg), lib.cffi_get_next_item, 0, lgt)
Yuya Nishihara
cffi: remove superfluous "if True" blocks
r32513 if not patch:
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 raise mpatchError(b"cannot decode chunk")
Yuya Nishihara
cffi: remove superfluous "if True" blocks
r32513 outlen = lib.mpatch_calcsize(len(text), patch)
if outlen < 0:
lib.mpatch_lfree(patch)
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 raise mpatchError(b"inconsistency detected")
buf = ffi.new(b"char[]", outlen)
Yuya Nishihara
cffi: remove superfluous "if True" blocks
r32513 if lib.mpatch_apply(buf, text, len(text), patch) < 0:
lib.mpatch_lfree(patch)
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 raise mpatchError(b"error applying patches")
Yuya Nishihara
cffi: remove superfluous "if True" blocks
r32513 res = ffi.buffer(buf, outlen)[:]
lib.mpatch_lfree(patch)
return res