##// END OF EJS Templates
tests: make sha256line.py available for all tests...
tests: make sha256line.py available for all tests This was previously only used in test-revlog-delta-find.t, but it will be useful (and used) in other tests that might need to generate poorly-compressible files.

File last commit:

r52114:5a7d5fd6 default
r52254:fa4c4fa2 stable
Show More
conversion.rs
46 lines | 1.5 KiB | application/rls-services+xml | RustLexer
// conversion.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::ancestors module provided by the
//! `hg-core` crate. From Python, this will be seen as `rustext.ancestor`
use cpython::{ObjectProtocol, PyErr, PyObject, PyResult, Python};
use hg::{Revision, RevlogIndex, UncheckedRevision};
use crate::{exceptions::GraphError, PyRevision};
/// Utility function to convert a Python iterable into various collections
///
/// We need this in particular to feed to various methods of inner objects
/// with `impl IntoIterator<Item=Revision>` arguments, because
/// a `PyErr` can arise at each step of iteration, whereas these methods
/// expect iterables over `Revision`, not over some `Result<Revision, PyErr>`
pub fn rev_pyiter_collect<C, I>(
py: Python,
revs: &PyObject,
index: &I,
) -> PyResult<C>
where
C: FromIterator<Revision>,
I: RevlogIndex,
{
revs.iter(py)?
.map(|r| {
r.and_then(|o| match o.extract::<PyRevision>(py) {
Ok(r) => index
.check_revision(UncheckedRevision(r.0))
.ok_or_else(|| {
PyErr::new::<GraphError, _>(
py,
("InvalidRevision", r.0),
)
}),
Err(e) => Err(e),
})
})
.collect()
}