[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