##// END OF EJS Templates
backout: backed out changeset 5d83a40cd3f8...
backout: backed out changeset 5d83a40cd3f8 This is the re-send of the backout in D11757 that I accidentally queued. I'll rewrite the original commit message: ...sigh We do not have Python 3 packaging for thg on Windows where the vast majority of of users use the thg installer for Mercurial. Until this is done (hopefully this cycle), we're keeping Python. (end of the old commit message) On top of this, we have a solid lead to have competent people take care of this packaging issue for us in time for the 6.1 release, which is really the main reason for us to wait. We're trying our best to make this work, so please bear with us. Differential Revision: https://phab.mercurial-scm.org/D11770

File last commit:

r44398:f98f0e3d default
r49233:0ad593b6 default
Show More
dagops.rs
53 lines | 1.8 KiB | application/rls-services+xml | RustLexer
Georges Racinet
rust-cpython: binding for headrevs()...
r41843 // dagops.rs
//
// Copyright 2019 Georges Racinet <georges.racinet@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.
//! Bindings for the `hg::dagops` module provided by the
//! `hg-core` package.
//!
//! From Python, this will be seen as `mercurial.rustext.dagop`
rust-index: add a function to convert PyObject index for hg-core...
r44398 use crate::{conversion::rev_pyiter_collect, exceptions::GraphError};
Georges Racinet
rust-cpython: binding for headrevs()...
r41843 use cpython::{PyDict, PyModule, PyObject, PyResult, Python};
use hg::dagops;
use hg::Revision;
use std::collections::HashSet;
rust-index: add a function to convert PyObject index for hg-core...
r44398 use crate::revlog::pyindex_to_graph;
Georges Racinet
rust-cpython: binding for headrevs()...
r41843 /// Using the the `index`, return heads out of any Python iterable of Revisions
///
/// This is the Rust counterpart for `mercurial.dagop.headrevs`
pub fn headrevs(
py: Python,
index: PyObject,
revs: PyObject,
Georges Racinet
rust-cpython: removed now useless py_set() conversion...
r43563 ) -> PyResult<HashSet<Revision>> {
Georges Racinet
rust-cpython: binding for headrevs()...
r41843 let mut as_set: HashSet<Revision> = rev_pyiter_collect(py, &revs)?;
rust-index: add a function to convert PyObject index for hg-core...
r44398 dagops::retain_heads(&pyindex_to_graph(py, index)?, &mut as_set)
Georges Racinet
rust-cpython: binding for headrevs()...
r41843 .map_err(|e| GraphError::pynew(py, e))?;
Georges Racinet
rust-cpython: removed now useless py_set() conversion...
r43563 Ok(as_set)
Georges Racinet
rust-cpython: binding for headrevs()...
r41843 }
/// Create the module, with `__package__` given from parent
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)?;
// Example C code (see pyexpat.c and import.c) will "give away the
// reference", but we won't because it will be consumed once the
// Rust PyObject is dropped.
Ok(m)
}