localrepo: map integer and hex wdir identifiers to workingctx
authorYuya Nishihara <yuya@tcha.org>
Fri, 19 Aug 2016 18:40:35 +0900
changeset 32660 a722c8e17363
parent 32659 7b17f9de6d3e
child 32661 a3064fe3e495
localrepo: map integer and hex wdir identifiers to workingctx changectx.__init__() is slightly modified to take str(wdirrev) as a valid integer revision (and raise WdirUnsupported exception.) Test will be added by the next patch.
mercurial/context.py
mercurial/localrepo.py
--- a/mercurial/context.py	Sat Aug 20 22:37:58 2016 +0900
+++ b/mercurial/context.py	Fri Aug 19 18:40:35 2016 +0900
@@ -23,6 +23,7 @@
     short,
     wdirid,
     wdirnodes,
+    wdirrev,
 )
 from . import (
     encoding,
@@ -471,7 +472,7 @@
                 l = len(repo.changelog)
                 if r < 0:
                     r += l
-                if r < 0 or r >= l:
+                if r < 0 or r >= l and r != wdirrev:
                     raise ValueError
                 self._rev = r
                 self._node = repo.changelog.node(r)
--- a/mercurial/localrepo.py	Sat Aug 20 22:37:58 2016 +0900
+++ b/mercurial/localrepo.py	Fri Aug 19 18:40:35 2016 +0900
@@ -20,7 +20,6 @@
     hex,
     nullid,
     short,
-    wdirrev,
 )
 from . import (
     bookmarks,
@@ -564,13 +563,17 @@
             return nullid
 
     def __getitem__(self, changeid):
-        if changeid is None or changeid == wdirrev:
+        if changeid is None:
             return context.workingctx(self)
         if isinstance(changeid, slice):
+            # wdirrev isn't contiguous so the slice shouldn't include it
             return [context.changectx(self, i)
                     for i in xrange(*changeid.indices(len(self)))
                     if i not in self.changelog.filteredrevs]
-        return context.changectx(self, changeid)
+        try:
+            return context.changectx(self, changeid)
+        except error.WdirUnsupported:
+            return context.workingctx(self)
 
     def __contains__(self, changeid):
         """True if the given changeid exists