# HG changeset patch # User Jun Wu # Date 1493875014 25200 # Node ID e62cf13e085898484d956769a6e2d48621ed2def # Parent 76f9a0009b4b7fdf8e27e1381bb13ec1e27db52f diff: use fctx.isbinary() to test binary The end goal is to avoid calling fctx.data() when unnecessary. For example, if diff.nobinary=1 and files are binary, the expected behavior is to print "Binary file has changed". That could avoid reading fctx.data() sometimes. This is mainly to enable an external LFS extension to skip expensive binary file loading sometimes (read: most of the time with diff.nobinary=1 and diff.text=0), without any behavior changes to mercurial (i.e. whether a file is LFS or not does not change any behavior, LFS could be 100% transparent to users). diff -r 76f9a0009b4b -r e62cf13e0858 mercurial/patch.py --- a/mercurial/patch.py Thu Apr 20 22:16:12 2017 +0900 +++ b/mercurial/patch.py Wed May 03 22:16:54 2017 -0700 @@ -2523,19 +2523,23 @@ for f1, f2, copyop in _filepairs(modified, added, removed, copy, opts): content1 = None content2 = None + fctx1 = None + fctx2 = None flag1 = None flag2 = None if f1: - content1 = getfilectx(f1, ctx1).data() + fctx1 = getfilectx(f1, ctx1) + content1 = fctx1.data() if opts.git or losedatafn: flag1 = ctx1.flags(f1) if f2: - content2 = getfilectx(f2, ctx2).data() + fctx2 = getfilectx(f2, ctx2) + content2 = fctx2.data() if opts.git or losedatafn: flag2 = ctx2.flags(f2) binary = False if opts.git or losedatafn: - binary = util.binary(content1) or util.binary(content2) + binary = any(f.isbinary() for f in [fctx1, fctx2] if f is not None) if losedatafn and not opts.git: if (binary or