From patchwork Sat May 6 01:27:18 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [1,of,5,V2] diff: use fctx.isbinary() to test binary From: Jun Wu X-Patchwork-Id: 20464 Message-Id: <1db00a094f91000d89bd.1494034038@x1c> To: Date: Fri, 5 May 2017 18:27:18 -0700 # HG changeset patch # User Jun Wu # Date 1493875014 25200 # Wed May 03 22:16:54 2017 -0700 # Node ID 1db00a094f91000d89bda7ee14771fb14498c9b1 # Parent 2cfdf5241096f6c0c2d45d32b2f1a41575835025 # Available At https://bitbucket.org/quark-zju/hg-draft # hg pull https://bitbucket.org/quark-zju/hg-draft -r 1db00a094f91 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 --git a/mercurial/patch.py b/mercurial/patch.py --- a/mercurial/patch.py +++ b/mercurial/patch.py @@ -2524,17 +2524,21 @@ def trydiff(repo, revs, ctx1, ctx2, modi 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: