yuja added a comment.

  > +type IndexParentsFn = unsafe extern "C" fn(
  >  +    index: *mut python_sys::PyObject,
  >  +    rev: ssize_t,
  >  +    ps: *mut [c_int; 2],
  >  +    max_rev: c_int,
  >  +) -> c_int;
  
  The type differs from the private function. It's
  `int HgRevlogIndex_GetParents(PyObject *op, int rev, int *ps)`.
  
  > +impl Graph for Index {
  >  +    /// wrap a call to the C extern parents function
  >  +    fn parents(&self, rev: Revision) -> Result<[Revision; 2], GraphError> 
{
  >  +        let mut res: [c_int; 2] = [0; 2];
  >  +        let code = unsafe {
  >  +            (self.parents)(
  >  +                self.index.as_ptr(),
  >  +                rev as ssize_t,
  >  +                &mut res as *mut [c_int; 2],
  >  +                rev,
  >  +            )
  >  +        };
  >  +        match code {
  >  +            0 => Ok(res),
  >  +            _ => Err(GraphError::ParentOutOfRange(rev)),
  >  +        }
  
  I think `Python<'p>` is needed here to make it safe, but I have no idea how
  to express that clearly. Do we need a wrapper that implements `Graph` and
  translates `Graph::parents(rev)` to `Index::parents(py, rev)`?
  
  > - a/mercurial/cext/revlog.c +++ b/mercurial/cext/revlog.c @@ -2878,6 
+2878,12 @@    if (nullentry)          PyObject_GC_UnTrack(nullentry);
  > 
  >   + void *caps = PyCapsule_New(
  
  Please move `void *caps` to top. We still need to conform to C89.

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D5438

To: gracinet, #hg-reviewers
Cc: yuja, durin42, kevincox, mercurial-devel
_______________________________________________
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel

Reply via email to