##// END OF EJS Templates
revset: define successors revset...
Jun Wu -
r33377:5d63e5f4 default
parent child Browse files
Show More
@@ -19,6 +19,7 b' from . import ('
19 match as matchmod,
19 match as matchmod,
20 node,
20 node,
21 obsolete as obsmod,
21 obsolete as obsmod,
22 obsutil,
22 pathutil,
23 pathutil,
23 phases,
24 phases,
24 registrar,
25 registrar,
@@ -1826,6 +1827,28 b' def subrepo(repo, subset, x):'
1826
1827
1827 return subset.filter(matches, condrepr=('<subrepo %r>', pat))
1828 return subset.filter(matches, condrepr=('<subrepo %r>', pat))
1828
1829
1830 def _mapbynodefunc(repo, s, f):
1831 """(repo, smartset, [node] -> [node]) -> smartset
1832
1833 Helper method to map a smartset to another smartset given a function only
1834 talking about nodes. Handles converting between rev numbers and nodes, and
1835 filtering.
1836 """
1837 cl = repo.unfiltered().changelog
1838 torev = cl.rev
1839 tonode = cl.node
1840 nodemap = cl.nodemap
1841 result = set(torev(n) for n in f(tonode(r) for r in s) if n in nodemap)
1842 return smartset.baseset(result - repo.changelog.filteredrevs)
1843
1844 @predicate('successors(set)', safe=True)
1845 def successors(repo, subset, x):
1846 """All successors for set, including the given set themselves"""
1847 s = getset(repo, fullreposet(repo), x)
1848 f = lambda nodes: obsutil.allsuccessors(repo.obsstore, nodes)
1849 d = _mapbynodefunc(repo, s, f)
1850 return subset & d
1851
1829 def _substringmatcher(pattern, casesensitive=True):
1852 def _substringmatcher(pattern, casesensitive=True):
1830 kind, pattern, matcher = util.stringmatcher(pattern,
1853 kind, pattern, matcher = util.stringmatcher(pattern,
1831 casesensitive=casesensitive)
1854 casesensitive=casesensitive)
@@ -20,6 +20,7 b''
20 > EOF
20 > EOF
21 $ cat >> $HGRCPATH << EOF
21 $ cat >> $HGRCPATH << EOF
22 > [extensions]
22 > [extensions]
23 > drawdag=$TESTDIR/drawdag.py
23 > testrevset=$TESTTMP/testrevset.py
24 > testrevset=$TESTTMP/testrevset.py
24 > EOF
25 > EOF
25
26
@@ -4283,3 +4284,56 b' Test repo.anyrevs with customized revset'
4283 P=[3]
4284 P=[3]
4284
4285
4285 $ cd ..
4286 $ cd ..
4287
4288 Test obsstore related revsets
4289
4290 $ hg init repo1
4291 $ cd repo1
4292 $ cat <<EOF >> .hg/hgrc
4293 > [experimental]
4294 > evolution = createmarkers
4295 > EOF
4296
4297 $ hg debugdrawdag <<'EOS'
4298 > F G
4299 > |/ # split: B -> E, F
4300 > B C D E # amend: B -> C -> D
4301 > \|/ | # amend: F -> G
4302 > A A Z # amend: A -> Z
4303 > EOS
4304
4305 $ hg log -r 'successors(Z)' -T '{desc}\n'
4306 Z
4307
4308 $ hg log -r 'successors(F)' -T '{desc}\n'
4309 F
4310 G
4311
4312 $ hg tag --remove --local C D E F G
4313
4314 $ hg log -r 'successors(B)' -T '{desc}\n'
4315 B
4316 D
4317 E
4318 G
4319
4320 $ hg log -r 'successors(B)' -T '{desc}\n' --hidden
4321 B
4322 C
4323 D
4324 E
4325 F
4326 G
4327
4328 $ hg log -r 'successors(B)-obsolete()' -T '{desc}\n' --hidden
4329 D
4330 E
4331 G
4332
4333 $ hg log -r 'successors(B+A)-divergent()' -T '{desc}\n'
4334 A
4335 Z
4336 B
4337
4338 $ hg log -r 'successors(B+A)-divergent()-obsolete()' -T '{desc}\n'
4339 Z
General Comments 0
You need to be logged in to leave comments. Login now