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