HomePhabricator

revlog: fix revset in reachableroots docstring

Authored by quark.

Description

revlog: fix revset in reachableroots docstring

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

Differential Revision: https://phab.mercurial-scm.org/D7518

Details

Committed
quarkNov 25 2019, 2:53 PM
Differential Revision
D7518: revlog: fix revset in reachableroots docstring
Parents
rHG888bd39ed555: lock: pass "success" boolean to _afterlock callbacks
Branches
Unknown
Tags
Unknown