# HG changeset patch # User Martin Geisler # Date 1232752339 -3600 # Node ID f6bb40554e340f0eb78e1940ccc84e698885bca0 # Parent 4bdead043d8d6144166438e74d424196b34445e2 pure Python implementation of diffhelpers.c diff -r 4bdead043d8d -r f6bb40554e34 mercurial/pure/diffhelpers.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mercurial/pure/diffhelpers.py Sat Jan 24 00:12:19 2009 +0100 @@ -0,0 +1,56 @@ +# diffhelpers.py - pure Python implementation of diffhelpers.c +# +# Copyright 2009 Matt Mackall and others +# +# This software may be used and distributed according to the terms +# of the GNU General Public License, incorporated herein by reference. + +def addlines(fp, hunk, lena, lenb, a, b): + 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() + c = s[0] + if s == "\\ No newline at end of file\n": + fix_newline(hunk, a, b) + continue + if c == "\n": + # Some patches may be missing the control char + # on empty lines. Supply a leading space. + s = " \n" + hunk.append(s) + if c == "+": + b.append(s[1:]) + elif c == "-": + a.append(s) + else: + b.append(s[1:]) + a.append(s) + return 0 + +def fix_newline(hunk, a, b): + l = hunk[-1] + c = l[0] + hline = l[:-1] + + if c == " " or c == "+": + b[-1] = l[1:-1] + if c == " " or c == "-": + a[-1] = hline + hunk[-1] = hline + return 0 + + +def testhunk(a, b, bstart): + 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