##// 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 19 match as matchmod,
20 20 node,
21 21 obsolete as obsmod,
22 obsutil,
22 23 pathutil,
23 24 phases,
24 25 registrar,
@@ -1826,6 +1827,28 b' def subrepo(repo, subset, x):'
1826 1827
1827 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 1852 def _substringmatcher(pattern, casesensitive=True):
1830 1853 kind, pattern, matcher = util.stringmatcher(pattern,
1831 1854 casesensitive=casesensitive)
@@ -20,6 +20,7 b''
20 20 > EOF
21 21 $ cat >> $HGRCPATH << EOF
22 22 > [extensions]
23 > drawdag=$TESTDIR/drawdag.py
23 24 > testrevset=$TESTTMP/testrevset.py
24 25 > EOF
25 26
@@ -4283,3 +4284,56 b' Test repo.anyrevs with customized revset'
4283 4284 P=[3]
4284 4285
4285 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