changelog: use Rust RevlogIndex for 'tip', '__iter__', '__contains__', 'revs'

Summary:
Those methods are less fancy. Use the Rust path to avoid depending on revlog
internals.

Reviewed By: DurhamG

Differential Revision: D22519588

fbshipit-source-id: 0fede55ee04373c069ae7a6dd727f4d7208ee321
This commit is contained in:
Jun Wu 2020-07-30 19:58:13 -07:00 committed by Facebook GitHub Bot
parent 3d9f195721
commit 4061daadb0
2 changed files with 24 additions and 2 deletions

View File

@ -441,17 +441,25 @@ class changelog(revlog.revlog):
def tip(self): def tip(self):
# type: () -> bytes # type: () -> bytes
"""filtered version of revlog.tip""" """filtered version of revlog.tip"""
if self.userust("tip"):
return self.dag.all().first() or nullid
for i in range(len(self) - 1, -2, -1): for i in range(len(self) - 1, -2, -1):
# pyre-fixme[7]: Expected `bytes` but got implicit return value of `None`. # pyre-fixme[7]: Expected `bytes` but got implicit return value of `None`.
return self.node(i) return self.node(i)
def __contains__(self, rev): def __contains__(self, rev):
"""filtered version of revlog.__contains__""" """filtered version of revlog.__contains__"""
return rev is not None and 0 <= rev < len(self) if self.userust("contains"):
return rev is not None and rev in self.torevs(self.dag.all())
else:
return rev is not None and 0 <= rev < len(self)
def __iter__(self): def __iter__(self):
"""filtered version of revlog.__iter__""" """filtered version of revlog.__iter__"""
return revlog.revlog.__iter__(self) if self.userust("iter"):
return self.torevs(self.dag.all()).iterasc()
else:
return revlog.revlog.__iter__(self)
def __len__(self): def __len__(self):
if self.userust("len"): if self.userust("len"):
@ -461,6 +469,16 @@ class changelog(revlog.revlog):
def revs(self, start=0, stop=None): def revs(self, start=0, stop=None):
"""filtered version of revlog.revs""" """filtered version of revlog.revs"""
if self.userust("revs"):
allrevs = self.torevs(self.dag.all())
if stop is not None:
# exclusive -> inclusive
stop = stop - 1
revs = bindings.dag.spans.unsaferange(start, stop) & allrevs
for i in revs.iterasc():
yield i
return
for i in super(changelog, self).revs(start, stop): for i in super(changelog, self).revs(start, stop):
yield i yield i

View File

@ -306,10 +306,12 @@ coreconfigitem("experimental", "rust-commits:ancestor", default=True)
coreconfigitem("experimental", "rust-commits:ancestors", default=True) coreconfigitem("experimental", "rust-commits:ancestors", default=True)
coreconfigitem("experimental", "rust-commits:children", default=True) coreconfigitem("experimental", "rust-commits:children", default=True)
coreconfigitem("experimental", "rust-commits:commonancestorsheads", default=True) coreconfigitem("experimental", "rust-commits:commonancestorsheads", default=True)
coreconfigitem("experimental", "rust-commits:contains", default=True)
coreconfigitem("experimental", "rust-commits:descendants", default=True) coreconfigitem("experimental", "rust-commits:descendants", default=True)
coreconfigitem("experimental", "rust-commits:findcommonmissing", default=True) coreconfigitem("experimental", "rust-commits:findcommonmissing", default=True)
coreconfigitem("experimental", "rust-commits:index2", default=True) coreconfigitem("experimental", "rust-commits:index2", default=True)
coreconfigitem("experimental", "rust-commits:isancestor", default=True) coreconfigitem("experimental", "rust-commits:isancestor", default=True)
coreconfigitem("experimental", "rust-commits:iter", default=True)
coreconfigitem("experimental", "rust-commits:len", default=True) coreconfigitem("experimental", "rust-commits:len", default=True)
coreconfigitem("experimental", "rust-commits:node", default=True) coreconfigitem("experimental", "rust-commits:node", default=True)
coreconfigitem("experimental", "rust-commits:nodesbetween", default=True) coreconfigitem("experimental", "rust-commits:nodesbetween", default=True)
@ -319,8 +321,10 @@ coreconfigitem("experimental", "rust-commits:rawheadrevs", default=True)
coreconfigitem("experimental", "rust-commits:reachableroots", default=True) coreconfigitem("experimental", "rust-commits:reachableroots", default=True)
coreconfigitem("experimental", "rust-commits:rev", default=True) coreconfigitem("experimental", "rust-commits:rev", default=True)
coreconfigitem("experimental", "rust-commits:revision", default=True) coreconfigitem("experimental", "rust-commits:revision", default=True)
coreconfigitem("experimental", "rust-commits:revs", default=True)
coreconfigitem("experimental", "rust-commits:revsetancestor", default=True) coreconfigitem("experimental", "rust-commits:revsetancestor", default=True)
coreconfigitem("experimental", "rust-commits:strip", default=True) coreconfigitem("experimental", "rust-commits:strip", default=True)
coreconfigitem("experimental", "rust-commits:tip", default=True)
coreconfigitem("experimental", "single-head-per-branch", default=False) coreconfigitem("experimental", "single-head-per-branch", default=False)
coreconfigitem("experimental", "spacemovesdown", default=False) coreconfigitem("experimental", "spacemovesdown", default=False)