localrepo: extend "changeid in repo" to return True for workingctx revision
This is necessary to implement "wc" symbol for workingctx, that will be used
as follows:
$ hg annotate -r wc FILE
In principle, "rev in repo" should be True if "repo[rev]" can return a context
object. But when it was implemented by
ea3acaae25bb, lookup() had a long logic
to map all sorts of changeids to nodes, and "None in repo" did crash because
lookup() could not accept None. So I assume that the case of changeid=None was
not considered.
Now "None in repo" doesn't crash, it should be True for workingctx revision.
Behavior of "changeid in repo":
revision "null" existing rev None (workingctx)
---------- ------ ------------ -----------------
original* True True TypeError
current True True False
this patch True True True
(*original:
ea3acaae25bb)
--- a/mercurial/localrepo.py Mon Mar 16 13:41:45 2015 -0500
+++ b/mercurial/localrepo.py Sun Aug 17 11:35:31 2014 +0900
@@ -465,7 +465,8 @@
def __contains__(self, changeid):
try:
- return bool(self.lookup(changeid))
+ self[changeid]
+ return True
except error.RepoLookupError:
return False