##// END OF EJS Templates
interfaces: mark a few dirstate methods abstract...
interfaces: mark a few dirstate methods abstract I'm not sure what's going on here, but when enabling pytype checking on this package, it spits out the following errors: File "/mnt/c/Users/Matt/hg/mercurial/interfaces/dirstate.py", line 136, in changing_parents: bad return type [bad-return-type] Expected: Iterator Actually returned: None Attributes of protocol Iterator are not implemented on None: __next__ File "/mnt/c/Users/Matt/hg/mercurial/interfaces/dirstate.py", line 145, in changing_files: bad return type [bad-return-type] Expected: Iterator Actually returned: None Attributes of protocol Iterator are not implemented on None: __next__ I guess technically that's true, because these methods only have a doc comment, and don't explicitly return something or unconditionally raise an error. The strange thing is that both before and after this change, the *.pyi file that is generated is unchanged, and contains: def changing_files(self, repo) -> contextlib._GeneratorContextManager: ... def changing_parents(self, repo) -> contextlib._GeneratorContextManager: ... I'm not sure if the `@abstractmethod` should be the most inner or most outer decoration. We'll roll the dice with being the innermost, because that's how `@abstractproperty` says it should be used in conjunction with `@property`. We should probably make all of the methods without an actual body abstract, like was done for some `mercurial.wireprototypes` classes in fd200f5bcaea. But let's hold off for now and do that enmass later.

File last commit:

r52756:f4733654 default
r53328:2c8c46c3 default
Show More
diffhelper.py
82 lines | 2.3 KiB | text/x-python | PythonLexer
Yuya Nishihara
diffhelper: rename module to avoid conflicts with ancient C module (issue5846)...
r37821 # diffhelper.py - helper routines for patch
#
Raphaël Gomès
contributor: change mentions of mpm to olivia...
r47575 # Copyright 2009 Olivia Mackall <olivia@selenic.com> and others
Yuya Nishihara
diffhelper: rename module to avoid conflicts with ancient C module (issue5846)...
r37821 #
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.
Matt Harbison
typing: add `from __future__ import annotations` to most files...
r52756 from __future__ import annotations
Yuya Nishihara
diffhelper: rename module to avoid conflicts with ancient C module (issue5846)...
r37821
from .i18n import _
from . import (
error,
)
Rodrigo Damazio Bovendorp
diff: move no-eol text constant to a common location...
r45714 MISSING_NEWLINE_MARKER = b'\\ No newline at end of file\n'
Augie Fackler
style: run a patched black on a subset of mercurial...
r43345
Yuya Nishihara
diffhelper: rename module to avoid conflicts with ancient C module (issue5846)...
r37821 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
Manuel Jacob
py3: replace `pycompat.xrange` by `range`
r50179 for i in range(num):
Yuya Nishihara
diffhelper: rename module to avoid conflicts with ancient C module (issue5846)...
r37821 s = fp.readline()
if not s:
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 raise error.ParseError(_(b'incomplete hunk'))
Rodrigo Damazio Bovendorp
diff: move no-eol text constant to a common location...
r45714 if s == MISSING_NEWLINE_MARKER:
Yuya Nishihara
diffhelper: rename module to avoid conflicts with ancient C module (issue5846)...
r37821 fixnewline(hunk, a, b)
continue
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 if s == b'\n' or s == b'\r\n':
Yuya Nishihara
diffhelper: rename module to avoid conflicts with ancient C module (issue5846)...
r37821 # Some patches may be missing the control char
# on empty lines. Supply a leading space.
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 s = b' ' + s
Yuya Nishihara
diffhelper: rename module to avoid conflicts with ancient C module (issue5846)...
r37821 hunk.append(s)
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 if s.startswith(b'+'):
Yuya Nishihara
diffhelper: rename module to avoid conflicts with ancient C module (issue5846)...
r37821 b.append(s[1:])
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 elif s.startswith(b'-'):
Yuya Nishihara
diffhelper: rename module to avoid conflicts with ancient C module (issue5846)...
r37821 a.append(s)
else:
b.append(s[1:])
a.append(s)
Augie Fackler
style: run a patched black on a subset of mercurial...
r43345
Yuya Nishihara
diffhelper: rename module to avoid conflicts with ancient C module (issue5846)...
r37821 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
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 if l.endswith(b'\r\n'):
Yuya Nishihara
diffhelper: rename module to avoid conflicts with ancient C module (issue5846)...
r37821 hline = l[:-2]
else:
hline = l[:-1]
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 if hline.startswith((b' ', b'+')):
Yuya Nishihara
diffhelper: rename module to avoid conflicts with ancient C module (issue5846)...
r37821 b[-1] = hline[1:]
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 if hline.startswith((b' ', b'-')):
Yuya Nishihara
diffhelper: rename module to avoid conflicts with ancient C module (issue5846)...
r37821 a[-1] = hline
hunk[-1] = hline
Augie Fackler
style: run a patched black on a subset of mercurial...
r43345
Yuya Nishihara
diffhelper: rename module to avoid conflicts with ancient C module (issue5846)...
r37821 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
Manuel Jacob
py3: replace `pycompat.xrange` by `range`
r50179 for i in range(alen):
Yuya Nishihara
diffhelper: rename module to avoid conflicts with ancient C module (issue5846)...
r37821 if a[i][1:] != b[i + bstart]:
return False
return True