diffhelper: rename module to avoid conflicts with ancient C module (issue5846) stable
authorYuya Nishihara <yuya@tcha.org>
Fri, 20 Apr 2018 20:48:10 +0900
branchstable
changeset 37803 72f6498c040b
parent 37802 090c89a8db32
child 37804 1ec874717d8a
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".
mercurial/diffhelper.py
mercurial/diffhelpers.py
mercurial/patch.py
--- /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)