rust/hg-cpython/src/revlog.rs
changeset 51213 62e39bef36ca
parent 51212 9b06e7f32bc5
child 51214 050098d60c30
equal deleted inserted replaced
51212:9b06e7f32bc5 51213:62e39bef36ca
   308         Ok(py.None())
   308         Ok(py.None())
   309     }
   309     }
   310 
   310 
   311     /// determine revisions with deltas to reconstruct fulltext
   311     /// determine revisions with deltas to reconstruct fulltext
   312     def deltachain(&self, *args, **kw) -> PyResult<PyObject> {
   312     def deltachain(&self, *args, **kw) -> PyResult<PyObject> {
   313         self.call_cindex(py, "deltachain", args, kw)
   313         let index = self.index(py).borrow();
       
   314         let rev = args.get_item(py, 0).extract::<BaseRevision>(py)?.into();
       
   315         let stop_rev =
       
   316             args.get_item(py, 1).extract::<Option<BaseRevision>>(py)?;
       
   317         let rev = index.check_revision(rev).ok_or_else(|| {
       
   318             nodemap_error(py, NodeMapError::RevisionNotInIndex(rev))
       
   319         })?;
       
   320         let stop_rev = if let Some(stop_rev) = stop_rev {
       
   321             let stop_rev = UncheckedRevision(stop_rev);
       
   322             Some(index.check_revision(stop_rev).ok_or_else(|| {
       
   323                 nodemap_error(py, NodeMapError::RevisionNotInIndex(stop_rev))
       
   324             })?)
       
   325         } else {None};
       
   326         let (chain, stopped) = index.delta_chain(rev, stop_rev).map_err(|e| {
       
   327             PyErr::new::<cpython::exc::ValueError, _>(py, e.to_string())
       
   328         })?;
       
   329 
       
   330         let cresult = self.call_cindex(py, "deltachain", args, kw)?;
       
   331         let cchain: Vec<BaseRevision> =
       
   332             cresult.get_item(py, 0)?.extract::<Vec<BaseRevision>>(py)?;
       
   333         let chain: Vec<_> = chain.into_iter().map(|r| r.0).collect();
       
   334         assert_eq!(chain, cchain);
       
   335         assert_eq!(stopped, cresult.get_item(py, 1)?.extract(py)?);
       
   336 
       
   337         Ok(
       
   338             PyTuple::new(
       
   339                 py,
       
   340                 &[
       
   341                     chain.into_py_object(py).into_object(),
       
   342                     stopped.into_py_object(py).into_object()
       
   343                 ]
       
   344             ).into_object()
       
   345         )
       
   346 
   314     }
   347     }
   315 
   348 
   316     /// slice planned chunk read to reach a density threshold
   349     /// slice planned chunk read to reach a density threshold
   317     def slicechunktodensity(&self, *args, **kw) -> PyResult<PyObject> {
   350     def slicechunktodensity(&self, *args, **kw) -> PyResult<PyObject> {
   318         self.call_cindex(py, "slicechunktodensity", args, kw)
   351         self.call_cindex(py, "slicechunktodensity", args, kw)