##// END OF EJS Templates
cffi: remove superfluous "if True" blocks
Yuya Nishihara -
r32513:25b37900 default
parent child Browse files
Show More
@@ -1,78 +1,76 b''
1 # bdiff.py - CFFI implementation of bdiff.c
1 # bdiff.py - CFFI implementation of bdiff.c
2 #
2 #
3 # Copyright 2016 Maciej Fijalkowski <fijall@gmail.com>
3 # Copyright 2016 Maciej Fijalkowski <fijall@gmail.com>
4 #
4 #
5 # This software may be used and distributed according to the terms of the
5 # This software may be used and distributed according to the terms of the
6 # GNU General Public License version 2 or any later version.
6 # GNU General Public License version 2 or any later version.
7
7
8 from __future__ import absolute_import
8 from __future__ import absolute_import
9
9
10 import struct
10 import struct
11
11
12 from ..pure.bdiff import *
12 from ..pure.bdiff import *
13 from . import _bdiff
13 from . import _bdiff
14
14
15 ffi = _bdiff.ffi
15 ffi = _bdiff.ffi
16 lib = _bdiff.lib
16 lib = _bdiff.lib
17
17
18 if True:
19 if True:
20 def blocks(sa, sb):
18 def blocks(sa, sb):
21 a = ffi.new("struct bdiff_line**")
19 a = ffi.new("struct bdiff_line**")
22 b = ffi.new("struct bdiff_line**")
20 b = ffi.new("struct bdiff_line**")
23 ac = ffi.new("char[]", str(sa))
21 ac = ffi.new("char[]", str(sa))
24 bc = ffi.new("char[]", str(sb))
22 bc = ffi.new("char[]", str(sb))
25 l = ffi.new("struct bdiff_hunk*")
23 l = ffi.new("struct bdiff_hunk*")
26 try:
24 try:
27 an = lib.bdiff_splitlines(ac, len(sa), a)
25 an = lib.bdiff_splitlines(ac, len(sa), a)
28 bn = lib.bdiff_splitlines(bc, len(sb), b)
26 bn = lib.bdiff_splitlines(bc, len(sb), b)
29 if not a[0] or not b[0]:
27 if not a[0] or not b[0]:
30 raise MemoryError
28 raise MemoryError
31 count = lib.bdiff_diff(a[0], an, b[0], bn, l)
29 count = lib.bdiff_diff(a[0], an, b[0], bn, l)
32 if count < 0:
30 if count < 0:
33 raise MemoryError
31 raise MemoryError
34 rl = [None] * count
32 rl = [None] * count
35 h = l.next
33 h = l.next
36 i = 0
34 i = 0
37 while h:
35 while h:
38 rl[i] = (h.a1, h.a2, h.b1, h.b2)
36 rl[i] = (h.a1, h.a2, h.b1, h.b2)
39 h = h.next
37 h = h.next
40 i += 1
38 i += 1
41 finally:
39 finally:
42 lib.free(a[0])
40 lib.free(a[0])
43 lib.free(b[0])
41 lib.free(b[0])
44 lib.bdiff_freehunks(l.next)
42 lib.bdiff_freehunks(l.next)
45 return rl
43 return rl
46
44
47 def bdiff(sa, sb):
45 def bdiff(sa, sb):
48 a = ffi.new("struct bdiff_line**")
46 a = ffi.new("struct bdiff_line**")
49 b = ffi.new("struct bdiff_line**")
47 b = ffi.new("struct bdiff_line**")
50 ac = ffi.new("char[]", str(sa))
48 ac = ffi.new("char[]", str(sa))
51 bc = ffi.new("char[]", str(sb))
49 bc = ffi.new("char[]", str(sb))
52 l = ffi.new("struct bdiff_hunk*")
50 l = ffi.new("struct bdiff_hunk*")
53 try:
51 try:
54 an = lib.bdiff_splitlines(ac, len(sa), a)
52 an = lib.bdiff_splitlines(ac, len(sa), a)
55 bn = lib.bdiff_splitlines(bc, len(sb), b)
53 bn = lib.bdiff_splitlines(bc, len(sb), b)
56 if not a[0] or not b[0]:
54 if not a[0] or not b[0]:
57 raise MemoryError
55 raise MemoryError
58 count = lib.bdiff_diff(a[0], an, b[0], bn, l)
56 count = lib.bdiff_diff(a[0], an, b[0], bn, l)
59 if count < 0:
57 if count < 0:
60 raise MemoryError
58 raise MemoryError
61 rl = []
59 rl = []
62 h = l.next
60 h = l.next
63 la = lb = 0
61 la = lb = 0
64 while h:
62 while h:
65 if h.a1 != la or h.b1 != lb:
63 if h.a1 != la or h.b1 != lb:
66 lgt = (b[0] + h.b1).l - (b[0] + lb).l
64 lgt = (b[0] + h.b1).l - (b[0] + lb).l
67 rl.append(struct.pack(">lll", (a[0] + la).l - a[0].l,
65 rl.append(struct.pack(">lll", (a[0] + la).l - a[0].l,
68 (a[0] + h.a1).l - a[0].l, lgt))
66 (a[0] + h.a1).l - a[0].l, lgt))
69 rl.append(str(ffi.buffer((b[0] + lb).l, lgt)))
67 rl.append(str(ffi.buffer((b[0] + lb).l, lgt)))
70 la = h.a2
68 la = h.a2
71 lb = h.b2
69 lb = h.b2
72 h = h.next
70 h = h.next
73
71
74 finally:
72 finally:
75 lib.free(a[0])
73 lib.free(a[0])
76 lib.free(b[0])
74 lib.free(b[0])
77 lib.bdiff_freehunks(l.next)
75 lib.bdiff_freehunks(l.next)
78 return "".join(rl)
76 return "".join(rl)
@@ -1,50 +1,48 b''
1 # mpatch.py - CFFI implementation of mpatch.c
1 # mpatch.py - CFFI implementation of mpatch.c
2 #
2 #
3 # Copyright 2016 Maciej Fijalkowski <fijall@gmail.com>
3 # Copyright 2016 Maciej Fijalkowski <fijall@gmail.com>
4 #
4 #
5 # This software may be used and distributed according to the terms of the
5 # This software may be used and distributed according to the terms of the
6 # GNU General Public License version 2 or any later version.
6 # GNU General Public License version 2 or any later version.
7
7
8 from __future__ import absolute_import
8 from __future__ import absolute_import
9
9
10 from ..pure.mpatch import *
10 from ..pure.mpatch import *
11 from ..pure.mpatch import mpatchError # silence pyflakes
11 from ..pure.mpatch import mpatchError # silence pyflakes
12 from . import _mpatch
12 from . import _mpatch
13
13
14 ffi = _mpatch.ffi
14 ffi = _mpatch.ffi
15 lib = _mpatch.lib
15 lib = _mpatch.lib
16
16
17 if True:
18 if True:
19 @ffi.def_extern()
17 @ffi.def_extern()
20 def cffi_get_next_item(arg, pos):
18 def cffi_get_next_item(arg, pos):
21 all, bins = ffi.from_handle(arg)
19 all, bins = ffi.from_handle(arg)
22 container = ffi.new("struct mpatch_flist*[1]")
20 container = ffi.new("struct mpatch_flist*[1]")
23 to_pass = ffi.new("char[]", str(bins[pos]))
21 to_pass = ffi.new("char[]", str(bins[pos]))
24 all.append(to_pass)
22 all.append(to_pass)
25 r = lib.mpatch_decode(to_pass, len(to_pass) - 1, container)
23 r = lib.mpatch_decode(to_pass, len(to_pass) - 1, container)
26 if r < 0:
24 if r < 0:
27 return ffi.NULL
25 return ffi.NULL
28 return container[0]
26 return container[0]
29
27
30 def patches(text, bins):
28 def patches(text, bins):
31 lgt = len(bins)
29 lgt = len(bins)
32 all = []
30 all = []
33 if not lgt:
31 if not lgt:
34 return text
32 return text
35 arg = (all, bins)
33 arg = (all, bins)
36 patch = lib.mpatch_fold(ffi.new_handle(arg),
34 patch = lib.mpatch_fold(ffi.new_handle(arg),
37 lib.cffi_get_next_item, 0, lgt)
35 lib.cffi_get_next_item, 0, lgt)
38 if not patch:
36 if not patch:
39 raise mpatchError("cannot decode chunk")
37 raise mpatchError("cannot decode chunk")
40 outlen = lib.mpatch_calcsize(len(text), patch)
38 outlen = lib.mpatch_calcsize(len(text), patch)
41 if outlen < 0:
39 if outlen < 0:
42 lib.mpatch_lfree(patch)
40 lib.mpatch_lfree(patch)
43 raise mpatchError("inconsistency detected")
41 raise mpatchError("inconsistency detected")
44 buf = ffi.new("char[]", outlen)
42 buf = ffi.new("char[]", outlen)
45 if lib.mpatch_apply(buf, text, len(text), patch) < 0:
43 if lib.mpatch_apply(buf, text, len(text), patch) < 0:
46 lib.mpatch_lfree(patch)
44 lib.mpatch_lfree(patch)
47 raise mpatchError("error applying patches")
45 raise mpatchError("error applying patches")
48 res = ffi.buffer(buf, outlen)[:]
46 res = ffi.buffer(buf, outlen)[:]
49 lib.mpatch_lfree(patch)
47 lib.mpatch_lfree(patch)
50 return res
48 return res
General Comments 0
You need to be logged in to leave comments. Login now