patch: unify check_binary and binary flags
Follows up
079b27b5a869. If opts.text=True, check_binary is ignored, so we
can just pass the binary flag to unidiff().
perfunidiff now takes any inputs as text files, which I think is a desired
behavior.
--- a/contrib/perf.py Wed Feb 07 13:49:02 2018 +0530
+++ b/contrib/perf.py Sun Feb 04 10:28:03 2018 +0900
@@ -1088,7 +1088,7 @@
for left, right in textpairs:
# The date strings don't matter, so we pass empty strings.
headerlines, hunks = mdiff.unidiff(
- left, '', right, '', 'left', 'right')
+ left, '', right, '', 'left', 'right', binary=False)
# consume iterators in roughly the way patch.py does
b'\n'.join(headerlines)
b''.join(sum((list(hlines) for hrange, hlines in hunks), []))
--- a/mercurial/mdiff.py Wed Feb 07 13:49:02 2018 +0530
+++ b/mercurial/mdiff.py Sun Feb 04 10:28:03 2018 +0900
@@ -236,7 +236,7 @@
yield s, type
yield s1, '='
-def unidiff(a, ad, b, bd, fn1, fn2, opts=defaultopts, check_binary=True):
+def unidiff(a, ad, b, bd, fn1, fn2, binary, opts=defaultopts):
"""Return a unified diff as a (headers, hunks) tuple.
If the diff is not null, `headers` is a list with unified diff header
@@ -244,8 +244,7 @@
(hunkrange, hunklines) coming from _unidiff().
Otherwise, `headers` and `hunks` are empty.
- Setting `check_binary` to false will skip the binary check, i.e. when
- it has been done in advance. Files are expected to be text in this case.
+ Set binary=True if either a or b should be taken as a binary file.
"""
def datetag(date, fn=None):
if not opts.git and not opts.nodates:
@@ -269,7 +268,7 @@
fn1 = util.pconvert(fn1)
fn2 = util.pconvert(fn2)
- if not opts.text and check_binary and (util.binary(a) or util.binary(b)):
+ if binary:
if a and b and len(a) == len(b) and a == b:
return sentinel
headerlines = []
--- a/mercurial/patch.py Wed Feb 07 13:49:02 2018 +0530
+++ b/mercurial/patch.py Sun Feb 04 10:28:03 2018 +0900
@@ -2699,12 +2699,9 @@
flag2 = ctx2.flags(f2)
# if binary is True, output "summary" or "base85", but not "text diff"
if opts.text:
- check_binary = True
binary = False
else:
- check_binary = any(f.isbinary()
- for f in [fctx1, fctx2] if f is not None)
- binary = check_binary
+ binary = any(f.isbinary() for f in [fctx1, fctx2] if f is not None)
if losedatafn and not opts.git:
if (binary or
@@ -2794,8 +2791,8 @@
uheaders, hunks = mdiff.unidiff(content1, date1,
content2, date2,
- path1, path2, opts=opts,
- check_binary=check_binary)
+ path1, path2,
+ binary=binary, opts=opts)
header.extend(uheaders)
yield fctx1, fctx2, header, hunks