Mercurial > hg
comparison mercurial/pure/diffhelpers.py @ 7702:f6bb40554e34
pure Python implementation of diffhelpers.c
author | Martin Geisler <mg@daimi.au.dk> |
---|---|
date | Sat, 24 Jan 2009 00:12:19 +0100 |
parents | |
children | 46293a0c7e9f |
comparison
equal
deleted
inserted
replaced
7701:4bdead043d8d | 7702:f6bb40554e34 |
---|---|
1 # diffhelpers.py - pure Python implementation of diffhelpers.c | |
2 # | |
3 # Copyright 2009 Matt Mackall <mpm@selenic.com> and others | |
4 # | |
5 # This software may be used and distributed according to the terms | |
6 # of the GNU General Public License, incorporated herein by reference. | |
7 | |
8 def addlines(fp, hunk, lena, lenb, a, b): | |
9 while True: | |
10 todoa = lena - len(a) | |
11 todob = lenb - len(b) | |
12 num = max(todoa, todob) | |
13 if num == 0: | |
14 break | |
15 for i in xrange(num): | |
16 s = fp.readline() | |
17 c = s[0] | |
18 if s == "\\ No newline at end of file\n": | |
19 fix_newline(hunk, a, b) | |
20 continue | |
21 if c == "\n": | |
22 # Some patches may be missing the control char | |
23 # on empty lines. Supply a leading space. | |
24 s = " \n" | |
25 hunk.append(s) | |
26 if c == "+": | |
27 b.append(s[1:]) | |
28 elif c == "-": | |
29 a.append(s) | |
30 else: | |
31 b.append(s[1:]) | |
32 a.append(s) | |
33 return 0 | |
34 | |
35 def fix_newline(hunk, a, b): | |
36 l = hunk[-1] | |
37 c = l[0] | |
38 hline = l[:-1] | |
39 | |
40 if c == " " or c == "+": | |
41 b[-1] = l[1:-1] | |
42 if c == " " or c == "-": | |
43 a[-1] = hline | |
44 hunk[-1] = hline | |
45 return 0 | |
46 | |
47 | |
48 def testhunk(a, b, bstart): | |
49 alen = len(a) | |
50 blen = len(b) | |
51 if alen > blen - bstart: | |
52 return -1 | |
53 for i in xrange(alen): | |
54 if a[i][1:] != b[i + bstart]: | |
55 return -1 | |
56 return 0 |