##// END OF EJS Templates
fix test-mq-eol under --pure (mimic diffhelper.c behaviour)...
Benoit Boissinot -
r10551:f61dced1 stable
parent child Browse files
Show More
@@ -1,56 +1,60 b''
1 # diffhelpers.py - pure Python implementation of diffhelpers.c
1 # diffhelpers.py - pure Python implementation of diffhelpers.c
2 #
2 #
3 # Copyright 2009 Matt Mackall <mpm@selenic.com> and others
3 # Copyright 2009 Matt Mackall <mpm@selenic.com> and others
4 #
4 #
5 # This software may be used and distributed according to the terms of the
5 # This software may be used and distributed according to the terms of the
6 # GNU General Public License version 2 or any later version.
6 # GNU General Public License version 2 or any later version.
7
7
8 def addlines(fp, hunk, lena, lenb, a, b):
8 def addlines(fp, hunk, lena, lenb, a, b):
9 while True:
9 while True:
10 todoa = lena - len(a)
10 todoa = lena - len(a)
11 todob = lenb - len(b)
11 todob = lenb - len(b)
12 num = max(todoa, todob)
12 num = max(todoa, todob)
13 if num == 0:
13 if num == 0:
14 break
14 break
15 for i in xrange(num):
15 for i in xrange(num):
16 s = fp.readline()
16 s = fp.readline()
17 c = s[0]
17 c = s[0]
18 if s == "\\ No newline at end of file\n":
18 if s == "\\ No newline at end of file\n":
19 fix_newline(hunk, a, b)
19 fix_newline(hunk, a, b)
20 continue
20 continue
21 if c == "\n":
21 if c == "\n":
22 # Some patches may be missing the control char
22 # Some patches may be missing the control char
23 # on empty lines. Supply a leading space.
23 # on empty lines. Supply a leading space.
24 s = " \n"
24 s = " \n"
25 hunk.append(s)
25 hunk.append(s)
26 if c == "+":
26 if c == "+":
27 b.append(s[1:])
27 b.append(s[1:])
28 elif c == "-":
28 elif c == "-":
29 a.append(s)
29 a.append(s)
30 else:
30 else:
31 b.append(s[1:])
31 b.append(s[1:])
32 a.append(s)
32 a.append(s)
33 return 0
33 return 0
34
34
35 def fix_newline(hunk, a, b):
35 def fix_newline(hunk, a, b):
36 l = hunk[-1]
36 l = hunk[-1]
37 c = l[0]
37 # tolerate CRLF in last line
38 if l.endswith('\r\n'):
39 hline = l[:-2]
40 else:
38 hline = l[:-1]
41 hline = l[:-1]
42 c = hline[0]
39
43
40 if c == " " or c == "+":
44 if c == " " or c == "+":
41 b[-1] = l[1:-1]
45 b[-1] = hline[1:]
42 if c == " " or c == "-":
46 if c == " " or c == "-":
43 a[-1] = hline
47 a[-1] = hline
44 hunk[-1] = hline
48 hunk[-1] = hline
45 return 0
49 return 0
46
50
47
51
48 def testhunk(a, b, bstart):
52 def testhunk(a, b, bstart):
49 alen = len(a)
53 alen = len(a)
50 blen = len(b)
54 blen = len(b)
51 if alen > blen - bstart:
55 if alen > blen - bstart:
52 return -1
56 return -1
53 for i in xrange(alen):
57 for i in xrange(alen):
54 if a[i][1:] != b[i + bstart]:
58 if a[i][1:] != b[i + bstart]:
55 return -1
59 return -1
56 return 0
60 return 0
General Comments 0
You need to be logged in to leave comments. Login now