Mercurial > hg
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 |