1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
use cindex::Index;
use cpython::{PyDict, PyModule, PyObject, PyResult, Python};
use crate::conversion::{py_set, rev_pyiter_collect};
use exceptions::GraphError;
use hg::dagops;
use hg::Revision;
use std::collections::HashSet;
pub fn headrevs(
py: Python,
index: PyObject,
revs: PyObject,
) -> PyResult<PyObject> {
let mut as_set: HashSet<Revision> = rev_pyiter_collect(py, &revs)?;
dagops::retain_heads(&Index::new(py, index)?, &mut as_set)
.map_err(|e| GraphError::pynew(py, e))?;
py_set(py, &as_set)
}
pub fn init_module(py: Python, package: &str) -> PyResult<PyModule> {
let dotted_name = &format!("{}.dagop", package);
let m = PyModule::new(py, dotted_name)?;
m.add(py, "__package__", package)?;
m.add(py, "__doc__", "DAG operations - Rust implementation")?;
m.add(
py,
"headrevs",
py_fn!(py, headrevs(index: PyObject, revs: PyObject)),
)?;
let sys = PyModule::import(py, "sys")?;
let sys_modules: PyDict = sys.get(py, "modules")?.extract(py)?;
sys_modules.set_item(py, dotted_name, &m)?;
Ok(m)
}