Mercurial > hg
changeset 24204:d2de20e1451f
revset: extend fullreposet to make "null" revision magically appears in set
As per fullreposet.__and__, it can omit the range check of rev. Therefore,
"null" revision is accepted automagically.
It seems this can fix many query results involving null symbol. Originally,
the simplest "(null)" query did fail if there were hidden revisions. Tests
are randomly chosen.
fullreposet mimics the behavior of localrepo, where "null" revision is not
listed but contained.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Thu, 08 Jan 2015 23:05:45 +0900 |
parents | 33c7a94d4dd0 |
children | abcb1ee3b20a |
files | mercurial/revset.py tests/test-obsolete.t tests/test-revset.t |
diffstat | 3 files changed, 31 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/revset.py Sat Jan 10 18:09:25 2015 +0900 +++ b/mercurial/revset.py Thu Jan 08 23:05:45 2015 +0900 @@ -323,8 +323,6 @@ def stringset(repo, subset, x): x = repo[x].rev() - if x == -1 and len(subset) == len(repo): - return baseset([-1]) if x in subset: return baseset([x]) return baseset() @@ -3312,16 +3310,17 @@ class fullreposet(spanset): """a set containing all revisions in the repo - This class exists to host special optimization. + This class exists to host special optimization and magic to handle virtual + revisions such as "null". """ def __init__(self, repo): super(fullreposet, self).__init__(repo) def __contains__(self, rev): + # assumes the given rev is valid hidden = self._hiddenrevs - return ((self._start <= rev < self._end) - and not (hidden and rev in hidden)) + return not (hidden and rev in hidden) def __and__(self, other): """As self contains the whole repo, all of the other set should also be
--- a/tests/test-obsolete.t Sat Jan 10 18:09:25 2015 +0900 +++ b/tests/test-obsolete.t Thu Jan 08 23:05:45 2015 +0900 @@ -187,6 +187,8 @@ [255] $ hg debugrevspec 'rev(6)' $ hg debugrevspec 'rev(4)' + $ hg debugrevspec 'null' + -1 Check that public changeset are not accounted as obsolete:
--- a/tests/test-revset.t Sat Jan 10 18:09:25 2015 +0900 +++ b/tests/test-revset.t Thu Jan 08 23:05:45 2015 +0900 @@ -478,8 +478,33 @@ [255] Test null revision + $ log '(null)' + -1 + $ log '(null:0)' + -1 + 0 + $ log '(0:null)' + 0 + -1 + $ log 'null::0' + -1 + 0 + $ log 'null:tip - 0:' + -1 + $ log 'null: and null::' | head -1 + -1 + $ log 'null: or 0:' | head -2 + -1 + 0 $ log 'ancestors(null)' -1 + $ log 'reverse(null:)' | tail -2 + 0 + -1 + $ log 'first(null:)' + -1 + $ log 'min(null:)' + -1 $ log 'tip:null and all()' | tail -2 1 0