Mercurial > public > mercurial-scm > hg-stable
diff rust/hg-cpython/src/ancestors.rs @ 43269:33fe96a5c522
rust-cpython: removed now useless py_set() conversion
In rust-cpython 0.3.0, HashSets implement the appropriate
ToPythonObject, we can therefore get rid of this hacky conversion.
There still remains an inefficiency in `MissingAncestors.bases()`:
we have to clone, because `to_py_object()` requires full ownership.
However:
- the only use case outside of unit tests used to be from
`setdiscovery.partialdiscovery` which is now fully implemented
in Rust.
- it's not worse than what `py_set()` used to do
Differential Revision: https://phab.mercurial-scm.org/D7120
author | Georges Racinet <georges.racinet@octobus.net> |
---|---|
date | Mon, 30 Sep 2019 16:31:53 -0400 |
parents | 326fdce22fb2 |
children | f98f0e3ddaa1 |
line wrap: on
line diff
--- a/rust/hg-cpython/src/ancestors.rs Tue Oct 15 22:02:34 2019 -0400 +++ b/rust/hg-cpython/src/ancestors.rs Mon Sep 30 16:31:53 2019 -0400 @@ -35,9 +35,7 @@ //! [`MissingAncestors`]: struct.MissingAncestors.html //! [`AncestorsIterator`]: struct.AncestorsIterator.html use crate::{ - cindex::Index, - conversion::{py_set, rev_pyiter_collect}, - exceptions::GraphError, + cindex::Index, conversion::rev_pyiter_collect, exceptions::GraphError, }; use cpython::{ ObjectProtocol, PyClone, PyDict, PyList, PyModule, PyObject, PyResult, @@ -146,13 +144,13 @@ Ok(py.None()) } - def bases(&self) -> PyResult<PyObject> { - py_set(py, self.inner(py).borrow().get_bases()) + def bases(&self) -> PyResult<HashSet<Revision>> { + Ok(self.inner(py).borrow().get_bases().clone()) } - def basesheads(&self) -> PyResult<PyObject> { + def basesheads(&self) -> PyResult<HashSet<Revision>> { let inner = self.inner(py).borrow(); - py_set(py, &inner.bases_heads().map_err(|e| GraphError::pynew(py, e))?) + inner.bases_heads().map_err(|e| GraphError::pynew(py, e)) } def removeancestorsfrom(&self, revs: PyObject) -> PyResult<PyObject> {