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.
This commit is contained in:
Yuya Nishihara 2016-08-19 18:40:35 +09:00
parent b42457ae0a
commit e6297851af
2 changed files with 8 additions and 4 deletions

View File

@ -23,6 +23,7 @@ from .node import (
short,
wdirid,
wdirnodes,
wdirrev,
)
from . import (
encoding,
@ -471,7 +472,7 @@ class changectx(basectx):
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)

View File

@ -20,7 +20,6 @@ from .node import (
hex,
nullid,
short,
wdirrev,
)
from . import (
bookmarks,
@ -564,13 +563,17 @@ class localrepository(object):
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