Mercurial > hg
changeset 49511:117dcc4a0e67
revset: handle wdir() in `sort(..., -topo)`
The last apparent usage of `repo.changelog.parentrevs` in revsets is in
`children()`, but since the sets being operated on never include wdir(), it's
never called with `wdirrev` and the wdir() arg on the command line is
effectively ignored instead of aborting there. I'm not sure how to fix that.
Before (on a clone of hg):
$ python3.8 hg perf::revset --config extensions.perf=contrib/perf.py 'sort(all(), -topo)'
! wall 0.123663 comb 0.130000 user 0.130000 sys 0.000000 (best of 76)
After:
$ python3.8 hg perf::revset --config extensions.perf=contrib/perf.py 'sort(all(), -topo)'
! wall 0.123838 comb 0.130000 user 0.130000 sys 0.000000 (best of 75)
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Tue, 04 Oct 2022 12:34:50 -0400 |
parents | e02dcc625171 |
children | 6939d5ed20e0 |
files | mercurial/revset.py tests/test-revset2.t |
diffstat | 2 files changed, 24 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/revset.py Mon Oct 03 17:24:52 2022 -0400 +++ b/mercurial/revset.py Tue Oct 04 12:34:50 2022 -0400 @@ -2474,10 +2474,20 @@ return revs elif keyflags[0][0] == b"topo": firstbranch = () + parentrevs = repo.changelog.parentrevs + parentsfunc = parentrevs + if wdirrev in revs: + + def parentsfunc(r): + try: + return parentrevs(r) + except error.WdirUnsupported: + return [p.rev() for p in repo[None].parents()] + if b'topo.firstbranch' in opts: firstbranch = getset(repo, subset, opts[b'topo.firstbranch']) revs = baseset( - dagop.toposort(revs, repo.changelog.parentrevs, firstbranch), + dagop.toposort(revs, parentsfunc, firstbranch), istopo=True, ) if keyflags[0][1]:
--- a/tests/test-revset2.t Mon Oct 03 17:24:52 2022 -0400 +++ b/tests/test-revset2.t Tue Oct 04 12:34:50 2022 -0400 @@ -1487,6 +1487,13 @@ -1 $ log 'roots(wdir())' 2147483647 + $ log 'sort(., -topo)' + -1 + $ log 'sort(. or wdir(), -topo)' + -1 + 2147483647 + $ log 'sort(wdir(), -topo)' + 2147483647 $ echo default0 >> a $ hg ci -Aqm0 @@ -1509,6 +1516,12 @@ 5 $ log 'roots(wdir())' 2147483647 + $ log 'sort(. or wdir() or .^, -topo)' + 4 + 5 + 2147483647 + $ log 'sort(wdir(), -topo)' + 2147483647 "null" revision belongs to "default" branch (issue4683)