dirstate.rs
70 lines
| 2.0 KiB
| application/rls-services+xml
|
RustLexer
Raphaël Gomès
|
r42489 | // dirstate.rs | ||
// | ||||
// Copyright 2019 Raphaël Gomès <rgomes@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::dirstate` module provided by the | ||||
//! `hg-core` package. | ||||
//! | ||||
//! From Python, this will be seen as `mercurial.rustext.dirstate` | ||||
Raphaël Gomès
|
r42999 | mod copymap; | ||
Raphaël Gomès
|
r42991 | mod dirs_multiset; | ||
Raphaël Gomès
|
r42999 | mod dirstate_map; | ||
Simon Sapin
|
r48857 | mod item; | ||
Raphaël Gomès
|
r43567 | mod status; | ||
Simon Sapin
|
r48857 | use self::item::DirstateItem; | ||
Raphaël Gomès
|
r45016 | use crate::{ | ||
dirstate::{ | ||||
dirs_multiset::Dirs, dirstate_map::DirstateMap, status::status_wrapper, | ||||
}, | ||||
exceptions, | ||||
Raphaël Gomès
|
r43567 | }; | ||
Simon Sapin
|
r48858 | use cpython::{PyBytes, PyDict, PyList, PyModule, PyObject, PyResult, Python}; | ||
Simon Sapin
|
r48055 | use hg::dirstate_tree::on_disk::V2_FORMAT_MARKER; | ||
r48367 | ||||
Raphaël Gomès
|
r42489 | /// Create the module, with `__package__` given from parent | ||
pub fn init_module(py: Python, package: &str) -> PyResult<PyModule> { | ||||
let dotted_name = &format!("{}.dirstate", package); | ||||
let m = PyModule::new(py, dotted_name)?; | ||||
Raphaël Gomès
|
r42737 | |||
Raphaël Gomès
|
r46090 | env_logger::init(); | ||
Raphaël Gomès
|
r45027 | |||
Raphaël Gomès
|
r42489 | m.add(py, "__package__", package)?; | ||
m.add(py, "__doc__", "Dirstate - Rust implementation")?; | ||||
Raphaël Gomès
|
r45016 | m.add( | ||
py, | ||||
"FallbackError", | ||||
py.get_type::<exceptions::FallbackError>(), | ||||
)?; | ||||
Raphaël Gomès
|
r42737 | m.add_class::<Dirs>(py)?; | ||
Raphaël Gomès
|
r42999 | m.add_class::<DirstateMap>(py)?; | ||
Simon Sapin
|
r48857 | m.add_class::<DirstateItem>(py)?; | ||
Simon Sapin
|
r48055 | m.add(py, "V2_FORMAT_MARKER", PyBytes::new(py, V2_FORMAT_MARKER))?; | ||
Raphaël Gomès
|
r43567 | m.add( | ||
py, | ||||
"status", | ||||
py_fn!( | ||||
py, | ||||
status_wrapper( | ||||
dmap: DirstateMap, | ||||
root_dir: PyObject, | ||||
Raphaël Gomès
|
r44368 | matcher: PyObject, | ||
Raphaël Gomès
|
r45016 | ignorefiles: PyList, | ||
check_exec: bool, | ||||
list_clean: bool, | ||||
list_ignored: bool, | ||||
Raphaël Gomès
|
r45354 | list_unknown: bool, | ||
collect_traversed_dirs: bool | ||||
Raphaël Gomès
|
r43567 | ) | ||
), | ||||
)?; | ||||
Raphaël Gomès
|
r42737 | |||
Raphaël Gomès
|
r42489 | 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) | ||||
} | ||||