From patchwork Wed Jan 8 18:11:04 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: D7657: rust-index: handle `MixedIndex` in `pyindex_to_graph` From: phabricator X-Patchwork-Id: 44185 Message-Id: <78bf45ef6cdf4801fc820418ba1dc8da@localhost.localdomain> To: Phabricator Cc: mercurial-devel@mercurial-scm.org Date: Wed, 8 Jan 2020 18:11:04 +0000 Closed by commit rHGc627f1b2f3c3: rust-index: handle `MixedIndex` in `pyindex_to_graph` (authored by marmoute). This revision was automatically updated to reflect the committed changes. This revision was not accepted when it landed; it landed in state "Needs Review". REPOSITORY rHG Mercurial CHANGES SINCE LAST UPDATE https://phab.mercurial-scm.org/D7657?vs=18941&id=19081 CHANGES SINCE LAST ACTION https://phab.mercurial-scm.org/D7657/new/ REVISION DETAIL https://phab.mercurial-scm.org/D7657 AFFECTED FILES rust/hg-cpython/src/revlog.rs tests/test-rust-revlog.py CHANGE DETAILS To: marmoute, #hg-reviewers, Alphare Cc: durin42, kevincox, mercurial-devel diff --git a/tests/test-rust-revlog.py b/tests/test-rust-revlog.py --- a/tests/test-rust-revlog.py +++ b/tests/test-rust-revlog.py @@ -10,6 +10,9 @@ else: from mercurial.rustext import revlog + # this would fail already without appropriate ancestor.__package__ + from mercurial.rustext.ancestor import LazyAncestors + from mercurial.testing import revlog as revlogtesting @@ -27,6 +30,22 @@ rustidx = revlog.MixedIndex(idx) self.assertEqual(len(rustidx), len(idx)) + def test_ancestors(self): + idx = self.parseindex() + rustidx = revlog.MixedIndex(idx) + lazy = LazyAncestors(rustidx, [3], 0, True) + # we have two more references to the index: + # - in its inner iterator for __contains__ and __bool__ + # - in the LazyAncestors instance itself (to spawn new iterators) + self.assertTrue(2 in lazy) + self.assertTrue(bool(lazy)) + self.assertEqual(list(lazy), [3, 2, 1, 0]) + # a second time to validate that we spawn new iterators + self.assertEqual(list(lazy), [3, 2, 1, 0]) + + # let's check bool for an empty one + self.assertFalse(LazyAncestors(idx, [0], 0, False)) + if __name__ == '__main__': import silenttestrunner diff --git a/rust/hg-cpython/src/revlog.rs b/rust/hg-cpython/src/revlog.rs --- a/rust/hg-cpython/src/revlog.rs +++ b/rust/hg-cpython/src/revlog.rs @@ -15,7 +15,10 @@ /// Return a Struct implementing the Graph trait pub(crate) fn pyindex_to_graph(py: Python, index: PyObject) -> PyResult { - cindex::Index::new(py, index) + match index.extract::(py) { + Ok(midx) => Ok(midx.clone_cindex(py)), + Err(_) => cindex::Index::new(py, index), + } } py_class!(pub class MixedIndex |py| {