diff --git a/mercurial/revset.py b/mercurial/revset.py --- a/mercurial/revset.py +++ b/mercurial/revset.py @@ -2108,7 +2108,8 @@ def _rev(repo, subset, x): except (TypeError, ValueError): # i18n: "rev" is a keyword raise error.ParseError(_(b"rev expects a number")) - repo.changelog.node(l) # check that the rev exists + if l not in _virtualrevs: + repo.changelog.node(l) # check that the rev exists return subset & baseset([l]) diff --git a/tests/test-template-functions.t b/tests/test-template-functions.t --- a/tests/test-template-functions.t +++ b/tests/test-template-functions.t @@ -1263,6 +1263,13 @@ default. join() should agree with the de 5:13207e5a10d9fd28ec424934298e176197f2c67f, 4:bbe44766e73d5f11ed2177f1838de10c53ef3e74 +%d parameter handling: + + $ hg log -T '{revset("%d", rev)}\n' -r'wdir()' + 2147483647 + $ hg log -T '{revset("%d", rev)}\n' -r'null' + -1 + Invalid arguments passed to revset() $ hg log -T '{revset("%whatever", 0)}\n'