Mercurial > public > mercurial-scm > hg
annotate rust/hg-pyo3/src/revision.rs @ 52794:5ad4ed71fbe0
rust-pyo3: helper to build Python lists of revisions
It really seems that the PyO3 bindings will perform less copying
than their rust-cpython counterparts: instead of building a vector
with the results (first copy) then passing a reference to `PyList::new`,
(that therefore would have to copy again), we can pass an iterator
of the elements, as long as they have a single type (`PyRevision`) in
this case.
author | Georges Racinet <georges.racinet@cloudcrane.io> |
---|---|
date | Wed, 25 Dec 2024 19:05:27 +0100 |
parents | acae91fad6be |
children | adf91dfe6c04 |
rev | line source |
---|---|
52409
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
1 use pyo3::prelude::*; |
52794
5ad4ed71fbe0
rust-pyo3: helper to build Python lists of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52792
diff
changeset
|
2 use pyo3::types::PyList; |
52409
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
3 |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
4 use hg::revlog::RevlogIndex; |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
5 use hg::{BaseRevision, Revision, UncheckedRevision}; |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
6 |
52534
9af0330788a5
rust-pyo3: new helper for incoming iterables of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52409
diff
changeset
|
7 use crate::convert_cpython::proxy_index_extract; |
52790
1b9907575768
rust-pyo3-revlog: helpers for revision checks
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52534
diff
changeset
|
8 use crate::exceptions::{rev_not_in_index, GraphError}; |
52409
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
9 |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
10 /// Revision as exposed to/from the Python layer. |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
11 /// |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
12 /// We need this indirection because of the orphan rule, meaning we can't |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
13 /// implement a foreign trait (like [`cpython::ToPyObject`]) |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
14 /// for a foreign type (like [`hg::UncheckedRevision`]). |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
15 /// |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
16 /// This also acts as a deterrent against blindly trusting Python to send |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
17 /// us valid revision numbers. |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
18 #[derive( |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
19 Debug, |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
20 Copy, |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
21 Clone, |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
22 PartialEq, |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
23 Eq, |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
24 PartialOrd, |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
25 Ord, |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
26 Hash, |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
27 derive_more::From, |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
28 IntoPyObject, |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
29 FromPyObject, |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
30 )] |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
31 pub struct PyRevision(pub BaseRevision); |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
32 |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
33 impl From<Revision> for PyRevision { |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
34 fn from(r: Revision) -> Self { |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
35 PyRevision(r.0) |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
36 } |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
37 } |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
38 |
52790
1b9907575768
rust-pyo3-revlog: helpers for revision checks
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52534
diff
changeset
|
39 impl From<PyRevision> for UncheckedRevision { |
1b9907575768
rust-pyo3-revlog: helpers for revision checks
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52534
diff
changeset
|
40 fn from(val: PyRevision) -> Self { |
1b9907575768
rust-pyo3-revlog: helpers for revision checks
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52534
diff
changeset
|
41 val.0.into() |
1b9907575768
rust-pyo3-revlog: helpers for revision checks
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52534
diff
changeset
|
42 } |
1b9907575768
rust-pyo3-revlog: helpers for revision checks
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52534
diff
changeset
|
43 } |
1b9907575768
rust-pyo3-revlog: helpers for revision checks
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52534
diff
changeset
|
44 |
1b9907575768
rust-pyo3-revlog: helpers for revision checks
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52534
diff
changeset
|
45 pub fn check_revision( |
1b9907575768
rust-pyo3-revlog: helpers for revision checks
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52534
diff
changeset
|
46 index: &impl RevlogIndex, |
1b9907575768
rust-pyo3-revlog: helpers for revision checks
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52534
diff
changeset
|
47 rev: impl Into<UncheckedRevision>, |
1b9907575768
rust-pyo3-revlog: helpers for revision checks
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52534
diff
changeset
|
48 ) -> PyResult<Revision> { |
1b9907575768
rust-pyo3-revlog: helpers for revision checks
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52534
diff
changeset
|
49 let rev = rev.into(); |
1b9907575768
rust-pyo3-revlog: helpers for revision checks
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52534
diff
changeset
|
50 index |
1b9907575768
rust-pyo3-revlog: helpers for revision checks
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52534
diff
changeset
|
51 .check_revision(rev) |
1b9907575768
rust-pyo3-revlog: helpers for revision checks
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52534
diff
changeset
|
52 .ok_or_else(|| rev_not_in_index(rev)) |
1b9907575768
rust-pyo3-revlog: helpers for revision checks
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52534
diff
changeset
|
53 } |
1b9907575768
rust-pyo3-revlog: helpers for revision checks
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52534
diff
changeset
|
54 |
52409
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
55 /// Utility function to convert a Python iterable into various collections |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
56 /// |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
57 /// We need this in particular |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
58 /// - because of the checked upgrade from [`PyRevision`] to [`Revision`]. |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
59 /// - to feed to various methods of inner objects with `impl |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
60 /// IntoIterator<Item=Revision>` arguments, because a `PyErr` can arise at |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
61 /// each step of iteration, whereas these methods expect iterables over |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
62 /// `Revision`, not over some `Result<Revision, PyErr>` |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
63 pub fn rev_pyiter_collect<C, I>( |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
64 revs: &Bound<'_, PyAny>, |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
65 index: &I, |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
66 ) -> PyResult<C> |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
67 where |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
68 C: FromIterator<Revision>, |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
69 I: RevlogIndex, |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
70 { |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
71 rev_pyiter_collect_or_else(revs, index, |r| { |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
72 PyErr::new::<GraphError, _>(("InvalidRevision", r.0)) |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
73 }) |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
74 } |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
75 |
52534
9af0330788a5
rust-pyo3: new helper for incoming iterables of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52409
diff
changeset
|
76 pub fn rev_pyiter_collect_with_py_index<C>( |
9af0330788a5
rust-pyo3: new helper for incoming iterables of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52409
diff
changeset
|
77 revs: &Bound<'_, PyAny>, |
9af0330788a5
rust-pyo3: new helper for incoming iterables of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52409
diff
changeset
|
78 proxy_index: &Bound<'_, PyAny>, |
9af0330788a5
rust-pyo3: new helper for incoming iterables of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52409
diff
changeset
|
79 ) -> PyResult<C> |
9af0330788a5
rust-pyo3: new helper for incoming iterables of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52409
diff
changeset
|
80 where |
9af0330788a5
rust-pyo3: new helper for incoming iterables of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52409
diff
changeset
|
81 C: FromIterator<Revision>, |
9af0330788a5
rust-pyo3: new helper for incoming iterables of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52409
diff
changeset
|
82 { |
9af0330788a5
rust-pyo3: new helper for incoming iterables of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52409
diff
changeset
|
83 // Safety: we don't leak the "faked" reference out of `UnsafePyLeaked` |
9af0330788a5
rust-pyo3: new helper for incoming iterables of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52409
diff
changeset
|
84 let borrowed_idx = unsafe { proxy_index_extract(proxy_index)? }; |
9af0330788a5
rust-pyo3: new helper for incoming iterables of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52409
diff
changeset
|
85 rev_pyiter_collect(revs, borrowed_idx) |
9af0330788a5
rust-pyo3: new helper for incoming iterables of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52409
diff
changeset
|
86 } |
9af0330788a5
rust-pyo3: new helper for incoming iterables of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52409
diff
changeset
|
87 |
52409
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
88 /// Same as [`rev_pyiter_collect`], giving control on returned errors |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
89 pub fn rev_pyiter_collect_or_else<C, I>( |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
90 revs: &Bound<'_, PyAny>, |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
91 index: &I, |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
92 invalid_rev_error: impl FnOnce(PyRevision) -> PyErr + Copy, |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
93 ) -> PyResult<C> |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
94 where |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
95 C: FromIterator<Revision>, |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
96 I: RevlogIndex, |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
97 { |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
98 revs.try_iter()? |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
99 .map(|r| { |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
100 r.and_then(|o| match o.extract::<PyRevision>() { |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
101 Ok(r) => index |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
102 .check_revision(UncheckedRevision(r.0)) |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
103 .ok_or_else(|| invalid_rev_error(r)), |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
104 Err(e) => Err(e), |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
105 }) |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
106 }) |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
107 .collect() |
a642c0a3860f
rust-pyo3: conversion helpers for Revision objects
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
108 } |
52794
5ad4ed71fbe0
rust-pyo3: helper to build Python lists of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52792
diff
changeset
|
109 |
5ad4ed71fbe0
rust-pyo3: helper to build Python lists of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52792
diff
changeset
|
110 #[allow(dead_code)] |
5ad4ed71fbe0
rust-pyo3: helper to build Python lists of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52792
diff
changeset
|
111 pub fn revs_py_list<U>( |
5ad4ed71fbe0
rust-pyo3: helper to build Python lists of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52792
diff
changeset
|
112 py: Python<'_>, |
5ad4ed71fbe0
rust-pyo3: helper to build Python lists of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52792
diff
changeset
|
113 revs: impl IntoIterator<Item = Revision, IntoIter = U>, |
5ad4ed71fbe0
rust-pyo3: helper to build Python lists of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52792
diff
changeset
|
114 ) -> PyResult<Py<PyList>> |
5ad4ed71fbe0
rust-pyo3: helper to build Python lists of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52792
diff
changeset
|
115 where |
5ad4ed71fbe0
rust-pyo3: helper to build Python lists of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52792
diff
changeset
|
116 U: ExactSizeIterator<Item = Revision>, |
5ad4ed71fbe0
rust-pyo3: helper to build Python lists of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52792
diff
changeset
|
117 { |
5ad4ed71fbe0
rust-pyo3: helper to build Python lists of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52792
diff
changeset
|
118 Ok(PyList::new(py, revs.into_iter().map(PyRevision::from))?.unbind()) |
5ad4ed71fbe0
rust-pyo3: helper to build Python lists of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52792
diff
changeset
|
119 } |