diff --git a/mercurial/revset.py b/mercurial/revset.py --- a/mercurial/revset.py +++ b/mercurial/revset.py @@ -1351,6 +1351,8 @@ def rev(repo, subset, x): except (TypeError, ValueError): # i18n: "rev" is a keyword raise error.ParseError(_("rev expects a number")) + if l not in repo.changelog: + return baseset() return subset & baseset([l]) def matching(repo, subset, x): diff --git a/tests/test-obsolete.t b/tests/test-obsolete.t --- a/tests/test-obsolete.t +++ b/tests/test-obsolete.t @@ -185,6 +185,8 @@ check that various commands work well wi abort: hidden revision '4'! (use --hidden to access hidden revisions) [255] + $ hg debugrevspec 'rev(6)' + $ hg debugrevspec 'rev(4)' Check that public changeset are not accounted as obsolete: diff --git a/tests/test-revset.t b/tests/test-revset.t --- a/tests/test-revset.t +++ b/tests/test-revset.t @@ -437,6 +437,18 @@ Test empty set input 4 8 9 + +Test explicit numeric revision + $ log 'rev(-1)' + $ log 'rev(0)' + 0 + $ log 'rev(9)' + 9 + $ log 'rev(10)' + $ log 'rev(tip)' + hg: parse error: rev expects a number + [255] + $ log 'outgoing()' 8 9