Mercurial > hg
changeset 37803:72f6498c040b stable
diffhelper: rename module to avoid conflicts with ancient C module (issue5846)
Historically we had had C extensions in mercurial/, which shadows the pure
Python modules of the same name forever unless we do clean build/install.
I'm sloppy to think about new name, so just dropped the "s".
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Fri, 20 Apr 2018 20:48:10 +0900 |
parents | 090c89a8db32 |
children | 1ec874717d8a |
files | mercurial/diffhelper.py mercurial/diffhelpers.py mercurial/patch.py |
diffstat | 3 files changed, 83 insertions(+), 83 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mercurial/diffhelper.py Fri Apr 20 20:48:10 2018 +0900 @@ -0,0 +1,77 @@ +# diffhelper.py - helper routines for patch +# +# Copyright 2009 Matt Mackall <mpm@selenic.com> and others +# +# This software may be used and distributed according to the terms of the +# GNU General Public License version 2 or any later version. + +from __future__ import absolute_import + +from .i18n import _ + +from . import ( + error, +) + +def addlines(fp, hunk, lena, lenb, a, b): + """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.) + """ + 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 not s: + raise error.ParseError(_('incomplete hunk')) + if s == "\\ No newline at end of file\n": + fixnewline(hunk, a, b) + continue + if s == '\n' or s == '\r\n': + # Some patches may be missing the control char + # on empty lines. Supply a leading space. + s = ' ' + s + hunk.append(s) + if s.startswith('+'): + b.append(s[1:]) + elif s.startswith('-'): + a.append(s) + else: + b.append(s[1:]) + a.append(s) + +def fixnewline(hunk, a, b): + """Fix up the last lines of a and b when the patch has no newline at EOF""" + l = hunk[-1] + # tolerate CRLF in last line + if l.endswith('\r\n'): + hline = l[:-2] + else: + hline = l[:-1] + + if hline.startswith((' ', '+')): + b[-1] = hline[1:] + if hline.startswith((' ', '-')): + a[-1] = hline + hunk[-1] = hline + +def testhunk(a, b, bstart): + """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. + """ + alen = len(a) + blen = len(b) + if alen > blen - bstart or bstart < 0: + return False + for i in xrange(alen): + if a[i][1:] != b[i + bstart]: + return False + return True
--- a/mercurial/diffhelpers.py Thu Apr 19 23:33:17 2018 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,77 +0,0 @@ -# diffhelpers.py - helper routines for patch -# -# Copyright 2009 Matt Mackall <mpm@selenic.com> and others -# -# This software may be used and distributed according to the terms of the -# GNU General Public License version 2 or any later version. - -from __future__ import absolute_import - -from .i18n import _ - -from . import ( - error, -) - -def addlines(fp, hunk, lena, lenb, a, b): - """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.) - """ - 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 not s: - raise error.ParseError(_('incomplete hunk')) - if s == "\\ No newline at end of file\n": - fixnewline(hunk, a, b) - continue - if s == '\n' or s == '\r\n': - # Some patches may be missing the control char - # on empty lines. Supply a leading space. - s = ' ' + s - hunk.append(s) - if s.startswith('+'): - b.append(s[1:]) - elif s.startswith('-'): - a.append(s) - else: - b.append(s[1:]) - a.append(s) - -def fixnewline(hunk, a, b): - """Fix up the last lines of a and b when the patch has no newline at EOF""" - l = hunk[-1] - # tolerate CRLF in last line - if l.endswith('\r\n'): - hline = l[:-2] - else: - hline = l[:-1] - - if hline.startswith((' ', '+')): - b[-1] = hline[1:] - if hline.startswith((' ', '-')): - a[-1] = hline - hunk[-1] = hline - -def testhunk(a, b, bstart): - """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. - """ - alen = len(a) - blen = len(b) - if alen > blen - bstart or bstart < 0: - return False - for i in xrange(alen): - if a[i][1:] != b[i + bstart]: - return False - return True
--- a/mercurial/patch.py Thu Apr 19 23:33:17 2018 +0900 +++ b/mercurial/patch.py Fri Apr 20 20:48:10 2018 +0900 @@ -28,7 +28,7 @@ ) from . import ( copies, - diffhelpers, + diffhelper, encoding, error, mail, @@ -800,7 +800,7 @@ # if there's skew we want to emit the "(offset %d lines)" even # when the hunk cleanly applies at start + skew, so skip the # fast case code - if self.skew == 0 and diffhelpers.testhunk(old, self.lines, oldstart): + if self.skew == 0 and diffhelper.testhunk(old, self.lines, oldstart): if self.remove: self.backend.unlink(self.fname) else: @@ -827,7 +827,7 @@ cand = [oldstart] for l in cand: - if not old or diffhelpers.testhunk(old, self.lines, l): + if not old or diffhelper.testhunk(old, self.lines, l): self.lines[l : l + len(old)] = new self.offset += len(new) - len(old) self.skew = l - orig_start @@ -1259,8 +1259,8 @@ self.starta = int(self.starta) self.startb = int(self.startb) try: - diffhelpers.addlines(lr, self.hunk, self.lena, self.lenb, - self.a, self.b) + diffhelper.addlines(lr, self.hunk, self.lena, self.lenb, + self.a, self.b) except error.ParseError as e: raise PatchError(_("bad hunk #%d: %s") % (self.number, e)) # if we hit eof before finishing out the hunk, the last line will @@ -1379,7 +1379,7 @@ def _fixnewline(self, lr): l = lr.readline() if l.startswith('\ '): - diffhelpers.fixnewline(self.hunk, self.a, self.b) + diffhelper.fixnewline(self.hunk, self.a, self.b) else: lr.push(l)