##// END OF EJS Templates
diffhelpers: naming and whitespace cleanup
diffhelpers: naming and whitespace cleanup

File last commit:

r37588:c4c8d0d1 default
r37588:c4c8d0d1 default
Show More
diffhelpers.py
71 lines | 2.1 KiB | text/x-python | PythonLexer
Martin Geisler
pure Python implementation of diffhelpers.c
r7702 # diffhelpers.py - pure Python implementation of diffhelpers.c
#
# Copyright 2009 Matt Mackall <mpm@selenic.com> and others
#
Martin Geisler
updated license to be explicit about GPL version 2
r8225 # This software may be used and distributed according to the terms of the
Matt Mackall
Update license to GPLv2+
r10263 # GNU General Public License version 2 or any later version.
Martin Geisler
pure Python implementation of diffhelpers.c
r7702
Gregory Szorc
diffhelpers: use absolute_import
r27336 from __future__ import absolute_import
Martin Geisler
pure Python implementation of diffhelpers.c
r7702 def addlines(fp, hunk, lena, lenb, a, b):
Yuya Nishihara
diffhelpers: port docstrings from cext to pure...
r37585 """Read lines from fp into the hunk
The hunk is parsed into two arrays, a and b. a gets the old state of
the text, b gets the new state. The control char from the hunk is saved
when inserting into a, but not b (for performance while deleting files.)
"""
Martin Geisler
pure Python implementation of diffhelpers.c
r7702 while True:
todoa = lena - len(a)
todob = lenb - len(b)
num = max(todoa, todob)
if num == 0:
break
for i in xrange(num):
s = fp.readline()
if s == "\\ No newline at end of file\n":
Yuya Nishihara
diffhelpers: naming and whitespace cleanup
r37588 fixnewline(hunk, a, b)
Martin Geisler
pure Python implementation of diffhelpers.c
r7702 continue
Yuya Nishihara
py3: get rid of character access from pure.diffhelpers...
r37584 if s == "\n":
Martin Geisler
pure Python implementation of diffhelpers.c
r7702 # Some patches may be missing the control char
# on empty lines. Supply a leading space.
s = " \n"
hunk.append(s)
Yuya Nishihara
py3: get rid of character access from pure.diffhelpers...
r37584 if s.startswith('+'):
Martin Geisler
pure Python implementation of diffhelpers.c
r7702 b.append(s[1:])
Yuya Nishihara
py3: get rid of character access from pure.diffhelpers...
r37584 elif s.startswith('-'):
Martin Geisler
pure Python implementation of diffhelpers.c
r7702 a.append(s)
else:
b.append(s[1:])
a.append(s)
return 0
Yuya Nishihara
diffhelpers: naming and whitespace cleanup
r37588 def fixnewline(hunk, a, b):
Yuya Nishihara
diffhelpers: port docstrings from cext to pure...
r37585 """Fix up the last lines of a and b when the patch has no newline at EOF"""
Martin Geisler
pure Python implementation of diffhelpers.c
r7702 l = hunk[-1]
Benoit Boissinot
fix test-mq-eol under --pure (mimic diffhelper.c behaviour)...
r10551 # tolerate CRLF in last line
if l.endswith('\r\n'):
hline = l[:-2]
else:
hline = l[:-1]
Martin Geisler
pure Python implementation of diffhelpers.c
r7702
Yuya Nishihara
py3: get rid of character access from pure.diffhelpers...
r37584 if hline.startswith((' ', '+')):
Benoit Boissinot
fix test-mq-eol under --pure (mimic diffhelper.c behaviour)...
r10551 b[-1] = hline[1:]
Yuya Nishihara
py3: get rid of character access from pure.diffhelpers...
r37584 if hline.startswith((' ', '-')):
Martin Geisler
pure Python implementation of diffhelpers.c
r7702 a[-1] = hline
hunk[-1] = hline
return 0
def testhunk(a, b, bstart):
Yuya Nishihara
diffhelpers: port docstrings from cext to pure...
r37585 """Compare the lines in a with the lines in b
a is assumed to have a control char at the start of each line, this char
is ignored in the compare.
"""
Martin Geisler
pure Python implementation of diffhelpers.c
r7702 alen = len(a)
blen = len(b)
if alen > blen - bstart:
return -1
for i in xrange(alen):
if a[i][1:] != b[i + bstart]:
return -1
return 0