marmoute created this revision. Herald added subscribers: mercurial-devel, kevincox, durin42. Herald added a reviewer: hg-reviewers.
REVISION SUMMARY If we are to hand over the C index object to other code, we need to be able to create a new python reference to it. REPOSITORY rHG Mercurial REVISION DETAIL https://phab.mercurial-scm.org/D7656 AFFECTED FILES rust/hg-cpython/src/cindex.rs rust/hg-cpython/src/revlog.rs CHANGE DETAILS diff --git a/rust/hg-cpython/src/revlog.rs b/rust/hg-cpython/src/revlog.rs --- a/rust/hg-cpython/src/revlog.rs +++ b/rust/hg-cpython/src/revlog.rs @@ -7,7 +7,8 @@ use crate::cindex; use cpython::{ - ObjectProtocol, PyDict, PyModule, PyObject, PyResult, PyTuple, Python, PythonObject, ToPyObject, + ObjectProtocol, PyClone, PyDict, PyModule, PyObject, PyResult, PyTuple, Python, PythonObject, + ToPyObject, }; use hg::Revision; use std::cell::RefCell; @@ -194,6 +195,10 @@ .inner() .call_method(py, name, args, kwargs) } + + pub fn clone_cindex(&self, py: Python) -> cindex::Index { + self.cindex(py).borrow().clone_ref(py) + } } /// Create the module, with __package__ given from parent diff --git a/rust/hg-cpython/src/cindex.rs b/rust/hg-cpython/src/cindex.rs --- a/rust/hg-cpython/src/cindex.rs +++ b/rust/hg-cpython/src/cindex.rs @@ -85,6 +85,15 @@ } } +impl PyClone for Index { + fn clone_ref(&self, py: Python) -> Self { + Index { + index: self.index.clone_ref(py), + parents: self.parents.clone(), + } + } +} + impl Graph for Index { /// wrap a call to the C extern parents function fn parents(&self, rev: Revision) -> Result<[Revision; 2], GraphError> { To: marmoute, #hg-reviewers Cc: durin42, kevincox, mercurial-devel _______________________________________________ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel