diff rust/hg-cpython/src/discovery.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 4e7bd6180b53
children f98f0e3ddaa1
line wrap: on
line diff
--- a/rust/hg-cpython/src/discovery.rs	Tue Oct 15 22:02:34 2019 -0400
+++ b/rust/hg-cpython/src/discovery.rs	Mon Sep 30 16:31:53 2019 -0400
@@ -13,9 +13,7 @@
 //!   `mercurial.setdiscovery.partialdiscovery`.
 
 use crate::{
-    cindex::Index,
-    conversion::{py_set, rev_pyiter_collect},
-    exceptions::GraphError,
+    cindex::Index, conversion::rev_pyiter_collect, exceptions::GraphError,
 };
 use cpython::{
     ObjectProtocol, PyDict, PyModule, PyObject, PyResult, PyTuple, Python,
@@ -23,6 +21,7 @@
 };
 use hg::discovery::PartialDiscovery as CorePartialDiscovery;
 use hg::Revision;
+use std::collections::HashSet;
 
 use std::cell::RefCell;
 
@@ -106,12 +105,9 @@
         Ok(as_dict)
     }
 
-    def commonheads(&self) -> PyResult<PyObject> {
-        py_set(
-            py,
-            &self.inner(py).borrow().common_heads()
-                .map_err(|e| GraphError::pynew(py, e))?
-        )
+    def commonheads(&self) -> PyResult<HashSet<Revision>> {
+        self.inner(py).borrow().common_heads()
+            .map_err(|e| GraphError::pynew(py, e))
     }
 
     def takefullsample(&self, _headrevs: PyObject,