rust/hg-cpython/src/revlog.rs
changeset 51403 f8bf1a8e9181
parent 51394 b01e7d97e167
child 51423 3099f1c68afd
equal deleted inserted replaced
51402:12881244e48a 51403:f8bf1a8e9181
   968         &self,
   968         &self,
   969         py: Python,
   969         py: Python,
   970         py_roots: PyDict,
   970         py_roots: PyDict,
   971     ) -> PyResult<PyObject> {
   971     ) -> PyResult<PyObject> {
   972         let index = &*self.index(py).borrow();
   972         let index = &*self.index(py).borrow();
   973         let opt = self.get_nodetree(py)?.borrow();
       
   974         let nt = opt.as_ref().unwrap();
       
   975         let roots: Result<HashMap<Phase, Vec<Revision>>, PyErr> = py_roots
   973         let roots: Result<HashMap<Phase, Vec<Revision>>, PyErr> = py_roots
   976             .items_list(py)
   974             .items_list(py)
   977             .iter(py)
   975             .iter(py)
   978             .map(|r| {
   976             .map(|r| {
   979                 let phase = r.get_item(py, 0)?;
   977                 let phase = r.get_item(py, 0)?;
   980                 let nodes = r.get_item(py, 1)?;
   978                 let revs: Vec<_> =
   981                 // Transform the nodes from Python to revs here since we
   979                     rev_pyiter_collect(py, &r.get_item(py, 1)?, index)?;
   982                 // have access to the nodemap
       
   983                 let revs: Result<_, _> = nodes
       
   984                     .iter(py)?
       
   985                     .map(|node| match node?.extract::<PyBytes>(py) {
       
   986                         Ok(py_bytes) => {
       
   987                             let node = node_from_py_bytes(py, &py_bytes)?;
       
   988                             nt.find_bin(index, node.into())
       
   989                                 .map_err(|e| nodemap_error(py, e))?
       
   990                                 .ok_or_else(|| revlog_error(py))
       
   991                         }
       
   992                         Err(e) => Err(e),
       
   993                     })
       
   994                     .collect();
       
   995                 let phase = Phase::try_from(phase.extract::<usize>(py)?)
   980                 let phase = Phase::try_from(phase.extract::<usize>(py)?)
   996                     .map_err(|_| revlog_error(py));
   981                     .map_err(|_| revlog_error(py));
   997                 Ok((phase?, revs?))
   982                 Ok((phase?, revs))
   998             })
   983             })
   999             .collect();
   984             .collect();
  1000         let (len, phase_maps) = index
   985         let (len, phase_maps) = index
  1001             .compute_phases_map_sets(roots?)
   986             .compute_phases_map_sets(roots?)
  1002             .map_err(|e| graph_error(py, e))?;
   987             .map_err(|e| graph_error(py, e))?;