diff --git a/mercurial/revset.py b/mercurial/revset.py --- a/mercurial/revset.py +++ b/mercurial/revset.py @@ -2474,10 +2474,20 @@ def sort(repo, subset, x, order): 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]: diff --git a/tests/test-revset2.t b/tests/test-revset2.t --- a/tests/test-revset2.t +++ b/tests/test-revset2.t @@ -1487,6 +1487,13 @@ prepare repository that has "default" br -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 @@ prepare repository that has "default" br 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)