localrepo: extend "changeid in repo" to return True for workingctx revision
authorYuya Nishihara <yuya@tcha.org>
Sun, 17 Aug 2014 11:35:31 +0900
changeset 24320 b9f7f3eeb99c
parent 24319 6ff513495a8b
child 24321 0a714a1f7d5c
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)
mercurial/localrepo.py
--- 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