121
|
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 of the
|
|
6 # GNU General Public License version 2, 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
|