Mercurial > public > mercurial-scm > hg
comparison rust/hg-cpython/src/revlog.rs @ 51215:0112803e6c01
rust-index: add support for `_slicechunktodensity`
author | Rapha?l Gom?s <rgomes@octobus.net> |
---|---|
date | Thu, 02 Nov 2023 11:40:23 +0100 |
parents | 898674a4dbc7 |
children | 8cb31833b486 |
comparison
equal
deleted
inserted
replaced
51214:898674a4dbc7 | 51215:0112803e6c01 |
---|---|
355 | 355 |
356 } | 356 } |
357 | 357 |
358 /// slice planned chunk read to reach a density threshold | 358 /// slice planned chunk read to reach a density threshold |
359 def slicechunktodensity(&self, *args, **kw) -> PyResult<PyObject> { | 359 def slicechunktodensity(&self, *args, **kw) -> PyResult<PyObject> { |
360 self.call_cindex(py, "slicechunktodensity", args, kw) | 360 let rust_res = self.inner_slicechunktodensity( |
361 py, | |
362 args.get_item(py, 0), | |
363 args.get_item(py, 1).extract(py)?, | |
364 args.get_item(py, 2).extract(py)? | |
365 )?; | |
366 | |
367 let c_res = self.call_cindex(py, "slicechunktodensity", args, kw)?; | |
368 assert_eq!( | |
369 rust_res.len(), | |
370 c_res.len(py)?, | |
371 "chunks differ {:?} {}", | |
372 rust_res, c_res | |
373 ); | |
374 for (i, chunk) in rust_res.iter().enumerate() { | |
375 let c_chunk = c_res.get_item(py, i)?; | |
376 assert_eq!( | |
377 chunk.len(), | |
378 c_chunk.len(py)?, | |
379 "chunk {} length differ {:?} {}", | |
380 i, | |
381 chunk, | |
382 c_res | |
383 ); | |
384 for (j, rev) in chunk.iter().enumerate() { | |
385 let c_chunk: BaseRevision | |
386 = c_chunk.get_item(py, j)?.extract(py)?; | |
387 assert_eq!(c_chunk, rev.0); | |
388 } | |
389 } | |
390 Ok(c_res) | |
361 } | 391 } |
362 | 392 |
363 /// stats for the index | 393 /// stats for the index |
364 def stats(&self, *args, **kw) -> PyResult<PyObject> { | 394 def stats(&self, *args, **kw) -> PyResult<PyObject> { |
365 self.call_cindex(py, "stats", args, kw) | 395 self.call_cindex(py, "stats", args, kw) |
817 .iter() | 847 .iter() |
818 .map(|r| PyRevision::from(*r).into_py_object(py).into_object()) | 848 .map(|r| PyRevision::from(*r).into_py_object(py).into_object()) |
819 .collect(); | 849 .collect(); |
820 Ok(PyList::new(py, &as_vec).into_object()) | 850 Ok(PyList::new(py, &as_vec).into_object()) |
821 } | 851 } |
852 | |
853 fn inner_slicechunktodensity( | |
854 &self, | |
855 py: Python, | |
856 revs: PyObject, | |
857 target_density: f64, | |
858 min_gap_size: usize, | |
859 ) -> PyResult<Vec<Vec<Revision>>> { | |
860 let index = &mut *self.index(py).borrow_mut(); | |
861 let revs: Vec<_> = rev_pyiter_collect(py, &revs, index)?; | |
862 Ok(index.slice_chunk_to_density(&revs, target_density, min_gap_size)) | |
863 } | |
822 } | 864 } |
823 | 865 |
824 fn revlog_error(py: Python) -> PyErr { | 866 fn revlog_error(py: Python) -> PyErr { |
825 match py | 867 match py |
826 .import("mercurial.error") | 868 .import("mercurial.error") |