rust/hg-pyo3/src/revision.rs
author Pierre-Yves David <pierre-yves.david@octobus.net>
Tue, 11 Mar 2025 02:29:42 +0100
branchstable
changeset 53042 cdd7bf612c7b
parent 52841 28f0f00b5dbd
permissions -rw-r--r--
bundle-spec: properly format boolean parameter (issue6960) This was breaking automatic clone bundle generation. This changeset fixes it and add a test to catch it in the future.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
}