[PATCH] rust-cpython: moved py_set() utility to conversion module
Georges Racinet
georges.racinet at octobus.net
Thu Jan 17 14:51:07 UTC 2019
# HG changeset patch
# User Georges Racinet <georges.racinet at octobus.net>
# Date 1547651127 -3600
# Wed Jan 16 16:05:27 2019 +0100
# Node ID db87a81bfa80b7acde4e2d0a4a6bca253cf48089
# Parent e56855ffbc708a2a128825935e28cd76818c1170
# EXP-Topic revset.predicates
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.
diff -r e56855ffbc70 -r db87a81bfa80 rust/hg-cpython/src/ancestors.rs
--- a/rust/hg-cpython/src/ancestors.rs Wed Jan 16 15:52:59 2019 +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>>>;
diff -r e56855ffbc70 -r db87a81bfa80 rust/hg-cpython/src/conversion.rs
--- a/rust/hg-cpython/src/conversion.rs Wed Jan 16 15:52:59 2019 +0100
+++ b/rust/hg-cpython/src/conversion.rs Wed Jan 16 16:05:27 2019 +0100
@@ -8,8 +8,12 @@
//! Bindings for the hg::ancestors module provided by the
//! `hg-core` crate. From Python, this will be seen as `rustext.ancestor`
-use cpython::{ObjectProtocol, PyObject, PyResult, Python};
+use cpython::{
+ ObjectProtocol, PyDict, PyObject, PyResult, PyTuple, Python, PythonObject,
+ ToPyObject,
+};
use hg::Revision;
+use std::collections::HashSet;
use std::iter::FromIterator;
/// Utility function to convert a Python iterable into various collections
@@ -26,3 +30,21 @@
.map(|r| r.and_then(|o| o.extract::<Revision>(py)))
.collect()
}
+
+/// 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
+pub 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))
+}
More information about the Mercurial-devel
mailing list