##// END OF EJS Templates
packaging: isolate invocation of WiX to own function...
packaging: isolate invocation of WiX to own function Like we did for Inno, we want to split out the building of Mercurial from invoking the packaging tool so that we can introduce an alternate build mechanism. As part of this refactor, there are inconsequential changes to file layouts. Before, some shared files such as the WiX binaries and merge modules would be installed under build/. Now, they are installed under build/wix-*. This is to keep implementation simpler. But it also helps keep build state more isolated. Differential Revision: https://phab.mercurial-scm.org/D8474

File last commit:

r44398:f98f0e3d default
r45257:11bd68a9 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)
}