Show More
@@ -196,15 +196,23 b' def allblocks(text1, text2, opts=None, l' | |||||
196 | yield s1, '=' |
|
196 | yield s1, '=' | |
197 |
|
197 | |||
198 | def unidiff(a, ad, b, bd, fn1, fn2, opts=defaultopts): |
|
198 | def unidiff(a, ad, b, bd, fn1, fn2, opts=defaultopts): | |
|
199 | """Return a unified diff as a (headers, hunkstext) tuple. | |||
|
200 | ||||
|
201 | If the diff is not null, `headers` is a list with unified diff header | |||
|
202 | lines "--- <original>" and "+++ <new>" and `hunkstext` is a string | |||
|
203 | containing diff hunks. Otherwise, both `headers` and `hunkstext` are | |||
|
204 | empty. | |||
|
205 | """ | |||
199 | def datetag(date, fn=None): |
|
206 | def datetag(date, fn=None): | |
200 | if not opts.git and not opts.nodates: |
|
207 | if not opts.git and not opts.nodates: | |
201 |
return '\t%s |
|
208 | return '\t%s' % date | |
202 | if fn and ' ' in fn: |
|
209 | if fn and ' ' in fn: | |
203 |
return '\t |
|
210 | return '\t' | |
204 |
return ' |
|
211 | return '' | |
205 |
|
212 | |||
|
213 | sentinel = [], "" | |||
206 | if not a and not b: |
|
214 | if not a and not b: | |
207 |
return |
|
215 | return sentinel | |
208 |
|
216 | |||
209 | if opts.noprefix: |
|
217 | if opts.noprefix: | |
210 | aprefix = bprefix = '' |
|
218 | aprefix = bprefix = '' | |
@@ -219,7 +227,8 b' def unidiff(a, ad, b, bd, fn1, fn2, opts' | |||||
219 |
|
227 | |||
220 | if not opts.text and (util.binary(a) or util.binary(b)): |
|
228 | if not opts.text and (util.binary(a) or util.binary(b)): | |
221 | if a and b and len(a) == len(b) and a == b: |
|
229 | if a and b and len(a) == len(b) and a == b: | |
222 |
return |
|
230 | return sentinel | |
|
231 | headerlines = [] | |||
223 | l = ['Binary file %s has changed\n' % fn1] |
|
232 | l = ['Binary file %s has changed\n' % fn1] | |
224 | elif not a: |
|
233 | elif not a: | |
225 | b = splitnewlines(b) |
|
234 | b = splitnewlines(b) | |
@@ -228,8 +237,8 b' def unidiff(a, ad, b, bd, fn1, fn2, opts' | |||||
228 | else: |
|
237 | else: | |
229 | l1 = "--- %s%s%s" % (aprefix, fn1, datetag(ad, fn1)) |
|
238 | l1 = "--- %s%s%s" % (aprefix, fn1, datetag(ad, fn1)) | |
230 | l2 = "+++ %s%s" % (bprefix + fn2, datetag(bd, fn2)) |
|
239 | l2 = "+++ %s%s" % (bprefix + fn2, datetag(bd, fn2)) | |
231 | l3 = "@@ -0,0 +1,%d @@\n" % len(b) |
|
240 | headerlines = [l1, l2] | |
232 |
l = [ |
|
241 | l = ["@@ -0,0 +1,%d @@\n" % len(b)] + ["+" + e for e in b] | |
233 | elif not b: |
|
242 | elif not b: | |
234 | a = splitnewlines(a) |
|
243 | a = splitnewlines(a) | |
235 | l1 = "--- %s%s%s" % (aprefix, fn1, datetag(ad, fn1)) |
|
244 | l1 = "--- %s%s%s" % (aprefix, fn1, datetag(ad, fn1)) | |
@@ -237,21 +246,23 b' def unidiff(a, ad, b, bd, fn1, fn2, opts' | |||||
237 | l2 = '+++ /dev/null%s' % datetag(epoch) |
|
246 | l2 = '+++ /dev/null%s' % datetag(epoch) | |
238 | else: |
|
247 | else: | |
239 | l2 = "+++ %s%s%s" % (bprefix, fn2, datetag(bd, fn2)) |
|
248 | l2 = "+++ %s%s%s" % (bprefix, fn2, datetag(bd, fn2)) | |
240 | l3 = "@@ -1,%d +0,0 @@\n" % len(a) |
|
249 | headerlines = [l1, l2] | |
241 |
l = [ |
|
250 | l = ["@@ -1,%d +0,0 @@\n" % len(a)] + ["-" + e for e in a] | |
242 | else: |
|
251 | else: | |
243 | l = sum((hlines for hrange, hlines in _unidiff(a, b, opts=opts)), []) |
|
252 | l = sum((hlines for hrange, hlines in _unidiff(a, b, opts=opts)), []) | |
244 | if not l: |
|
253 | if not l: | |
245 |
return |
|
254 | return sentinel | |
246 |
|
255 | |||
247 | l.insert(0, "--- %s%s%s" % (aprefix, fn1, datetag(ad, fn1))) |
|
256 | headerlines = [ | |
248 |
|
|
257 | "--- %s%s%s" % (aprefix, fn1, datetag(ad, fn1)), | |
|
258 | "+++ %s%s%s" % (bprefix, fn2, datetag(bd, fn2)), | |||
|
259 | ] | |||
249 |
|
260 | |||
250 | for ln in xrange(len(l)): |
|
261 | for ln in xrange(len(l)): | |
251 | if l[ln][-1] != '\n': |
|
262 | if l[ln][-1] != '\n': | |
252 | l[ln] += "\n\ No newline at end of file\n" |
|
263 | l[ln] += "\n\ No newline at end of file\n" | |
253 |
|
264 | |||
254 | return "".join(l) |
|
265 | return headerlines, "".join(l) | |
255 |
|
266 | |||
256 | def _unidiff(t1, t2, opts=defaultopts): |
|
267 | def _unidiff(t1, t2, opts=defaultopts): | |
257 | """Yield hunks of a headerless unified diff from t1 and t2 texts. |
|
268 | """Yield hunks of a headerless unified diff from t1 and t2 texts. |
@@ -2549,9 +2549,10 b' def trydiff(repo, revs, ctx1, ctx2, modi' | |||||
2549 | gitindex(content2)[0:opts.index], |
|
2549 | gitindex(content2)[0:opts.index], | |
2550 | gitmode[flag])) |
|
2550 | gitmode[flag])) | |
2551 |
|
2551 | |||
2552 | text = mdiff.unidiff(content1, date1, |
|
2552 | uheaders, text = mdiff.unidiff(content1, date1, | |
2553 | content2, date2, |
|
2553 | content2, date2, | |
2554 | path1, path2, opts=opts) |
|
2554 | path1, path2, opts=opts) | |
|
2555 | header.extend(uheaders) | |||
2555 | if header and (text or len(header) > 1): |
|
2556 | if header and (text or len(header) > 1): | |
2556 | yield '\n'.join(header) + '\n' |
|
2557 | yield '\n'.join(header) + '\n' | |
2557 | if text: |
|
2558 | if text: |
General Comments 0
You need to be logged in to leave comments.
Login now