stack: add a 'stack()' revset
authorPierre-Yves David <pierre-yves.david@fb.com>
Thu, 17 Mar 2016 09:13:12 -0700
changeset 1910 24986e5a537c
parent 1909 36112e361ee4
child 1911 442a7cb8404e
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).
hgext3rd/topic/revset.py
tests/test-topic-stack.t
--- 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
 -------------------------------------