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".
--- /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)