stack: add a 'stack()' revset
We give access to the list of relevant commit with a revset. Benefits over
'topic(.)' are the filtering of obsolete changeset and the reordering (to
topological as-in unstability were resolved).
--- a/hgext3rd/topic/revset.py Mon Mar 14 23:37:58 2016 +0000
+++ b/hgext3rd/topic/revset.py Thu Mar 17 09:13:12 2016 -0700
@@ -1,7 +1,7 @@
from mercurial import revset
from mercurial import util
-from . import constants, destination
+from . import constants, destination, stack
try:
mkmatcher = revset._stringmatcher
@@ -45,6 +45,22 @@
branch = repo['.'].branch()
return subset & destination.ngtip(repo, branch)
+def stackset(repo, subset, x):
+ """`stack()`
+ All relevant changes in the current topic,
+
+ This is roughly equivalent to 'topic(.) - obsolete' with a sorting moving
+ unstable changeset after there future parent (as if evolve where already
+ run)."""
+ topic = repo.currenttopic
+ if not topic:
+ raise error.Abort(_('no active topic to list'))
+ # ordering hack, boo
+ return revset.baseset(stack.getstack(repo, topic)) & subset
+
+
+
def modsetup():
revset.symbols.update({'topic': topicset})
revset.symbols.update({'ngtip': ngtipset})
+ revset.symbols.update({'stack': stackset})
--- a/tests/test-topic-stack.t Mon Mar 14 23:37:58 2016 +0000
+++ b/tests/test-topic-stack.t Thu Mar 17 09:13:12 2016 -0700
@@ -111,6 +111,14 @@
t2$ c_e (unstable)
t3$ c_f (unstable)
+Also test the revset:
+
+ $ hg log -r 'stack()'
+ 2 default {foo} draft c_c
+ 7 default {foo} draft c_d
+ 4 default {foo} draft c_e
+ 5 default {foo} draft c_f
+
Case with multiple heads on the topic
-------------------------------------