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