[PATCH 1 of 4 RFC V2] localrepo: extend "changeid in repo" to return True for workingctx revision
Yuya Nishihara
yuya at tcha.org
Mon Mar 16 14:04:30 UTC 2015
# HG changeset patch
# User Yuya Nishihara <yuya at tcha.org>
# Date 1408242931 -32400
# Sun Aug 17 11:35:31 2014 +0900
# Node ID 193f5a309da2beea925fd22a6e039bb2dcee7a81
# Parent 15afda349b11b531edd1ea6ec02847e01fe35615
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)
diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py
--- a/mercurial/localrepo.py
+++ b/mercurial/localrepo.py
@@ -465,7 +465,8 @@ class localrepository(object):
def __contains__(self, changeid):
try:
- return bool(self.lookup(changeid))
+ self[changeid]
+ return True
except error.RepoLookupError:
return False
More information about the Mercurial-devel
mailing list