changeset 52834:d90a78ca0bdd

rust-pyo3-revlog: get_segment_for_revs
author Rapha?l Gom?s <rgomes@octobus.net>
date Fri, 03 Jan 2025 01:05:22 +0100
parents 503752cc7177
children 4f41a8acf350
files rust/hg-pyo3/src/revlog/mod.rs
diffstat 1 files changed, 22 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/rust/hg-pyo3/src/revlog/mod.rs	Fri Jan 03 00:59:50 2025 +0100
+++ b/rust/hg-pyo3/src/revlog/mod.rs	Fri Jan 03 01:05:22 2025 +0100
@@ -354,6 +354,28 @@
         })
     }
 
+    fn get_segment_for_revs(
+        slf: &Bound<'_, Self>,
+        py: Python<'_>,
+        startrev: PyRevision,
+        endrev: PyRevision,
+    ) -> PyResult<Py<PyTuple>> {
+        Self::with_core_read(slf, |_self_ref, irl| {
+            // Here both revisions only come from revlog code, so we assume
+            // them to be valid.
+            // Panics will alert the offending programmer if not.
+            let (offset, data) = irl
+                .get_segment_for_revs(Revision(startrev.0), Revision(endrev.0))
+                .map_err(revlog_error_from_msg)?;
+            let data = PyBytes::new(py, &data);
+            Ok(PyTuple::new(
+                py,
+                &[offset.into_py_any(py)?, data.into_py_any(py)?],
+            )?
+            .unbind())
+        })
+    }
+
     fn reading(slf: &Bound<'_, Self>) -> PyResult<ReadingContextManager> {
         Ok(ReadingContextManager {
             inner_revlog: slf.clone().unbind(),