annotate rust/hg-pyo3/src/revision.rs @ 52853:c6707e112d96

rust-pyo3-dirstate: exceptions for dirstate errors
author Georges Racinet <georges.racinet@cloudcrane.io>
date Wed, 29 Jan 2025 14:03:24 +0100
parents 28f0f00b5dbd
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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::*;
52807
0fc15732fe7b rust-pyo3: helper to return sets of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52795
diff changeset
2 use pyo3::types::{PyList, PySet};
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
52790
1b9907575768 rust-pyo3-revlog: helpers for revision checks
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52534
diff changeset
7 use crate::exceptions::{rev_not_in_index, GraphError};
52841
28f0f00b5dbd rust-pyo3: rename the `util` file to `utils`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 52838
diff changeset
8 use crate::utils::proxy_index_extract;
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 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
111 py: Python<'_>,
5ad4ed71fbe0 rust-pyo3: helper to build Python lists of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52792
diff changeset
112 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
113 ) -> PyResult<Py<PyList>>
5ad4ed71fbe0 rust-pyo3: helper to build Python lists of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52792
diff changeset
114 where
5ad4ed71fbe0 rust-pyo3: helper to build Python lists of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52792
diff changeset
115 U: ExactSizeIterator<Item = Revision>,
5ad4ed71fbe0 rust-pyo3: helper to build Python lists of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52792
diff changeset
116 {
5ad4ed71fbe0 rust-pyo3: helper to build Python lists of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52792
diff changeset
117 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
118 }
52807
0fc15732fe7b rust-pyo3: helper to return sets of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52795
diff changeset
119
0fc15732fe7b rust-pyo3: helper to return sets of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52795
diff changeset
120 pub fn revs_py_set<U>(
0fc15732fe7b rust-pyo3: helper to return sets of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52795
diff changeset
121 py: Python<'_>,
0fc15732fe7b rust-pyo3: helper to return sets of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52795
diff changeset
122 revs: impl IntoIterator<Item = Revision, IntoIter = U>,
0fc15732fe7b rust-pyo3: helper to return sets of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52795
diff changeset
123 ) -> PyResult<Py<PySet>>
0fc15732fe7b rust-pyo3: helper to return sets of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52795
diff changeset
124 where
0fc15732fe7b rust-pyo3: helper to return sets of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52795
diff changeset
125 U: ExactSizeIterator<Item = Revision>,
0fc15732fe7b rust-pyo3: helper to return sets of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52795
diff changeset
126 {
0fc15732fe7b rust-pyo3: helper to return sets of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52795
diff changeset
127 Ok(PySet::new(py, revs.into_iter().map(PyRevision::from))?.unbind())
0fc15732fe7b rust-pyo3: helper to return sets of revisions
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52795
diff changeset
128 }