comparison mercurial/pure/bdiff.py @ 14066:14fac6c0536a

pure bdiff: don't use a generator Generators are slow, and currently defeat the PyPy JIT.
author Dan Villiom Podlaski Christiansen <danchr@gmail.com>
date Sat, 30 Apr 2011 15:05:36 +0200
parents 08a0f04b56bd
children eeac5e179243
comparison
equal deleted inserted replaced
14065:8f7132fa5e59 14066:14fac6c0536a
17 lines[-1] = lines[-1][:-1] 17 lines[-1] = lines[-1][:-1]
18 return lines 18 return lines
19 19
20 def _normalizeblocks(a, b, blocks): 20 def _normalizeblocks(a, b, blocks):
21 prev = None 21 prev = None
22 r = []
22 for curr in blocks: 23 for curr in blocks:
23 if prev is None: 24 if prev is None:
24 prev = curr 25 prev = curr
25 continue 26 continue
26 shift = 0 27 shift = 0
38 shift += 1 39 shift += 1
39 elif b1end == b2: 40 elif b1end == b2:
40 while (b1end + shift < b2end and 41 while (b1end + shift < b2end and
41 a[a1end + shift] == b[b1end + shift]): 42 a[a1end + shift] == b[b1end + shift]):
42 shift += 1 43 shift += 1
43 yield a1, b1, l1 + shift 44 r.append((a1, b1, l1 + shift))
44 prev = a2 + shift, b2 + shift, l2 - shift 45 prev = a2 + shift, b2 + shift, l2 - shift
45 yield prev 46 r.append(prev)
47 return r
46 48
47 def bdiff(a, b): 49 def bdiff(a, b):
48 a = str(a).splitlines(True) 50 a = str(a).splitlines(True)
49 b = str(b).splitlines(True) 51 b = str(b).splitlines(True)
50 52