104 ('a', 'text', None, _('treat all files as text')), |
104 ('a', 'text', None, _('treat all files as text')), |
105 ('g', 'git', None, _('use git extended diff format')), |
105 ('g', 'git', None, _('use git extended diff format')), |
106 ('', 'nodates', None, _('omit dates from diff headers')) |
106 ('', 'nodates', None, _('omit dates from diff headers')) |
107 ] |
107 ] |
108 |
108 |
109 diffopts2 = [ |
109 diffwsopts = [ |
110 ('p', 'show-function', None, _('show which function each change is in')), |
|
111 ('', 'reverse', None, _('produce a diff that undoes the changes')), |
|
112 ('w', 'ignore-all-space', None, |
110 ('w', 'ignore-all-space', None, |
113 _('ignore white space when comparing lines')), |
111 _('ignore white space when comparing lines')), |
114 ('b', 'ignore-space-change', None, |
112 ('b', 'ignore-space-change', None, |
115 _('ignore changes in the amount of white space')), |
113 _('ignore changes in the amount of white space')), |
116 ('B', 'ignore-blank-lines', None, |
114 ('B', 'ignore-blank-lines', None, |
117 _('ignore changes whose lines are all blank')), |
115 _('ignore changes whose lines are all blank')), |
|
116 ] |
|
117 |
|
118 diffopts2 = [ |
|
119 ('p', 'show-function', None, _('show which function each change is in')), |
|
120 ('', 'reverse', None, _('produce a diff that undoes the changes')), |
|
121 ] + diffwsopts + [ |
118 ('U', 'unified', '', |
122 ('U', 'unified', '', |
119 _('number of lines of context to show'), _('NUM')), |
123 _('number of lines of context to show'), _('NUM')), |
120 ('', 'stat', None, _('output diffstat-style summary of changes')), |
124 ('', 'stat', None, _('output diffstat-style summary of changes')), |
121 ] |
125 ] |
122 |
126 |
213 ('f', 'file', None, _('list the filename')), |
217 ('f', 'file', None, _('list the filename')), |
214 ('d', 'date', None, _('list the date (short with -q)')), |
218 ('d', 'date', None, _('list the date (short with -q)')), |
215 ('n', 'number', None, _('list the revision number (default)')), |
219 ('n', 'number', None, _('list the revision number (default)')), |
216 ('c', 'changeset', None, _('list the changeset')), |
220 ('c', 'changeset', None, _('list the changeset')), |
217 ('l', 'line-number', None, _('show line number at the first appearance')) |
221 ('l', 'line-number', None, _('show line number at the first appearance')) |
218 ] + walkopts, |
222 ] + diffwsopts + walkopts, |
219 _('[-r REV] [-f] [-a] [-u] [-d] [-n] [-c] [-l] FILE...')) |
223 _('[-r REV] [-f] [-a] [-u] [-d] [-n] [-c] [-l] FILE...')) |
220 def annotate(ui, repo, *pats, **opts): |
224 def annotate(ui, repo, *pats, **opts): |
221 """show changeset information by line for each file |
225 """show changeset information by line for each file |
222 |
226 |
223 List changes in files, showing the revision id responsible for |
227 List changes in files, showing the revision id responsible for |
268 |
272 |
269 ctx = scmutil.revsingle(repo, opts.get('rev')) |
273 ctx = scmutil.revsingle(repo, opts.get('rev')) |
270 m = scmutil.match(ctx, pats, opts) |
274 m = scmutil.match(ctx, pats, opts) |
271 m.bad = bad |
275 m.bad = bad |
272 follow = not opts.get('no_follow') |
276 follow = not opts.get('no_follow') |
|
277 diffopts = patch.diffopts(ui, opts, section='annotate') |
273 for abs in ctx.walk(m): |
278 for abs in ctx.walk(m): |
274 fctx = ctx[abs] |
279 fctx = ctx[abs] |
275 if not opts.get('text') and util.binary(fctx.data()): |
280 if not opts.get('text') and util.binary(fctx.data()): |
276 ui.write(_("%s: binary file\n") % ((pats and m.rel(abs)) or abs)) |
281 ui.write(_("%s: binary file\n") % ((pats and m.rel(abs)) or abs)) |
277 continue |
282 continue |
278 |
283 |
279 lines = fctx.annotate(follow=follow, linenumber=linenumber) |
284 lines = fctx.annotate(follow=follow, linenumber=linenumber, |
|
285 diffopts=diffopts) |
280 pieces = [] |
286 pieces = [] |
281 |
287 |
282 for f, sep in funcmap: |
288 for f, sep in funcmap: |
283 l = [f(n) for n, dummy in lines] |
289 l = [f(n) for n, dummy in lines] |
284 if l: |
290 if l: |