Mercurial > public > mercurial-scm > hg
annotate rust/hg-cpython/src/exceptions.rs @ 52167:7be39c5110c9
hg-core: add a complete VFS
This will be used from Python in a later change.
More changes are needed in hg-core and rhg to properly clean up the APIs
of the old VFS implementation but it can be done when the dust settles
and we start adding more functionality to the pure Rust VFS.
author | Rapha?l Gom?s <rgomes@octobus.net> |
---|---|
date | Mon, 29 Jul 2024 20:47:43 +0200 |
parents | 4c5f6e95df84 |
children | 2fb13c3f4496 |
rev | line source |
---|---|
41184
dcf818267bc1
rust-cpython: rustdoc improvements
Georges Racinet <georges.racinet@octobus.net>
parents:
40965
diff
changeset
|
1 // ancestors.rs |
dcf818267bc1
rust-cpython: rustdoc improvements
Georges Racinet <georges.racinet@octobus.net>
parents:
40965
diff
changeset
|
2 // |
dcf818267bc1
rust-cpython: rustdoc improvements
Georges Racinet <georges.racinet@octobus.net>
parents:
40965
diff
changeset
|
3 // Copyright 2018 Georges Racinet <gracinet@anybox.fr> |
dcf818267bc1
rust-cpython: rustdoc improvements
Georges Racinet <georges.racinet@octobus.net>
parents:
40965
diff
changeset
|
4 // |
dcf818267bc1
rust-cpython: rustdoc improvements
Georges Racinet <georges.racinet@octobus.net>
parents:
40965
diff
changeset
|
5 // This software may be used and distributed according to the terms of the |
dcf818267bc1
rust-cpython: rustdoc improvements
Georges Racinet <georges.racinet@octobus.net>
parents:
40965
diff
changeset
|
6 // GNU General Public License version 2 or any later version. |
dcf818267bc1
rust-cpython: rustdoc improvements
Georges Racinet <georges.racinet@octobus.net>
parents:
40965
diff
changeset
|
7 |
dcf818267bc1
rust-cpython: rustdoc improvements
Georges Racinet <georges.racinet@octobus.net>
parents:
40965
diff
changeset
|
8 //! Bindings for Rust errors |
dcf818267bc1
rust-cpython: rustdoc improvements
Georges Racinet <georges.racinet@octobus.net>
parents:
40965
diff
changeset
|
9 //! |
dcf818267bc1
rust-cpython: rustdoc improvements
Georges Racinet <georges.racinet@octobus.net>
parents:
40965
diff
changeset
|
10 //! [`GraphError`] exposes `hg::GraphError` as a subclass of `ValueError` |
41349
ee943a920606
rust: error for WdirUnsupported with cpython conversion as exception
Georges Racinet <georges.racinet@octobus.net>
parents:
41184
diff
changeset
|
11 //! but some variants of `hg::GraphError` can be converted directly to other |
ee943a920606
rust: error for WdirUnsupported with cpython conversion as exception
Georges Racinet <georges.racinet@octobus.net>
parents:
41184
diff
changeset
|
12 //! existing Python exceptions if appropriate. |
41184
dcf818267bc1
rust-cpython: rustdoc improvements
Georges Racinet <georges.racinet@octobus.net>
parents:
40965
diff
changeset
|
13 //! |
dcf818267bc1
rust-cpython: rustdoc improvements
Georges Racinet <georges.racinet@octobus.net>
parents:
40965
diff
changeset
|
14 //! [`GraphError`]: struct.GraphError.html |
42609
326fdce22fb2
rust: switch hg-core and hg-cpython to rust 2018 edition
Rapha?l Gom?s <rgomes@octobus.net>
parents:
42557
diff
changeset
|
15 use cpython::{ |
44137
3bd77c64bc74
rust-filepatterns: remove bridge code for filepatterns-related functions
Rapha?l Gom?s <rgomes@octobus.net>
parents:
42957
diff
changeset
|
16 exc::{RuntimeError, ValueError}, |
42609
326fdce22fb2
rust: switch hg-core and hg-cpython to rust 2018 edition
Rapha?l Gom?s <rgomes@octobus.net>
parents:
42557
diff
changeset
|
17 py_exception, PyErr, Python, |
326fdce22fb2
rust: switch hg-core and hg-cpython to rust 2018 edition
Rapha?l Gom?s <rgomes@octobus.net>
parents:
42557
diff
changeset
|
18 }; |
40965
5532823e8c18
rust-cpython: start cpython crate bindings
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
19 use hg; |
5532823e8c18
rust-cpython: start cpython crate bindings
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
20 |
50976
4c5f6e95df84
rust: make `Revision` a newtype
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50972
diff
changeset
|
21 use crate::PyRevision; |
4c5f6e95df84
rust: make `Revision` a newtype
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50972
diff
changeset
|
22 |
40965
5532823e8c18
rust-cpython: start cpython crate bindings
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
23 py_exception!(rustext, GraphError, ValueError); |
5532823e8c18
rust-cpython: start cpython crate bindings
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
24 |
5532823e8c18
rust-cpython: start cpython crate bindings
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
25 impl GraphError { |
5532823e8c18
rust-cpython: start cpython crate bindings
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
26 pub fn pynew(py: Python, inner: hg::GraphError) -> PyErr { |
5532823e8c18
rust-cpython: start cpython crate bindings
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
27 match inner { |
5532823e8c18
rust-cpython: start cpython crate bindings
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
28 hg::GraphError::ParentOutOfRange(r) => { |
50976
4c5f6e95df84
rust: make `Revision` a newtype
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50972
diff
changeset
|
29 GraphError::new(py, ("ParentOutOfRange", PyRevision(r.0))) |
40965
5532823e8c18
rust-cpython: start cpython crate bindings
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
30 } |
42328
94f3a73b6672
rust-filepatterns: add `rust-cpython` bindings for `filepatterns`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
41349
diff
changeset
|
31 } |
94f3a73b6672
rust-filepatterns: add `rust-cpython` bindings for `filepatterns`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
41349
diff
changeset
|
32 } |
48519
35ebe6f824be
hg-cpython: use ancestor iterator impls from vcsgraph
pacien <pacien.trangirard@pacien.net>
parents:
44529
diff
changeset
|
33 |
35ebe6f824be
hg-cpython: use ancestor iterator impls from vcsgraph
pacien <pacien.trangirard@pacien.net>
parents:
44529
diff
changeset
|
34 pub fn pynew_from_vcsgraph( |
35ebe6f824be
hg-cpython: use ancestor iterator impls from vcsgraph
pacien <pacien.trangirard@pacien.net>
parents:
44529
diff
changeset
|
35 py: Python, |
35ebe6f824be
hg-cpython: use ancestor iterator impls from vcsgraph
pacien <pacien.trangirard@pacien.net>
parents:
44529
diff
changeset
|
36 inner: vcsgraph::graph::GraphReadError, |
35ebe6f824be
hg-cpython: use ancestor iterator impls from vcsgraph
pacien <pacien.trangirard@pacien.net>
parents:
44529
diff
changeset
|
37 ) -> PyErr { |
35ebe6f824be
hg-cpython: use ancestor iterator impls from vcsgraph
pacien <pacien.trangirard@pacien.net>
parents:
44529
diff
changeset
|
38 match inner { |
35ebe6f824be
hg-cpython: use ancestor iterator impls from vcsgraph
pacien <pacien.trangirard@pacien.net>
parents:
44529
diff
changeset
|
39 vcsgraph::graph::GraphReadError::InconsistentGraphData => { |
35ebe6f824be
hg-cpython: use ancestor iterator impls from vcsgraph
pacien <pacien.trangirard@pacien.net>
parents:
44529
diff
changeset
|
40 GraphError::new(py, "InconsistentGraphData") |
35ebe6f824be
hg-cpython: use ancestor iterator impls from vcsgraph
pacien <pacien.trangirard@pacien.net>
parents:
44529
diff
changeset
|
41 } |
35ebe6f824be
hg-cpython: use ancestor iterator impls from vcsgraph
pacien <pacien.trangirard@pacien.net>
parents:
44529
diff
changeset
|
42 vcsgraph::graph::GraphReadError::InvalidKey => { |
35ebe6f824be
hg-cpython: use ancestor iterator impls from vcsgraph
pacien <pacien.trangirard@pacien.net>
parents:
44529
diff
changeset
|
43 GraphError::new(py, "ParentOutOfRange") |
35ebe6f824be
hg-cpython: use ancestor iterator impls from vcsgraph
pacien <pacien.trangirard@pacien.net>
parents:
44529
diff
changeset
|
44 } |
35ebe6f824be
hg-cpython: use ancestor iterator impls from vcsgraph
pacien <pacien.trangirard@pacien.net>
parents:
44529
diff
changeset
|
45 vcsgraph::graph::GraphReadError::KeyedInvalidKey(r) => { |
35ebe6f824be
hg-cpython: use ancestor iterator impls from vcsgraph
pacien <pacien.trangirard@pacien.net>
parents:
44529
diff
changeset
|
46 GraphError::new(py, ("ParentOutOfRange", r)) |
35ebe6f824be
hg-cpython: use ancestor iterator impls from vcsgraph
pacien <pacien.trangirard@pacien.net>
parents:
44529
diff
changeset
|
47 } |
35ebe6f824be
hg-cpython: use ancestor iterator impls from vcsgraph
pacien <pacien.trangirard@pacien.net>
parents:
44529
diff
changeset
|
48 vcsgraph::graph::GraphReadError::WorkingDirectoryUnsupported => { |
35ebe6f824be
hg-cpython: use ancestor iterator impls from vcsgraph
pacien <pacien.trangirard@pacien.net>
parents:
44529
diff
changeset
|
49 match py |
35ebe6f824be
hg-cpython: use ancestor iterator impls from vcsgraph
pacien <pacien.trangirard@pacien.net>
parents:
44529
diff
changeset
|
50 .import("mercurial.error") |
35ebe6f824be
hg-cpython: use ancestor iterator impls from vcsgraph
pacien <pacien.trangirard@pacien.net>
parents:
44529
diff
changeset
|
51 .and_then(|m| m.get(py, "WdirUnsupported")) |
35ebe6f824be
hg-cpython: use ancestor iterator impls from vcsgraph
pacien <pacien.trangirard@pacien.net>
parents:
44529
diff
changeset
|
52 { |
35ebe6f824be
hg-cpython: use ancestor iterator impls from vcsgraph
pacien <pacien.trangirard@pacien.net>
parents:
44529
diff
changeset
|
53 Err(e) => e, |
35ebe6f824be
hg-cpython: use ancestor iterator impls from vcsgraph
pacien <pacien.trangirard@pacien.net>
parents:
44529
diff
changeset
|
54 Ok(cls) => PyErr::from_instance(py, cls), |
35ebe6f824be
hg-cpython: use ancestor iterator impls from vcsgraph
pacien <pacien.trangirard@pacien.net>
parents:
44529
diff
changeset
|
55 } |
35ebe6f824be
hg-cpython: use ancestor iterator impls from vcsgraph
pacien <pacien.trangirard@pacien.net>
parents:
44529
diff
changeset
|
56 } |
35ebe6f824be
hg-cpython: use ancestor iterator impls from vcsgraph
pacien <pacien.trangirard@pacien.net>
parents:
44529
diff
changeset
|
57 } |
35ebe6f824be
hg-cpython: use ancestor iterator impls from vcsgraph
pacien <pacien.trangirard@pacien.net>
parents:
44529
diff
changeset
|
58 } |
42328
94f3a73b6672
rust-filepatterns: add `rust-cpython` bindings for `filepatterns`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
41349
diff
changeset
|
59 } |
94f3a73b6672
rust-filepatterns: add `rust-cpython` bindings for `filepatterns`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
41349
diff
changeset
|
60 |
42957
7a01778bc7b7
rust-hgpath: replace all paths and filenames with HgPath/HgPathBuf
Rapha?l Gom?s <rgomes@octobus.net>
parents:
42752
diff
changeset
|
61 py_exception!(rustext, HgPathPyError, RuntimeError); |
44529
f96b28aa4b79
rust-status: update rust-cpython bridge to account for the changes in core
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44206
diff
changeset
|
62 py_exception!(rustext, FallbackError, RuntimeError); |
f96b28aa4b79
rust-status: update rust-cpython bridge to account for the changes in core
Rapha?l Gom?s <rgomes@octobus.net>
parents:
44206
diff
changeset
|
63 py_exception!(shared_ref, AlreadyBorrowed, RuntimeError); |