260 ('u', 'user', None, _('list the author (long with -v)')), |
260 ('u', 'user', None, _('list the author (long with -v)')), |
261 ('f', 'file', None, _('list the filename')), |
261 ('f', 'file', None, _('list the filename')), |
262 ('d', 'date', None, _('list the date (short with -q)')), |
262 ('d', 'date', None, _('list the date (short with -q)')), |
263 ('n', 'number', None, _('list the revision number (default)')), |
263 ('n', 'number', None, _('list the revision number (default)')), |
264 ('c', 'changeset', None, _('list the changeset')), |
264 ('c', 'changeset', None, _('list the changeset')), |
265 ('l', 'line-number', None, _('show line number at the first appearance')) |
265 ('l', 'line-number', None, _('show line number at the first appearance')), |
|
266 ('', 'skip', [], _('revision to not display (EXPERIMENTAL)'), _('REV')), |
266 ] + diffwsopts + walkopts + formatteropts, |
267 ] + diffwsopts + walkopts + formatteropts, |
267 _('[-r REV] [-f] [-a] [-u] [-d] [-n] [-c] [-l] FILE...'), |
268 _('[-r REV] [-f] [-a] [-u] [-d] [-n] [-c] [-l] FILE...'), |
268 inferrepo=True) |
269 inferrepo=True) |
269 def annotate(ui, repo, *pats, **opts): |
270 def annotate(ui, repo, *pats, **opts): |
270 """show changeset information by line for each file |
271 """show changeset information by line for each file |
366 m = scmutil.match(ctx, pats, opts, badfn=bad) |
367 m = scmutil.match(ctx, pats, opts, badfn=bad) |
367 |
368 |
368 follow = not opts.get('no_follow') |
369 follow = not opts.get('no_follow') |
369 diffopts = patch.difffeatureopts(ui, opts, section='annotate', |
370 diffopts = patch.difffeatureopts(ui, opts, section='annotate', |
370 whitespace=True) |
371 whitespace=True) |
|
372 skiprevs = opts.get('skip') |
|
373 if skiprevs: |
|
374 skiprevs = scmutil.revrange(repo, skiprevs) |
|
375 |
371 for abs in ctx.walk(m): |
376 for abs in ctx.walk(m): |
372 fctx = ctx[abs] |
377 fctx = ctx[abs] |
373 if not opts.get('text') and fctx.isbinary(): |
378 if not opts.get('text') and fctx.isbinary(): |
374 fm.plain(_("%s: binary file\n") % ((pats and m.rel(abs)) or abs)) |
379 fm.plain(_("%s: binary file\n") % ((pats and m.rel(abs)) or abs)) |
375 continue |
380 continue |
376 |
381 |
377 lines = fctx.annotate(follow=follow, linenumber=linenumber, |
382 lines = fctx.annotate(follow=follow, linenumber=linenumber, |
378 diffopts=diffopts) |
383 skiprevs=skiprevs, diffopts=diffopts) |
379 if not lines: |
384 if not lines: |
380 continue |
385 continue |
381 formats = [] |
386 formats = [] |
382 pieces = [] |
387 pieces = [] |
383 |
388 |