topic: make revsets like 'foo#topic[0]' work
authorAnton Shestakov <av6@dwimlabs.net>
Wed, 26 Dec 2018 14:52:07 +0800
changeset 4339 0f015fe4f71f
parent 4338 e2350851740a
child 4340 5300be965515
topic: make revsets like 'foo#topic[0]' work Essentially, 'topic' relation subscript function is the same as 'generations', but is limited to revisions marked with one particular topic.
CHANGELOG
hgext3rd/topic/revset.py
tests/test-topic.t
--- a/CHANGELOG	Thu Jan 10 17:30:01 2019 +0100
+++ b/CHANGELOG	Wed Dec 26 14:52:07 2018 +0800
@@ -17,6 +17,7 @@
   * stack: introduce a --children flag (see help for details)
   * topic: make --age compatible with the usual other display for `hg topic`
   * stack: support for '#stack[idx]' absolute indexing in revset (4.9+ only)
+  * topic: support for '#topic[idx]' relative indexing in revset (4.9+ only)
 
 8.3.3 -- 2017-12-24
 -------------------
--- a/hgext3rd/topic/revset.py	Thu Jan 10 17:30:01 2019 +0100
+++ b/hgext3rd/topic/revset.py	Wed Dec 26 14:52:07 2018 +0800
@@ -142,3 +142,16 @@
 
     revset.subscriptrelations['stack'] = stackrel
     revset.subscriptrelations['s'] = stackrel
+
+    def topicrel(repo, subset, x, rel, n, order):
+        ancestors = revset._ancestors
+        descendants = revset._descendants
+        subset = topicset(repo, subset, x)
+        if n <= 0:
+            n = -n
+            return ancestors(repo, subset, x, startdepth=n, stopdepth=n + 1)
+        else:
+            return descendants(repo, subset, x, startdepth=n, stopdepth=n + 1)
+
+    revset.subscriptrelations['topic'] = topicrel
+    revset.subscriptrelations['t'] = topicrel
--- a/tests/test-topic.t	Thu Jan 10 17:30:01 2019 +0100
+++ b/tests/test-topic.t	Wed Dec 26 14:52:07 2018 +0800
@@ -823,8 +823,8 @@
 
   $ cd ..
 
-Stack relation subscript in revsets
-===================================
+Relation subscript in revsets
+=============================
 
   $ hg init more-than-one-commit-per-topic
   $ cd more-than-one-commit-per-topic
@@ -854,6 +854,24 @@
   3: featureA
   4: 
 
+topic subscript relation
+
+  $ tlog 'featureA'
+  3: featureA
+  $ tlog 'featureA#topic[0]'
+  3: featureA
+
+  $ tlog '2#t[-2]'
+  $ tlog '2#t[-1]'
+  1: featureA
+  $ tlog '2#t[0]'
+  2: featureA
+  $ tlog '2#t[1]'
+  3: featureA
+  $ tlog '2#t[2]'
+
+stack subscript relation
+
   $ hg stack
   ### target: default (branch)
   s2@ 4 (current)