Mercurial > public > mercurial-scm > hg-stable
annotate rust/hg-cpython/src/exceptions.rs @ 44278:2a24ead003f0
rust-cpython: add panicking version of borrow_mut() and use it
The original borrow_mut() is renamed to try_borrow_mut().
Since leak_immutable() no longer incref the borrow count, the caller should
know if the underlying value is borrowed or not. No Python world is involved.
That's why we can simply use the panicking borrow_mut().
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Sat, 12 Oct 2019 23:34:05 +0900 |
parents | 3bd77c64bc74 |
children | 9804badd5970 |
rev | line source |
---|---|
41184
dcf818267bc1
rust-cpython: rustdoc improvements
Georges Racinet <georges.racinet@octobus.net>
parents:
40978
diff
changeset
|
1 // ancestors.rs |
dcf818267bc1
rust-cpython: rustdoc improvements
Georges Racinet <georges.racinet@octobus.net>
parents:
40978
diff
changeset
|
2 // |
dcf818267bc1
rust-cpython: rustdoc improvements
Georges Racinet <georges.racinet@octobus.net>
parents:
40978
diff
changeset
|
3 // Copyright 2018 Georges Racinet <gracinet@anybox.fr> |
dcf818267bc1
rust-cpython: rustdoc improvements
Georges Racinet <georges.racinet@octobus.net>
parents:
40978
diff
changeset
|
4 // |
dcf818267bc1
rust-cpython: rustdoc improvements
Georges Racinet <georges.racinet@octobus.net>
parents:
40978
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:
40978
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:
40978
diff
changeset
|
7 |
dcf818267bc1
rust-cpython: rustdoc improvements
Georges Racinet <georges.racinet@octobus.net>
parents:
40978
diff
changeset
|
8 //! Bindings for Rust errors |
dcf818267bc1
rust-cpython: rustdoc improvements
Georges Racinet <georges.racinet@octobus.net>
parents:
40978
diff
changeset
|
9 //! |
dcf818267bc1
rust-cpython: rustdoc improvements
Georges Racinet <georges.racinet@octobus.net>
parents:
40978
diff
changeset
|
10 //! [`GraphError`] exposes `hg::GraphError` as a subclass of `ValueError` |
41309
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:
40978
diff
changeset
|
13 //! |
dcf818267bc1
rust-cpython: rustdoc improvements
Georges Racinet <georges.racinet@octobus.net>
parents:
40978
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:
42560
diff
changeset
|
15 use cpython::{ |
44222
3bd77c64bc74
rust-filepatterns: remove bridge code for filepatterns-related functions
Rapha?l Gom?s <rgomes@octobus.net>
parents:
42960
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:
42560
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:
42560
diff
changeset
|
18 }; |
40978
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 |
5532823e8c18
rust-cpython: start cpython crate bindings
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
21 py_exception!(rustext, GraphError, ValueError); |
5532823e8c18
rust-cpython: start cpython crate bindings
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
22 |
5532823e8c18
rust-cpython: start cpython crate bindings
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
23 impl GraphError { |
5532823e8c18
rust-cpython: start cpython crate bindings
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
24 pub fn pynew(py: Python, inner: hg::GraphError) -> PyErr { |
5532823e8c18
rust-cpython: start cpython crate bindings
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
25 match inner { |
5532823e8c18
rust-cpython: start cpython crate bindings
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
26 hg::GraphError::ParentOutOfRange(r) => { |
5532823e8c18
rust-cpython: start cpython crate bindings
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
27 GraphError::new(py, ("ParentOutOfRange", r)) |
5532823e8c18
rust-cpython: start cpython crate bindings
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
28 } |
41309
ee943a920606
rust: error for WdirUnsupported with cpython conversion as exception
Georges Racinet <georges.racinet@octobus.net>
parents:
41184
diff
changeset
|
29 hg::GraphError::WorkingDirectoryUnsupported => { |
ee943a920606
rust: error for WdirUnsupported with cpython conversion as exception
Georges Racinet <georges.racinet@octobus.net>
parents:
41184
diff
changeset
|
30 match py |
ee943a920606
rust: error for WdirUnsupported with cpython conversion as exception
Georges Racinet <georges.racinet@octobus.net>
parents:
41184
diff
changeset
|
31 .import("mercurial.error") |
ee943a920606
rust: error for WdirUnsupported with cpython conversion as exception
Georges Racinet <georges.racinet@octobus.net>
parents:
41184
diff
changeset
|
32 .and_then(|m| m.get(py, "WdirUnsupported")) |
42560
d26e4a434fe5
rust: run rfmt on all hg-core/hg-cpython code
Rapha?l Gom?s <rgomes@octobus.net>
parents:
42350
diff
changeset
|
33 { |
d26e4a434fe5
rust: run rfmt on all hg-core/hg-cpython code
Rapha?l Gom?s <rgomes@octobus.net>
parents:
42350
diff
changeset
|
34 Err(e) => e, |
d26e4a434fe5
rust: run rfmt on all hg-core/hg-cpython code
Rapha?l Gom?s <rgomes@octobus.net>
parents:
42350
diff
changeset
|
35 Ok(cls) => PyErr::from_instance(py, cls), |
d26e4a434fe5
rust: run rfmt on all hg-core/hg-cpython code
Rapha?l Gom?s <rgomes@octobus.net>
parents:
42350
diff
changeset
|
36 } |
42350
94f3a73b6672
rust-filepatterns: add `rust-cpython` bindings for `filepatterns`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
41309
diff
changeset
|
37 } |
94f3a73b6672
rust-filepatterns: add `rust-cpython` bindings for `filepatterns`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
41309
diff
changeset
|
38 } |
94f3a73b6672
rust-filepatterns: add `rust-cpython` bindings for `filepatterns`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
41309
diff
changeset
|
39 } |
94f3a73b6672
rust-filepatterns: add `rust-cpython` bindings for `filepatterns`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
41309
diff
changeset
|
40 } |
94f3a73b6672
rust-filepatterns: add `rust-cpython` bindings for `filepatterns`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
41309
diff
changeset
|
41 |
42960
7a01778bc7b7
rust-hgpath: replace all paths and filenames with HgPath/HgPathBuf
Rapha?l Gom?s <rgomes@octobus.net>
parents:
42768
diff
changeset
|
42 py_exception!(rustext, HgPathPyError, RuntimeError); |
42350
94f3a73b6672
rust-filepatterns: add `rust-cpython` bindings for `filepatterns`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
41309
diff
changeset
|
43 |
42768
30320c7bf79f
rust-cpython: add macro for sharing references
Rapha?l Gom?s <rgomes@octobus.net>
parents:
42609
diff
changeset
|
44 py_exception!(shared_ref, AlreadyBorrowed, RuntimeError); |