D7656: rust-index: make it possible to clone the struct referencing the C index
marmoute (Pierre-Yves David)
phabricator at mercurial-scm.org
Fri Dec 13 20:13:08 UTC 2019
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
More information about the Mercurial-devel
mailing list