rust-index: expose a method to retrieve the C index
authorGeorges Racinet <georges.racinet@octobus.net>
Thu, 12 Dec 2019 03:39:14 +0100
changeset 44012 443dc1655923
parent 44011 c627f1b2f3c3
child 44013 992f0d6e7f33
rust-index: expose a method to retrieve the C index The code for `shortesthexnodeidprefix` need to access the actual C index. For now we grant its wish and expose a method to do so. Once we have the nodemap in Rust, we will be able to implement the same feature from rust and we will be able to drop this method. Differential Revision: https://phab.mercurial-scm.org/D7658
rust/hg-cpython/src/revlog.rs
tests/test-rust-revlog.py
--- a/rust/hg-cpython/src/revlog.rs	Thu Dec 12 18:11:44 2019 +0100
+++ b/rust/hg-cpython/src/revlog.rs	Thu Dec 12 03:39:14 2019 +0100
@@ -29,6 +29,17 @@
             cindex::Index::new(py, cindex)?))
     }
 
+    /// Compatibility layer used for Python consumers needing access to the C index
+    ///
+    /// Only use case so far is `scmutil.shortesthexnodeidprefix`,
+    /// that may need to build a custom `nodetree`, based on a specified revset.
+    /// With a Rust implementation of the nodemap, we will be able to get rid of
+    /// this, by exposing our own standalone nodemap class,
+    /// ready to accept `MixedIndex`.
+    def get_cindex(&self) -> PyResult<PyObject> {
+        Ok(self.cindex(py).borrow().inner().clone_ref(py))
+    }
+
 
     // Reforwarded C index API
 
--- a/tests/test-rust-revlog.py	Thu Dec 12 18:11:44 2019 +0100
+++ b/tests/test-rust-revlog.py	Thu Dec 12 03:39:14 2019 +0100
@@ -25,6 +25,13 @@
         rustidx = revlog.MixedIndex(idx)
         self.assertEqual(rustidx.headrevs(), idx.headrevs())
 
+    def test_get_cindex(self):
+        # drop me once we no longer need the method for shortest node
+        idx = self.parseindex()
+        rustidx = revlog.MixedIndex(idx)
+        cidx = rustidx.get_cindex()
+        self.assertTrue(idx is cidx)
+
     def test_len(self):
         idx = self.parseindex()
         rustidx = revlog.MixedIndex(idx)