Mercurial > public > mercurial-scm > hg
diff rust/hg-pyo3/src/convert_cpython.rs @ 52533:6b694bdf752a
rust-pyo3: implementation of LazyAncestors
There is a difference in the implementaion of `__contains__`
between PyO3 and rust-cpython: if the specified signature in
Rust code is for a precise type (e.g., `PyRevision`) rust-cpython
would automatically convert the potential resulting `TypeError` into
`Ok(false)`, whereas PyO3 let it bubble up.
Hence we treat the case manually and add it to the common test.
In Mercurial Python code, `None in` for a `LazyAncestors` object can
really happens, namely in this lambda from `discover._postprocessobsolete`:
```
ispushed = lambda n: torev(n) in futurecommon
```
This lambda can get called with `n` such that `torev(n)` is `False`
(seen in `test-bookmarks-push-pull.t`).
author | Georges Racinet <georges.racinet@cloudcrane.io> |
---|---|
date | Sat, 07 Dec 2024 18:54:31 +0100 |
parents | 3ffcdbf0b432 |
children |
line wrap: on
line diff
--- a/rust/hg-pyo3/src/convert_cpython.rs Sat Dec 07 18:42:06 2024 +0100 +++ b/rust/hg-pyo3/src/convert_cpython.rs Sat Dec 07 18:54:31 2024 +0100 @@ -222,7 +222,6 @@ /// static reference. It is possible, depending on `T` that such a leak cannot /// occur in practice. We may later on define a marker trait for this, /// which will allow us to make declare this function to be safe. -#[allow(dead_code)] pub(crate) unsafe fn py_leaked_borrow<'a, 'py: 'a, T>( py: &impl WithGIL<'py>, leaked: &'a cpython::UnsafePyLeaked<T>,