D7653: rust-index: add a function to convert PyObject index for hg-core
marmoute (Pierre-Yves David)
phabricator at mercurial-scm.org
Thu Dec 19 13:11:46 EST 2019
marmoute updated this revision to Diff 18887.
REPOSITORY
rHG Mercurial
CHANGES SINCE LAST UPDATE
https://phab.mercurial-scm.org/D7653?vs=18699&id=18887
CHANGES SINCE LAST ACTION
https://phab.mercurial-scm.org/D7653/new/
REVISION DETAIL
https://phab.mercurial-scm.org/D7653
AFFECTED FILES
rust/hg-cpython/src/ancestors.rs
rust/hg-cpython/src/dagops.rs
rust/hg-cpython/src/discovery.rs
rust/hg-cpython/src/lib.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
new file mode 100644
--- /dev/null
+++ b/rust/hg-cpython/src/revlog.rs
@@ -0,0 +1,17 @@
+// revlog.rs
+//
+// Copyright 2019 Georges Racinet <georges.racinet at octobus.net>
+//
+// This software may be used and distributed according to the terms of the
+// GNU General Public License version 2 or any later version.
+
+use crate::cindex;
+use cpython::{PyObject, PyResult, Python};
+
+/// Return a Struct implementing the Graph trait
+pub(crate) fn pyindex_to_graph(
+ py: Python,
+ index: PyObject,
+) -> PyResult<cindex::Index> {
+ cindex::Index::new(py, index)
+}
diff --git a/rust/hg-cpython/src/lib.rs b/rust/hg-cpython/src/lib.rs
--- a/rust/hg-cpython/src/lib.rs
+++ b/rust/hg-cpython/src/lib.rs
@@ -35,6 +35,7 @@
pub mod exceptions;
pub mod filepatterns;
pub mod parsers;
+pub mod revlog;
pub mod utils;
py_module_initializer!(rustext, initrustext, PyInit_rustext, |py, m| {
diff --git a/rust/hg-cpython/src/discovery.rs b/rust/hg-cpython/src/discovery.rs
--- a/rust/hg-cpython/src/discovery.rs
+++ b/rust/hg-cpython/src/discovery.rs
@@ -25,6 +25,8 @@
use std::cell::RefCell;
+use crate::revlog::pyindex_to_graph;
+
py_class!(pub class PartialDiscovery |py| {
data inner: RefCell<Box<CorePartialDiscovery<Index>>>;
@@ -42,7 +44,7 @@
Self::create_instance(
py,
RefCell::new(Box::new(CorePartialDiscovery::new(
- Index::new(py, index)?,
+ pyindex_to_graph(py, index)?,
rev_pyiter_collect(py, &targetheads)?,
respectsize,
randomize,
diff --git a/rust/hg-cpython/src/dagops.rs b/rust/hg-cpython/src/dagops.rs
--- a/rust/hg-cpython/src/dagops.rs
+++ b/rust/hg-cpython/src/dagops.rs
@@ -9,14 +9,14 @@
//! `hg-core` package.
//!
//! From Python, this will be seen as `mercurial.rustext.dagop`
-use crate::{
- cindex::Index, conversion::rev_pyiter_collect, exceptions::GraphError,
-};
+use crate::{conversion::rev_pyiter_collect, exceptions::GraphError};
use cpython::{PyDict, PyModule, PyObject, PyResult, Python};
use hg::dagops;
use hg::Revision;
use std::collections::HashSet;
+use crate::revlog::pyindex_to_graph;
+
/// Using the the `index`, return heads out of any Python iterable of Revisions
///
/// This is the Rust counterpart for `mercurial.dagop.headrevs`
@@ -26,7 +26,7 @@
revs: PyObject,
) -> PyResult<HashSet<Revision>> {
let mut as_set: HashSet<Revision> = rev_pyiter_collect(py, &revs)?;
- dagops::retain_heads(&Index::new(py, index)?, &mut as_set)
+ dagops::retain_heads(&pyindex_to_graph(py, index)?, &mut as_set)
.map_err(|e| GraphError::pynew(py, e))?;
Ok(as_set)
}
diff --git a/rust/hg-cpython/src/ancestors.rs b/rust/hg-cpython/src/ancestors.rs
--- a/rust/hg-cpython/src/ancestors.rs
+++ b/rust/hg-cpython/src/ancestors.rs
@@ -34,6 +34,7 @@
//! [`LazyAncestors`]: struct.LazyAncestors.html
//! [`MissingAncestors`]: struct.MissingAncestors.html
//! [`AncestorsIterator`]: struct.AncestorsIterator.html
+use crate::revlog::pyindex_to_graph;
use crate::{
cindex::Index, conversion::rev_pyiter_collect, exceptions::GraphError,
};
@@ -73,7 +74,7 @@
inclusive: bool) -> PyResult<AncestorsIterator> {
let initvec: Vec<Revision> = rev_pyiter_collect(py, &initrevs)?;
let ait = CoreIterator::new(
- Index::new(py, index)?,
+ pyindex_to_graph(py, index)?,
initvec,
stoprev,
inclusive,
@@ -113,7 +114,8 @@
let initvec: Vec<Revision> = rev_pyiter_collect(py, &initrevs)?;
let lazy =
- CoreLazy::new(Index::new(py, index)?, initvec, stoprev, inclusive)
+ CoreLazy::new(pyindex_to_graph(py, index)?,
+ initvec, stoprev, inclusive)
.map_err(|e| GraphError::pynew(py, e))?;
Self::create_instance(py, RefCell::new(Box::new(lazy)))
@@ -126,7 +128,7 @@
def __new__(_cls, index: PyObject, bases: PyObject) -> PyResult<MissingAncestors> {
let bases_vec: Vec<Revision> = rev_pyiter_collect(py, &bases)?;
- let inner = CoreMissing::new(Index::new(py, index)?, bases_vec);
+ let inner = CoreMissing::new(pyindex_to_graph(py, index)?, bases_vec);
MissingAncestors::create_instance(py, RefCell::new(Box::new(inner)))
}
To: marmoute, #hg-reviewers
Cc: durin42, kevincox, mercurial-devel
More information about the Mercurial-devel
mailing list