comparison mercurial/pure/bdiff.py @ 43076:2372284d9457

formatting: blacken the codebase This is using my patch to black (https://github.com/psf/black/pull/826) so we don't un-wrap collection literals. Done with: hg files 'set:**.py - mercurial/thirdparty/** - "contrib/python-zstandard/**"' | xargs black -S # skip-blame mass-reformatting only # no-check-commit reformats foo_bar functions Differential Revision: https://phab.mercurial-scm.org/D6971
author Augie Fackler <augie@google.com>
date Sun, 06 Oct 2019 09:45:02 -0400
parents 8b7973d40a01
children 687b865b95ad
comparison
equal deleted inserted replaced
43075:57875cf423c9 43076:2372284d9457
9 9
10 import difflib 10 import difflib
11 import re 11 import re
12 import struct 12 import struct
13 13
14
14 def splitnewlines(text): 15 def splitnewlines(text):
15 '''like str.splitlines, but only split on newlines.''' 16 '''like str.splitlines, but only split on newlines.'''
16 lines = [l + '\n' for l in text.split('\n')] 17 lines = [l + '\n' for l in text.split('\n')]
17 if lines: 18 if lines:
18 if lines[-1] == '\n': 19 if lines[-1] == '\n':
19 lines.pop() 20 lines.pop()
20 else: 21 else:
21 lines[-1] = lines[-1][:-1] 22 lines[-1] = lines[-1][:-1]
22 return lines 23 return lines
24
23 25
24 def _normalizeblocks(a, b, blocks): 26 def _normalizeblocks(a, b, blocks):
25 prev = None 27 prev = None
26 r = [] 28 r = []
27 for curr in blocks: 29 for curr in blocks:
36 38
37 a2, b2, l2 = curr 39 a2, b2, l2 = curr
38 a2end = a2 + l2 40 a2end = a2 + l2
39 b2end = b2 + l2 41 b2end = b2 + l2
40 if a1end == a2: 42 if a1end == a2:
41 while (a1end + shift < a2end and 43 while (
42 a[a1end + shift] == b[b1end + shift]): 44 a1end + shift < a2end and a[a1end + shift] == b[b1end + shift]
45 ):
43 shift += 1 46 shift += 1
44 elif b1end == b2: 47 elif b1end == b2:
45 while (b1end + shift < b2end and 48 while (
46 a[a1end + shift] == b[b1end + shift]): 49 b1end + shift < b2end and a[a1end + shift] == b[b1end + shift]
50 ):
47 shift += 1 51 shift += 1
48 r.append((a1, b1, l1 + shift)) 52 r.append((a1, b1, l1 + shift))
49 prev = a2 + shift, b2 + shift, l2 - shift 53 prev = a2 + shift, b2 + shift, l2 - shift
50 r.append(prev) 54 r.append(prev)
51 return r 55 return r
56
52 57
53 def bdiff(a, b): 58 def bdiff(a, b):
54 a = bytes(a).splitlines(True) 59 a = bytes(a).splitlines(True)
55 b = bytes(b).splitlines(True) 60 b = bytes(b).splitlines(True)
56 61
74 la = am + size 79 la = am + size
75 lb = bm + size 80 lb = bm + size
76 81
77 return "".join(bin) 82 return "".join(bin)
78 83
84
79 def blocks(a, b): 85 def blocks(a, b):
80 an = splitnewlines(a) 86 an = splitnewlines(a)
81 bn = splitnewlines(b) 87 bn = splitnewlines(b)
82 d = difflib.SequenceMatcher(None, an, bn).get_matching_blocks() 88 d = difflib.SequenceMatcher(None, an, bn).get_matching_blocks()
83 d = _normalizeblocks(an, bn, d) 89 d = _normalizeblocks(an, bn, d)
84 return [(i, i + n, j, j + n) for (i, j, n) in d] 90 return [(i, i + n, j, j + n) for (i, j, n) in d]
91
85 92
86 def fixws(text, allws): 93 def fixws(text, allws):
87 if allws: 94 if allws:
88 text = re.sub('[ \t\r]+', '', text) 95 text = re.sub('[ \t\r]+', '', text)
89 else: 96 else: