RFC: revset relation operator
Matt Mackall
mpm at selenic.com
Sun Oct 11 22:45:24 UTC 2015
It would be nice if we had a convenience syntax for finding things
related to a given changeset. Currently, we have a couple of these for
parents, ancestors, and descendants.
foo^ # first parent
foo^2 # second parent
foo^^ # first parent of first parent
foo~2 # same
::foo # ancestors, inclusive
foo:: # descendants, inclusize
But we have nothing directly equivalent to parents(), nor any shorthand
for children(), successors(), origin(), destination(), or any other type
of relation we may add. We'd also like a way to specify next, previous,
all, all exclusive, last, etc.
So my proposal[1] is to add a bracketed postfix (one of {}, [], or <>,
but perhaps {} is the least bad) that looks like this:
foo{1} # children(foo)
foo{2} # children(children(foo))
foo{} # defaults to 1, so children(foo)
foo{0} # synonym for foo
foo{-1} # parents(foo) (both of 'em)
foo{-} # same
foo{*} # foo:: - foo (exclusive)
foo{**} # foo:: (inclusive)
foo{-*} # ::foo - foo
foo{$} # heads(foo::) aka "the last children"
foo{-4}::foo # last five changesets in a branch
This makes a lot of our most common expressions shorter. To talk about
other types of relations, we use a suffix character:
foo{1g} # immediate grafts of foo
foo{-g} # origin for grafts
foo{o} # successor(foo)
foo{$o} # final successor of foo
Note a consistent direction in the sign used regardless of relation:
past is negative, future is positive. Operations can be chained:
foo{-}{} # foo and its siblings
foo{$o}{} # first children of final successor
We might also add a long-hand method:
related(foo, "$", "o")
This lets you build revset aliases of various sorts more conveniently
and we can transform the short expressions into this form internally.
All the bracket choices have problems:
{}: used by git very differently, might need shell quoting
[]: used differently by languages, might need shell quoting
<>: might need shell quoting, can have ugly side-effects
The little sublanguage in the brackets might present some new wrinkles
for our parser, which doesn't like most of the characters there anyway.
[1] largely inspired by one from Durham and a discussion at the last
sprint
--
Mathematics is the supreme nostalgia of our time.
More information about the Mercurial-devel
mailing list