comparison mercurial/mdiff.py @ 36146:29dd37a418aa

bdiff: write a native version of splitnewlines ./hg perfunidiff mercurial/manifest.py 0 --count 500 --profile before: ! wall 0.309280 comb 0.350000 user 0.290000 sys 0.060000 (best of 32) ./hg perfunidiff mercurial/manifest.py 0 --count 500 --profile after: ! wall 0.241572 comb 0.260000 user 0.240000 sys 0.020000 (best of 39) so it's about 20% faster. I hate Python. I wish we could usefully write this in Rust, but it doesn't look like that's realistic without using the cpython crate, which I'd still like to avoid. Differential Revision: https://phab.mercurial-scm.org/D1973
author Augie Fackler <augie@google.com>
date Thu, 25 Jan 2018 21:16:28 -0500
parents 9e641c4525a2
children 44c4a38bf563
comparison
equal deleted inserted replaced
36145:4f3e989536c3 36146:29dd37a418aa
27 blocks = bdiff.blocks 27 blocks = bdiff.blocks
28 fixws = bdiff.fixws 28 fixws = bdiff.fixws
29 patches = mpatch.patches 29 patches = mpatch.patches
30 patchedsize = mpatch.patchedsize 30 patchedsize = mpatch.patchedsize
31 textdiff = bdiff.bdiff 31 textdiff = bdiff.bdiff
32 32 splitnewlines = bdiff.splitnewlines
33 def splitnewlines(text):
34 '''like str.splitlines, but only split on newlines.'''
35 lines = [l + '\n' for l in text.split('\n')]
36 if lines:
37 if lines[-1] == '\n':
38 lines.pop()
39 else:
40 lines[-1] = lines[-1][:-1]
41 return lines
42 33
43 class diffopts(object): 34 class diffopts(object):
44 '''context is the number of context lines 35 '''context is the number of context lines
45 text treats all files as text 36 text treats all files as text
46 showfunc enables diff -p output 37 showfunc enables diff -p output