reachableroots will only return a subset of roots when includepath is
False. For example, given the following linear DAG:
2 | 1 | 0
Using roots=0+2, heads=1, the definition in the docstring does not match what
reachableroots actually does:
ipdb> repo.changelog.reachableroots(0, roots=[0,2],heads=[1]) [0] ipdb> repo.revs('heads(::(0+2) & (0+2)::1)') <baseset+ [1]>
The fix is to do heads & ::roots (or heads & heads::roots) first, then
select their ancestors:
ipdb> repo.revs('heads(::((0+2) & (0+2)::1))') <baseset+ [0]>
The docstring was introduced by fd92bfbbe02d9 (2015-06-19 "revset: rename
revsbetween to reachableroots and add an argument"), which introduced the
includepath=False behavior for graphlog grandparents use-case. I believe
the docstring instead of the code should be changed because changing the
code to match the docstring can result in suboptimal graphlog like:
o :\ : o : : :/ o
As opposite to the current "linearized" graphlog:
o | o : o