Mercurial > hg
diff tests/test-parseindex.t @ 26053:b68c9d232db6
reachableroots: use internal "revstates" array to test if rev is a root
The main goal of this patch series is to reduce the use of PyXxx() function
that is likely to require ugly error handling and inc/decref. Plus, this is
faster than using PySet_Contains().
revset #0: 0::tip
0) 0.004168
1) 0.003678 88%
This patch ignores out-of-range roots as they are in the pure implementation.
Because reachable sets are calculated from heads, and out-of-range heads raise
IndexError, we can just take out-of-range roots as unreachable. Otherwise,
the test of "hg log -Gr '. + wdir()'" would fail.
"heads" argument is changed to a list. Should we have to rename the C function
as its signature is changed?
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Fri, 14 Aug 2015 15:43:29 +0900 |
parents | c6115c30a376 |
children | be8a4e0800d8 |
line wrap: on
line diff
--- a/tests/test-parseindex.t Tue Aug 18 16:40:10 2015 -0400 +++ b/tests/test-parseindex.t Fri Aug 14 15:43:29 2015 +0900 @@ -69,28 +69,53 @@ $ python <<EOF > from mercurial import changelog, scmutil > cl = changelog.changelog(scmutil.vfs('.hg/store')) - > print 'goods:' + > print 'good heads:' > for head in [0, len(cl) - 1, -1]: - > print'%s: %r' % (head, cl.reachableroots(0, [head], set([0]))) - > print 'bads:' + > print'%s: %r' % (head, cl.reachableroots(0, [head], [0])) + > print 'bad heads:' > for head in [len(cl), 10000, -2, -10000, None]: > print '%s:' % head, > try: - > cl.reachableroots(0, [head], set([0])) + > cl.reachableroots(0, [head], [0]) > print 'uncaught buffer overflow?' > except (IndexError, TypeError) as inst: > print inst + > print 'good roots:' + > for root in [0, len(cl) - 1, -1]: + > print '%s: %r' % (root, cl.reachableroots(root, [len(cl) - 1], [root])) + > print 'out-of-range roots are ignored:' + > for root in [len(cl), 10000, -2, -10000]: + > print '%s: %r' % (root, cl.reachableroots(root, [len(cl) - 1], [root])) + > print 'bad roots:' + > for root in [None]: + > print '%s:' % root, + > try: + > cl.reachableroots(root, [len(cl) - 1], [root]) + > print 'uncaught error?' + > except TypeError as inst: + > print inst > EOF - goods: + good heads: 0: <baseset [0]> 1: <baseset [0]> -1: <baseset []> - bads: + bad heads: 2: head out of range 10000: head out of range -2: head out of range -10000: head out of range None: an integer is required + good roots: + 0: <baseset [0]> + 1: <baseset [1]> + -1: <baseset [-1]> + out-of-range roots are ignored: + 2: <baseset []> + 10000: <baseset []> + -2: <baseset []> + -10000: <baseset []> + bad roots: + None: an integer is required $ cd .. @@ -127,7 +152,7 @@ > n0, n1 = cl.node(0), cl.node(1) > ops = [ > ('reachableroots', - > lambda: cl.index.reachableroots(0, [1], set([0]), False)), + > lambda: cl.index.reachableroots2(0, [1], [0], False)), > ('compute_phases_map_sets', lambda: cl.computephases([[0], []])), > ('index_headrevs', lambda: cl.headrevs()), > ('find_gca_candidates', lambda: cl.commonancestorsheads(n0, n1)),