##// END OF EJS Templates
status: disable morestatus when using -0...
status: disable morestatus when using -0 Without this patch, you get something like this: ``` M a\x00? a.orig\x00# The repository is in an unfinished *merge* state. (esc) # Unresolved merge conflicts: # # a # # To mark files as resolved: hg resolve --mark FILE # To continue: hg commit # To abort: hg merge --abort ``` That doesn't seem like something one would ever want. I considered making it an error to combine `-0` with morestatus, but it seems very likely that that would just make the user spend time trying to figure out how to disable morestatus, so it feels like we might as well just do it for them. Differential Revision: https://phab.mercurial-scm.org/D9545

File last commit:

r45714:10f48720 default
r46696:7a2b67e6 default
Show More
diffhelper.py
83 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
#
# 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,
Gregory Szorc
global: use pycompat.xrange()...
r38806 pycompat,
Yuya Nishihara
diffhelper: rename module to avoid conflicts with ancient C module (issue5846)...
r37821 )
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
Gregory Szorc
global: use pycompat.xrange()...
r38806 for i in pycompat.xrange(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
Gregory Szorc
global: use pycompat.xrange()...
r38806 for i in pycompat.xrange(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