[PATCH 4 of 4 hyperblame] annotate: add a new experimental --skip option to skip revs

Martin von Zweigbergk martinvonz at google.com
Mon May 29 01:40:47 EDT 2017


On Wed, May 24, 2017 at 7:39 PM, Siddharth Agarwal <sid0 at fb.com> wrote:
> # HG changeset patch
> # User Siddharth Agarwal <sid0 at fb.com>
> # Date 1495679973 25200
> #      Wed May 24 19:39:33 2017 -0700
> # Node ID 0c6f6c4b027191c30d867fb4eb0005682ea90a76
> # Parent  134dcc1222e4b992b4a60c44c9b9ed8d10422632
> annotate: add a new experimental --skip option to skip revs
>
> This option is most useful for mechanical code modifications, especially ones
> that retain the same number of lines.
>
> diff --git a/mercurial/commands.py b/mercurial/commands.py
> --- a/mercurial/commands.py
> +++ b/mercurial/commands.py
> @@ -262,7 +262,8 @@ def addremove(ui, repo, *pats, **opts):
>      ('d', 'date', None, _('list the date (short with -q)')),
>      ('n', 'number', None, _('list the revision number (default)')),
>      ('c', 'changeset', None, _('list the changeset')),
> -    ('l', 'line-number', None, _('show line number at the first appearance'))
> +    ('l', 'line-number', None, _('show line number at the first appearance')),
> +    ('', 'skip', [], _('revision to not display (EXPERIMENTAL)'), _('REV')),
>      ] + diffwsopts + walkopts + formatteropts,
>      _('[-r REV] [-f] [-a] [-u] [-d] [-n] [-c] [-l] FILE...'),
>      inferrepo=True)
> @@ -368,6 +369,10 @@ def annotate(ui, repo, *pats, **opts):
>      follow = not opts.get('no_follow')
>      diffopts = patch.difffeatureopts(ui, opts, section='annotate',
>                                       whitespace=True)
> +    skiprevs = opts.get('skip')
> +    if skiprevs:
> +        skiprevs = scmutil.revrange(repo, skiprevs)
> +
>      for abs in ctx.walk(m):
>          fctx = ctx[abs]
>          if not opts.get('text') and fctx.isbinary():
> @@ -375,7 +380,7 @@ def annotate(ui, repo, *pats, **opts):
>              continue
>
>          lines = fctx.annotate(follow=follow, linenumber=linenumber,
> -                              diffopts=diffopts)
> +                              skiprevs=skiprevs, diffopts=diffopts)
>          if not lines:
>              continue
>          formats = []
> diff --git a/mercurial/context.py b/mercurial/context.py
> --- a/mercurial/context.py
> +++ b/mercurial/context.py
> @@ -949,7 +949,8 @@ class basefilectx(object):
>              return p[1]
>          return filectx(self._repo, self._path, fileid=-1, filelog=self._filelog)
>
> -    def annotate(self, follow=False, linenumber=False, diffopts=None):
> +    def annotate(self, follow=False, linenumber=False, skiprevs=None,
> +                 diffopts=None):
>          '''returns a list of tuples of ((ctx, number), line) for each line
>          in the file, where ctx is the filectx of the node where
>          that line was last changed; if linenumber parameter is true, number is
> @@ -1044,7 +1045,10 @@ class basefilectx(object):
>              if ready:
>                  visit.pop()
>                  curr = decorate(f.data(), f)
> -                curr = _annotatepair([hist[p] for p in pl], f, curr, False,
> +                skipchild = False
> +                if skiprevs is not None:
> +                    skipchild = f._changeid in skiprevs
> +                curr = _annotatepair([hist[p] for p in pl], f, curr, skipchild,
>                                       diffopts)
>                  for p in pl:
>                      if needed[p] == 1:
> diff --git a/tests/test-annotate.t b/tests/test-annotate.t
> --- a/tests/test-annotate.t
> +++ b/tests/test-annotate.t
> @@ -217,6 +217,77 @@ annotate after rename merge with -l
>    3 b:5: b5
>    7 b:7: d
>
> +--skip nothing (should be the same as no --skip at all)
> +
> +  $ hg annotate -nlf b --skip '1::0'
> +  0 a:1: a
> +  6 b:2: z
> +  1 a:3: a
> +  3 b:4: b4
> +  4 b:5: c
> +  3 b:5: b5
> +  7 b:7: d
> +
> +--skip a modified line
> +
> +  $ hg annotate -nlf b --skip 6
> +  0 a:1: a
> +  1 a:2: z
> +  1 a:3: a
> +  3 b:4: b4
> +  4 b:5: c
> +  3 b:5: b5
> +  7 b:7: d

This fails with --pure as follows. I haven't even tried to figure it out.

@@ -232,7 +232,7 @@

   $ hg annotate -nlf b --skip 6
   0 a:1: a
-  1 a:2: z
+  0 a:1: z
   1 a:3: a
   3 b:4: b4
   4 b:5: c

> +
> +--skip added lines (and test multiple skip)
> +
> +  $ hg annotate -nlf b --skip 3
> +  0 a:1: a
> +  6 b:2: z
> +  1 a:3: a
> +  1 a:3: b4
> +  4 b:5: c
> +  1 a:3: b5
> +  7 b:7: d
> +
> +  $ hg annotate -nlf b --skip 4
> +  0 a:1: a
> +  6 b:2: z
> +  1 a:3: a
> +  3 b:4: b4
> +  1 a:3: c
> +  3 b:5: b5
> +  7 b:7: d
> +
> +  $ hg annotate -nlf b --skip 3 --skip 4
> +  0 a:1: a
> +  6 b:2: z
> +  1 a:3: a
> +  1 a:3: b4
> +  1 a:3: c
> +  1 a:3: b5
> +  7 b:7: d
> +
> +  $ hg annotate -nlf b --skip 'merge()'
> +  0 a:1: a
> +  6 b:2: z
> +  1 a:3: a
> +  3 b:4: b4
> +  4 b:5: c
> +  3 b:5: b5
> +  3 b:5: d
> +
> +--skip everything -- use the revision the file was introduced in
> +
> +  $ hg annotate -nlf b --skip 'all()'
> +  0 a:1: a
> +  0 a:1: z
> +  0 a:1: a
> +  0 a:1: b4
> +  0 a:1: c
> +  0 a:1: b5
> +  0 a:1: d
> +
>  Issue2807: alignment of line numbers with -l
>
>    $ echo more >> b
> diff --git a/tests/test-completion.t b/tests/test-completion.t
> --- a/tests/test-completion.t
> +++ b/tests/test-completion.t
> @@ -217,7 +217,7 @@ Show an error if we use --options with a
>  Show all commands + options
>    $ hg debugcommands
>    add: include, exclude, subrepos, dry-run
> -  annotate: rev, follow, no-follow, text, user, file, date, number, changeset, line-number, ignore-all-space, ignore-space-change, ignore-blank-lines, include, exclude, template
> +  annotate: rev, follow, no-follow, text, user, file, date, number, changeset, line-number, skip, ignore-all-space, ignore-space-change, ignore-blank-lines, include, exclude, template
>    clone: noupdate, updaterev, rev, branch, pull, uncompressed, ssh, remotecmd, insecure
>    commit: addremove, close-branch, amend, secret, edit, interactive, include, exclude, message, logfile, date, user, subrepos
>    diff: rev, change, text, git, binary, nodates, noprefix, show-function, reverse, ignore-all-space, ignore-space-change, ignore-blank-lines, unified, stat, root, include, exclude, subrepos
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at mercurial-scm.org
> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel


More information about the Mercurial-devel mailing list