Mercurial > public > mercurial-scm > hg
comparison mercurial/mdiff.py @ 1015:22571b8d35d3
Add automatic binary file detection to diff and export
Based on a patch by Fuming Wang
- add util.binary which decides whether a file is binary if it has any NUL
characters in the first 1K.
- teach mdiff.unidiff to print "binary file <x> has changed" for binary files
- add text flag to cause unidiff and dodiff to treat all files as text
- add -a and --text flags (like diff(1)) to hg diff and export
- update docs
author | mpm@selenic.com |
---|---|
date | Tue, 23 Aug 2005 19:58:46 -0700 |
parents | df8a5a0098d4 |
children | a0fcfbbf52bb |
comparison
equal
deleted
inserted
replaced
1014:e37cd99fa909 | 1015:22571b8d35d3 |
---|---|
5 # This software may be used and distributed according to the terms | 5 # This software may be used and distributed according to the terms |
6 # of the GNU General Public License, incorporated herein by reference. | 6 # of the GNU General Public License, incorporated herein by reference. |
7 | 7 |
8 import difflib, struct, bdiff | 8 import difflib, struct, bdiff |
9 from mpatch import * | 9 from mpatch import * |
10 from util import * | |
10 | 11 |
11 def unidiff(a, ad, b, bd, fn, r=None): | 12 def unidiff(a, ad, b, bd, fn, r=None, text=False): |
12 | 13 |
13 if not a and not b: return "" | 14 if not a and not b: return "" |
14 | 15 |
15 if a == None: | 16 if not text and (binary(a) or binary(b)): |
17 l = ['Binary file %s has changed\n' % fn] | |
18 elif a == None: | |
16 b = b.splitlines(1) | 19 b = b.splitlines(1) |
17 l1 = "--- %s\t%s\n" % ("/dev/null", ad) | 20 l1 = "--- %s\t%s\n" % ("/dev/null", ad) |
18 l2 = "+++ %s\t%s\n" % ("b/" + fn, bd) | 21 l2 = "+++ %s\t%s\n" % ("b/" + fn, bd) |
19 l3 = "@@ -0,0 +1,%d @@\n" % len(b) | 22 l3 = "@@ -0,0 +1,%d @@\n" % len(b) |
20 l = [l1, l2, l3] + ["+" + e for e in b] | 23 l = [l1, l2, l3] + ["+" + e for e in b] |