##// END OF EJS Templates
patch: avoid repeated binary checks if all files in a patch are text...
Joerg Sonnenberger -
r35868:079b27b5 default
parent child Browse files
Show More
@@ -234,13 +234,16 b' def allblocks(text1, text2, opts=None, l'
234 234 yield s, type
235 235 yield s1, '='
236 236
237 def unidiff(a, ad, b, bd, fn1, fn2, opts=defaultopts):
237 def unidiff(a, ad, b, bd, fn1, fn2, opts=defaultopts, check_binary=True):
238 238 """Return a unified diff as a (headers, hunks) tuple.
239 239
240 240 If the diff is not null, `headers` is a list with unified diff header
241 241 lines "--- <original>" and "+++ <new>" and `hunks` is a generator yielding
242 242 (hunkrange, hunklines) coming from _unidiff().
243 243 Otherwise, `headers` and `hunks` are empty.
244
245 Setting `check_binary` to false will skip the binary check, i.e. when
246 it has been done in advance. Files are expected to be text in this case.
244 247 """
245 248 def datetag(date, fn=None):
246 249 if not opts.git and not opts.nodates:
@@ -270,7 +273,7 b' def unidiff(a, ad, b, bd, fn1, fn2, opts'
270 273 text += "\n\ No newline at end of file\n"
271 274 yield text
272 275
273 if not opts.text and (util.binary(a) or util.binary(b)):
276 if not opts.text and check_binary and (util.binary(a) or util.binary(b)):
274 277 if a and b and len(a) == len(b) and a == b:
275 278 return sentinel
276 279 headerlines = []
@@ -2698,8 +2698,13 b' def trydiff(repo, revs, ctx1, ctx2, modi'
2698 2698 if opts.git or losedatafn:
2699 2699 flag2 = ctx2.flags(f2)
2700 2700 # if binary is True, output "summary" or "base85", but not "text diff"
2701 binary = not opts.text and any(f.isbinary()
2702 for f in [fctx1, fctx2] if f is not None)
2701 if opts.text:
2702 check_binary = True
2703 binary = False
2704 else:
2705 check_binary = any(f.isbinary()
2706 for f in [fctx1, fctx2] if f is not None)
2707 binary = check_binary
2703 2708
2704 2709 if losedatafn and not opts.git:
2705 2710 if (binary or
@@ -2789,7 +2794,8 b' def trydiff(repo, revs, ctx1, ctx2, modi'
2789 2794
2790 2795 uheaders, hunks = mdiff.unidiff(content1, date1,
2791 2796 content2, date2,
2792 path1, path2, opts=opts)
2797 path1, path2, opts=opts,
2798 check_binary=check_binary)
2793 2799 header.extend(uheaders)
2794 2800 yield fctx1, fctx2, header, hunks
2795 2801
General Comments 0
You need to be logged in to leave comments. Login now