rust/hg-cpython/src/revlog.rs
changeset 51187 6ec8387eb0be
parent 51184 8c4e8d06432e
child 51188 13f58ce70299
equal deleted inserted replaced
51186:b4d152a28742 51187:6ec8387eb0be
    34     }
    34     }
    35 }
    35 }
    36 
    36 
    37 py_class!(pub class MixedIndex |py| {
    37 py_class!(pub class MixedIndex |py| {
    38     data cindex: RefCell<cindex::Index>;
    38     data cindex: RefCell<cindex::Index>;
       
    39     data index: RefCell<hg::index::Index>;
    39     data nt: RefCell<Option<NodeTree>>;
    40     data nt: RefCell<Option<NodeTree>>;
    40     data docket: RefCell<Option<PyObject>>;
    41     data docket: RefCell<Option<PyObject>>;
    41     // Holds a reference to the mmap'ed persistent nodemap data
    42     // Holds a reference to the mmap'ed persistent nodemap data
    42     data nodemap_mmap: RefCell<Option<PyBuffer>>;
    43     data nodemap_mmap: RefCell<Option<PyBuffer>>;
    43 
    44     // Holds a reference to the mmap'ed persistent index data
    44     def __new__(_cls, cindex: PyObject) -> PyResult<MixedIndex> {
    45     data index_mmap: RefCell<Option<PyBuffer>>;
    45         Self::new(py, cindex)
    46 
       
    47     def __new__(
       
    48         _cls,
       
    49         cindex: PyObject,
       
    50         data: PyObject
       
    51     ) -> PyResult<MixedIndex> {
       
    52         Self::new(py, cindex, data)
    46     }
    53     }
    47 
    54 
    48     /// Compatibility layer used for Python consumers needing access to the C index
    55     /// Compatibility layer used for Python consumers needing access to the C index
    49     ///
    56     ///
    50     /// Only use case so far is `scmutil.shortesthexnodeidprefix`,
    57     /// Only use case so far is `scmutil.shortesthexnodeidprefix`,
   351 
   358 
   352     Ok((buf, Box::new(bytes)))
   359     Ok((buf, Box::new(bytes)))
   353 }
   360 }
   354 
   361 
   355 impl MixedIndex {
   362 impl MixedIndex {
   356     fn new(py: Python, cindex: PyObject) -> PyResult<MixedIndex> {
   363     fn new(
       
   364         py: Python,
       
   365         cindex: PyObject,
       
   366         data: PyObject,
       
   367     ) -> PyResult<MixedIndex> {
       
   368         // Safety: we keep the buffer around inside the class as `index_mmap`
       
   369         let (buf, bytes) = unsafe { mmap_keeparound(py, data)? };
       
   370 
   357         Self::create_instance(
   371         Self::create_instance(
   358             py,
   372             py,
   359             RefCell::new(cindex::Index::new(py, cindex)?),
   373             RefCell::new(cindex::Index::new(py, cindex)?),
       
   374             RefCell::new(hg::index::Index::new(bytes).unwrap()),
   360             RefCell::new(None),
   375             RefCell::new(None),
   361             RefCell::new(None),
   376             RefCell::new(None),
   362             RefCell::new(None),
   377             RefCell::new(None),
       
   378             RefCell::new(Some(buf)),
   363         )
   379         )
   364     }
   380     }
   365 
   381 
   366     /// This is scaffolding at this point, but it could also become
   382     /// This is scaffolding at this point, but it could also become
   367     /// a way to start a persistent nodemap or perform a
   383     /// a way to start a persistent nodemap or perform a