Mercurial > public > mercurial-scm > hg-stable
diff rust/hg-cpython/src/ancestors.rs @ 41704:060c030c9993
rust-cpython: moved py_set() utility to conversion module
We're still hoping to get rid of it eventually, but we're going
to need it from outside the `ancestors` module before that.
author | Georges Racinet <georges.racinet@octobus.net> |
---|---|
date | Wed, 16 Jan 2019 16:05:27 +0100 |
parents | 619ee4039bd4 |
children | 326fdce22fb2 |
line wrap: on
line diff
--- a/rust/hg-cpython/src/ancestors.rs Sun Dec 02 16:19:22 2018 +0100 +++ b/rust/hg-cpython/src/ancestors.rs Wed Jan 16 16:05:27 2019 +0100 @@ -34,11 +34,11 @@ //! [`LazyAncestors`]: struct.LazyAncestors.html //! [`MissingAncestors`]: struct.MissingAncestors.html //! [`AncestorsIterator`]: struct.AncestorsIterator.html -use crate::conversion::rev_pyiter_collect; +use crate::conversion::{py_set, rev_pyiter_collect}; use cindex::Index; use cpython::{ ObjectProtocol, PyClone, PyDict, PyList, PyModule, PyObject, PyResult, - PyTuple, Python, PythonObject, ToPyObject, + Python, PythonObject, ToPyObject, }; use exceptions::GraphError; use hg::Revision; @@ -90,24 +90,6 @@ } } -/// Copy and convert an `HashSet<Revision>` in a Python set -/// -/// This will probably turn useless once `PySet` support lands in -/// `rust-cpython`. -/// -/// This builds a Python tuple, then calls Python's "set()" on it -fn py_set(py: Python, set: &HashSet<Revision>) -> PyResult<PyObject> { - let as_vec: Vec<PyObject> = set - .iter() - .map(|rev| rev.to_py_object(py).into_object()) - .collect(); - let as_pytuple = PyTuple::new(py, as_vec.as_slice()); - - let locals = PyDict::new(py); - locals.set_item(py, "obj", as_pytuple.to_py_object(py))?; - py.eval("set(obj)", None, Some(&locals)) -} - py_class!(pub class LazyAncestors |py| { data inner: RefCell<Box<CoreLazy<Index>>>;