Re: [PATCH 3 of 3] revset: add a changes(file, fromline, toline[, rev]) revset
Excerpts from Yuya Nishihara's message of 2016-12-02 23:19:56 +0900: > On Fri, 2 Dec 2016 08:38:53 +0100, Denis Laxalde wrote: > > Yuya Nishihara a écrit : > > > On Mon, 28 Nov 2016 11:12:35 +0100, Denis Laxalde wrote: > > >> Denis Laxalde a écrit : > > >>> # HG changeset patch > > >>> # User Denis Laxalde> > >>> # Date 1480086890 -3600 > > >>> # Fri Nov 25 16:14:50 2016 +0100 > > >>> # Node ID e88a112076294d9b1639a486e7ef0ec9c1ffa660 > > >>> # Parent 6dd93ae7b35002531308444c87dcf47beb773648 > > >>> # EXP-Topic linerange-log/revset > > >>> revset: add a changes(file, fromline, toline[, rev]) revset > > >> > > >> This is the first step of my work (in progress) about adding a "line > > >> range" filtering for log discussed in > > >> https://www.mercurial-scm.org/pipermail/mercurial-devel/2016-October/088687.html > > >> . > > >> > > >> I would have liked to add tests for this revset but it seems to me that > > >> the current test repositories are not complex enough for this: I'd need > > >> files with significant content and changes in this content. Any idea how > > >> I could do this? > > > > > > Maybe we can share some bits with test-annotate.t ? > > > > Repositories in these are indeed more complex. So should I append tests > > in this file or reproduce similar repositories in test-revset.t? > > I *think* adding tests to test-annotate.t is okay since the behavior of > changes() revset is somewhat similar to annotate. > > Jun might have more data sets for his fastannotate extension? fastannotate basically reuses the original annotate test cases for the core algorithm, and with some additional tests about extra features like wireprotocol, --deleted etc. Because fastannotate works differently from the vanilla algorithm: it tracks '!' blocks instead of '=' blocks and it deals with p1 and p2 differently, the output is slightly different: bitbucket.org/facebook/hg-experimental/src/27a94a/tests/test-fastannotate-hg.t?#test-fastannotate-hg.t-229 bitbucket.org/facebook/hg-experimental/src/27a94a/tests/test-fastannotate-hg.t?#test-fastannotate-hg.t-324 With the recent bdiff change, fastannotate became more different from the vanilla annotate: https://bitbucket.org/facebook/hg-experimental/commits/11c9b13fc1ef778c5636ac04e3812a06c0e4a08f ___ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
Re: [PATCH 3 of 3] revset: add a changes(file, fromline, toline[, rev]) revset
Yuya Nishihara a écrit : On Mon, 28 Nov 2016 11:12:35 +0100, Denis Laxalde wrote: Denis Laxalde a écrit : # HG changeset patch # User Denis Laxalde# Date 1480086890 -3600 # Fri Nov 25 16:14:50 2016 +0100 # Node ID e88a112076294d9b1639a486e7ef0ec9c1ffa660 # Parent 6dd93ae7b35002531308444c87dcf47beb773648 # EXP-Topic linerange-log/revset revset: add a changes(file, fromline, toline[, rev]) revset This is the first step of my work (in progress) about adding a "line range" filtering for log discussed in https://www.mercurial-scm.org/pipermail/mercurial-devel/2016-October/088687.html. I would have liked to add tests for this revset but it seems to me that the current test repositories are not complex enough for this: I'd need files with significant content and changes in this content. Any idea how I could do this? Maybe we can share some bits with test-annotate.t ? Repositories in these are indeed more complex. So should I append tests in this file or reproduce similar repositories in test-revset.t? ___ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
Re: [PATCH 3 of 3] revset: add a changes(file, fromline, toline[, rev]) revset
On Mon, 28 Nov 2016 11:12:35 +0100, Denis Laxalde wrote: > Denis Laxalde a écrit : > > # HG changeset patch > > # User Denis Laxalde> > # Date 1480086890 -3600 > > # Fri Nov 25 16:14:50 2016 +0100 > > # Node ID e88a112076294d9b1639a486e7ef0ec9c1ffa660 > > # Parent 6dd93ae7b35002531308444c87dcf47beb773648 > > # EXP-Topic linerange-log/revset > > revset: add a changes(file, fromline, toline[, rev]) revset > > This is the first step of my work (in progress) about adding a "line > range" filtering for log discussed in > https://www.mercurial-scm.org/pipermail/mercurial-devel/2016-October/088687.html. > > I would have liked to add tests for this revset but it seems to me that > the current test repositories are not complex enough for this: I'd need > files with significant content and changes in this content. Any idea how > I could do this? Maybe we can share some bits with test-annotate.t ? ___ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
Re: [PATCH 3 of 3] revset: add a changes(file, fromline, toline[, rev]) revset
Denis Laxalde a écrit : # HG changeset patch # User Denis Laxalde# Date 1480086890 -3600 # Fri Nov 25 16:14:50 2016 +0100 # Node ID e88a112076294d9b1639a486e7ef0ec9c1ffa660 # Parent 6dd93ae7b35002531308444c87dcf47beb773648 # EXP-Topic linerange-log/revset revset: add a changes(file, fromline, toline[, rev]) revset This is the first step of my work (in progress) about adding a "line range" filtering for log discussed in https://www.mercurial-scm.org/pipermail/mercurial-devel/2016-October/088687.html. I would have liked to add tests for this revset but it seems to me that the current test repositories are not complex enough for this: I'd need files with significant content and changes in this content. Any idea how I could do this? ___ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
[PATCH 3 of 3] revset: add a changes(file, fromline, toline[, rev]) revset
# HG changeset patch # User Denis Laxalde# Date 1480086890 -3600 # Fri Nov 25 16:14:50 2016 +0100 # Node ID e88a112076294d9b1639a486e7ef0ec9c1ffa660 # Parent 6dd93ae7b35002531308444c87dcf47beb773648 # EXP-Topic linerange-log/revset revset: add a changes(file, fromline, toline[, rev]) revset This relies on `filectx.blocksancetors(fromline, toline)`. diff --git a/mercurial/revset.py b/mercurial/revset.py --- a/mercurial/revset.py +++ b/mercurial/revset.py @@ -18,6 +18,7 @@ from . import ( error, hbisect, match as matchmod, +mdiff, node, obsolete as obsmod, parser, @@ -1350,6 +1351,34 @@ def modifies(repo, subset, x): pat = getstring(x, _("modifies requires a pattern")) return checkstatus(repo, subset, pat, 0) +@predicate('changes(file, fromline, toline, rev)', safe=True) +def changes(repo, subset, x): +"""Changesets modifying 'file' in line range ('fromline', 'toline'). + +Line range corresponds to 'file' content at 'rev'. If rev is not +specified, working directory's parent is used. +""" +args = map(getsymbol, + getargs(x, 3, 4, _('changes takes at least three arguments'))) +fname = args[0] + +try: +fromline, toline = map(int, args[1:3]) +except ValueError: +raise error.ParseError(_('line range bounds must be integers')) +if toline - fromline < 0: +raise error.Abort("line range must be positive") +if fromline < 1: +raise error.Abort("fromline must be > 0") +fromline -= 1 + +rev = '.' +if len(args) == 4: +rev = args[3] +fctx = repo[rev].filectx(fname) +revs = (c.rev() for c in fctx.blockancestors(fromline, toline)) +return subset & generatorset(revs, iterasc=False) + @predicate('named(namespace)') def named(repo, subset, x): """The changesets in a given namespace. ___ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel