comparison tests/test-revset.t @ 33377:5d63e5f40bea

revset: define successors revset This revset returns all successors, including transit nodes and the source nodes (to be consistent with existing revsets like "ancestors"). To filter out transit nodes, use `successors(X)-obsolete()`. To filter out divergent case, use `successors(X)-divergent()-obsolete()`. The revset could be useful to define rebase destination, like: `max(successors(BASE)-divergent()-obsolete())`. The `max` is to deal with splits. There are other implementations where `successors` returns just one level of successors, and `allsuccessors` returns everything. I think `successors` returning all successors by default is more user friendly. We have seen cases in production where people use 1-level `successors` while they really want `allsuccessors`. So it seems better to just have one single revset returning all successors by default to avoid user errors. In the future we might want to add `depth` keyword argument to it and for other revsets like `ancestors` etc. Or even build some flexible indexing syntax [1] to satisfy people having the depth limit requirement. [1]: https://www.mercurial-scm.org/pipermail/mercurial-devel/2017-July/101140.html
author Jun Wu <quark@fb.com>
date Mon, 10 Jul 2017 10:56:40 -0700
parents 4672db164c98
children 9467d5337292
comparison
equal deleted inserted replaced
33376:d5a38eae67e5 33377:5d63e5f40bea
18 > 18 >
19 > mercurial.revset.symbols['r3232'] = r3232 19 > mercurial.revset.symbols['r3232'] = r3232
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
26 $ try() { 27 $ try() {
27 > hg debugrevspec --debug "$@" 28 > hg debugrevspec --debug "$@"
4281 P=[1] 4282 P=[1]
4282 $ P=3 hg --config revsetalias.P=2 log -r . -T '\n' 4283 $ P=3 hg --config revsetalias.P=2 log -r . -T '\n'
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