Mercurial > hg > mercurial-crew-with-dirclash
comparison mercurial/mdiff.py @ 2580:a20a1bb0c396
diff: add -b/-B options
author | Haakon Riiser <haakon.riiser@fys.uio.no> |
---|---|
date | Thu, 29 Jun 2006 15:16:25 +0200 |
parents | fe1689273f84 |
children | 345bac2bc4ec |
comparison
equal
deleted
inserted
replaced
2579:0875cda033fd | 2580:a20a1bb0c396 |
---|---|
18 else: | 18 else: |
19 lines[-1] = lines[-1][:-1] | 19 lines[-1] = lines[-1][:-1] |
20 return lines | 20 return lines |
21 | 21 |
22 def unidiff(a, ad, b, bd, fn, r=None, text=False, | 22 def unidiff(a, ad, b, bd, fn, r=None, text=False, |
23 showfunc=False, ignorews=False): | 23 showfunc=False, ignorews=False, ignorewsamount=False, |
24 ignoreblanklines=False): | |
24 | 25 |
25 if not a and not b: return "" | 26 if not a and not b: return "" |
26 epoch = util.datestr((0, 0)) | 27 epoch = util.datestr((0, 0)) |
27 | 28 |
28 if not text and (util.binary(a) or util.binary(b)): | 29 if not text and (util.binary(a) or util.binary(b)): |
47 l = [l1, l2, l3] + ["-" + e for e in a] | 48 l = [l1, l2, l3] + ["-" + e for e in a] |
48 else: | 49 else: |
49 al = splitnewlines(a) | 50 al = splitnewlines(a) |
50 bl = splitnewlines(b) | 51 bl = splitnewlines(b) |
51 l = list(bunidiff(a, b, al, bl, "a/" + fn, "b/" + fn, | 52 l = list(bunidiff(a, b, al, bl, "a/" + fn, "b/" + fn, |
52 showfunc=showfunc, ignorews=ignorews)) | 53 showfunc=showfunc, ignorews=ignorews, |
54 ignorewsamount=ignorewsamount, | |
55 ignoreblanklines=ignoreblanklines)) | |
53 if not l: return "" | 56 if not l: return "" |
54 # difflib uses a space, rather than a tab | 57 # difflib uses a space, rather than a tab |
55 l[0] = "%s\t%s\n" % (l[0][:-2], ad) | 58 l[0] = "%s\t%s\n" % (l[0][:-2], ad) |
56 l[1] = "%s\t%s\n" % (l[1][:-2], bd) | 59 l[1] = "%s\t%s\n" % (l[1][:-2], bd) |
57 | 60 |
70 # l1 and l2 are the text broken up into lines | 73 # l1 and l2 are the text broken up into lines |
71 # header1 and header2 are the filenames for the diff output | 74 # header1 and header2 are the filenames for the diff output |
72 # context is the number of context lines | 75 # context is the number of context lines |
73 # showfunc enables diff -p output | 76 # showfunc enables diff -p output |
74 # ignorews ignores all whitespace changes in the diff | 77 # ignorews ignores all whitespace changes in the diff |
78 # ignorewsamount ignores changes in the amount of whitespace | |
79 # ignoreblanklines ignores changes whose lines are all blank | |
75 def bunidiff(t1, t2, l1, l2, header1, header2, context=3, showfunc=False, | 80 def bunidiff(t1, t2, l1, l2, header1, header2, context=3, showfunc=False, |
76 ignorews=False): | 81 ignorews=False, ignorewsamount=False, ignoreblanklines=False): |
77 def contextend(l, len): | 82 def contextend(l, len): |
78 ret = l + context | 83 ret = l + context |
79 if ret > len: | 84 if ret > len: |
80 ret = len | 85 ret = len |
81 return ret | 86 return ret |
114 | 119 |
115 header = [ "--- %s\t\n" % header1, "+++ %s\t\n" % header2 ] | 120 header = [ "--- %s\t\n" % header1, "+++ %s\t\n" % header2 ] |
116 | 121 |
117 if showfunc: | 122 if showfunc: |
118 funcre = re.compile('\w') | 123 funcre = re.compile('\w') |
124 if ignorewsamount: | |
125 wsamountre = re.compile('[ \t]+') | |
126 wsappendedre = re.compile(' \n') | |
127 if ignoreblanklines: | |
128 wsblanklinesre = re.compile('\n') | |
119 if ignorews: | 129 if ignorews: |
120 wsre = re.compile('[ \t]') | 130 wsre = re.compile('[ \t]') |
121 | 131 |
122 # bdiff.blocks gives us the matching sequences in the files. The loop | 132 # bdiff.blocks gives us the matching sequences in the files. The loop |
123 # below finds the spaces between those matching sequences and translates | 133 # below finds the spaces between those matching sequences and translates |
146 | 156 |
147 # bdiff sometimes gives huge matches past eof, this check eats them, | 157 # bdiff sometimes gives huge matches past eof, this check eats them, |
148 # and deals with the special first match case described above | 158 # and deals with the special first match case described above |
149 if not old and not new: | 159 if not old and not new: |
150 continue | 160 continue |
161 | |
162 if ignoreblanklines: | |
163 wsold = wsblanklinesre.sub('', "".join(old)) | |
164 wsnew = wsblanklinesre.sub('', "".join(new)) | |
165 if wsold == wsnew: | |
166 continue | |
167 | |
168 if ignorewsamount: | |
169 wsold = wsamountre.sub(' ', "".join(old)) | |
170 wsold = wsappendedre.sub('\n', wsold) | |
171 wsnew = wsamountre.sub(' ', "".join(new)) | |
172 wsnew = wsappendedre.sub('\n', wsnew) | |
173 if wsold == wsnew: | |
174 continue | |
151 | 175 |
152 if ignorews: | 176 if ignorews: |
153 wsold = wsre.sub('', "".join(old)) | 177 wsold = wsre.sub('', "".join(old)) |
154 wsnew = wsre.sub('', "".join(new)) | 178 wsnew = wsre.sub('', "".join(new)) |
155 if wsold == wsnew: | 179 if wsold == wsnew: |