##// END OF EJS Templates
rust: add Vfs trait...
rust: add Vfs trait This will allow for the use of multiple vfs like in the Python implementation, as well as hiding the details of the upcoming Python vfs wrapper to hg-core.

File last commit:

r50525:c7fb9b74 default
r52761:db7dbe6f default
Show More
utils.rs
43 lines | 1.4 KiB | application/rls-services+xml | RustLexer
Georges Racinet
rust-nodemap: add utils to create `Node`s from Python objects...
r44992 use cpython::exc::ValueError;
use cpython::{PyBytes, PyDict, PyErr, PyObject, PyResult, PyTuple, Python};
use hg::revlog::Node;
Raphaël Gomès
rust-utils: introduce a debug util to print the python stack trace...
r43545
#[allow(unused)]
pub fn print_python_trace(py: Python) -> PyResult<PyObject> {
eprintln!("===============================");
eprintln!("Printing Python stack from Rust");
eprintln!("===============================");
let traceback = py.import("traceback")?;
let sys = py.import("sys")?;
let kwargs = PyDict::new(py);
kwargs.set_item(py, "file", sys.get(py, "stderr")?)?;
traceback.call(py, "print_stack", PyTuple::new(py, &[]), Some(&kwargs))
}
Georges Racinet
rust-nodemap: add utils to create `Node`s from Python objects...
r44992
// Necessary evil for the time being, could maybe be moved to
// a TryFrom in Node itself
const NODE_BYTES_LENGTH: usize = 20;
type NodeData = [u8; NODE_BYTES_LENGTH];
/// Copy incoming Python bytes given as `PyObject` into `Node`,
/// doing the necessary checks
pub fn node_from_py_object<'a>(
py: Python,
bytes: &'a PyObject,
) -> PyResult<Node> {
let as_py_bytes: &'a PyBytes = bytes.extract(py)?;
node_from_py_bytes(py, as_py_bytes)
}
/// Clone incoming Python bytes given as `PyBytes` as a `Node`,
/// doing the necessary checks.
Raphaël Gomès
rust: do a clippy pass...
r45500 pub fn node_from_py_bytes(py: Python, bytes: &PyBytes) -> PyResult<Node> {
Georges Racinet
rust-nodemap: add utils to create `Node`s from Python objects...
r44992 <NodeData>::try_from(bytes.data(py))
.map_err(|_| {
PyErr::new::<ValueError, _>(
py,
format!("{}-byte hash required", NODE_BYTES_LENGTH),
)
})
Raphaël Gomès
rust: do a clippy pass...
r45500 .map(Into::into)
Georges Racinet
rust-nodemap: add utils to create `Node`s from Python objects...
r44992 }