Mercurial > public > mercurial-scm > hg
annotate rust/hg-pyo3/src/exceptions.rs @ 53042:cdd7bf612c7b stable tip
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.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Tue, 11 Mar 2025 02:29:42 +0100 |
parents | d961e09d3d8c |
children |
rev | line source |
---|---|
52853
c6707e112d96
rust-pyo3-dirstate: exceptions for dirstate errors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52850
diff
changeset
|
1 use pyo3::exceptions::{PyOSError, PyRuntimeError, PyValueError}; |
52412
6e8ba52857df
rust-pyo3: conversions to GraphError Python exception
Georges Racinet <georges.racinet@octobus.net>
parents:
52408
diff
changeset
|
2 use pyo3::import_exception; |
6e8ba52857df
rust-pyo3: conversions to GraphError Python exception
Georges Racinet <georges.racinet@octobus.net>
parents:
52408
diff
changeset
|
3 use pyo3::{create_exception, PyErr}; |
6e8ba52857df
rust-pyo3: conversions to GraphError Python exception
Georges Racinet <georges.racinet@octobus.net>
parents:
52408
diff
changeset
|
4 |
52863
ab6198160960
rust-pyo3-exceptions: helper for ValueError by calling to_string
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52859
diff
changeset
|
5 use std::fmt::Display; |
ab6198160960
rust-pyo3-exceptions: helper for ValueError by calling to_string
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52859
diff
changeset
|
6 |
52853
c6707e112d96
rust-pyo3-dirstate: exceptions for dirstate errors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52850
diff
changeset
|
7 use hg::dirstate::{on_disk::DirstateV2ParseError, DirstateError}; |
c6707e112d96
rust-pyo3-dirstate: exceptions for dirstate errors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52850
diff
changeset
|
8 |
52781
918239b55b3a
rust-pyo3-revlog: converting NodeMapError to Python ValueError
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52780
diff
changeset
|
9 use hg::revlog::nodemap::NodeMapError; |
52790
1b9907575768
rust-pyo3-revlog: helpers for revision checks
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52786
diff
changeset
|
10 use hg::UncheckedRevision; |
52781
918239b55b3a
rust-pyo3-revlog: converting NodeMapError to Python ValueError
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52780
diff
changeset
|
11 |
52412
6e8ba52857df
rust-pyo3: conversions to GraphError Python exception
Georges Racinet <georges.racinet@octobus.net>
parents:
52408
diff
changeset
|
12 use crate::revision::PyRevision; |
52408
20c0472b2ab7
rust-pyo3: defining GraphError
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
13 |
20c0472b2ab7
rust-pyo3: defining GraphError
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
14 create_exception!(pyo3_rustext, GraphError, PyValueError); |
52850
ffda57aa98fa
rust-pyo3-dirstate: defining FallbackError
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52795
diff
changeset
|
15 create_exception!(pyo3_rustext, FallbackError, PyRuntimeError); |
52412
6e8ba52857df
rust-pyo3: conversions to GraphError Python exception
Georges Racinet <georges.racinet@octobus.net>
parents:
52408
diff
changeset
|
16 import_exception!(mercurial.error, WdirUnsupported); |
6e8ba52857df
rust-pyo3: conversions to GraphError Python exception
Georges Racinet <georges.racinet@octobus.net>
parents:
52408
diff
changeset
|
17 |
6e8ba52857df
rust-pyo3: conversions to GraphError Python exception
Georges Racinet <georges.racinet@octobus.net>
parents:
52408
diff
changeset
|
18 impl GraphError { |
6e8ba52857df
rust-pyo3: conversions to GraphError Python exception
Georges Racinet <georges.racinet@octobus.net>
parents:
52408
diff
changeset
|
19 pub fn from_hg(inner: hg::GraphError) -> PyErr { |
6e8ba52857df
rust-pyo3: conversions to GraphError Python exception
Georges Racinet <georges.racinet@octobus.net>
parents:
52408
diff
changeset
|
20 match inner { |
6e8ba52857df
rust-pyo3: conversions to GraphError Python exception
Georges Racinet <georges.racinet@octobus.net>
parents:
52408
diff
changeset
|
21 hg::GraphError::ParentOutOfRange(r) => { |
6e8ba52857df
rust-pyo3: conversions to GraphError Python exception
Georges Racinet <georges.racinet@octobus.net>
parents:
52408
diff
changeset
|
22 GraphError::new_err(("ParentOutOfRange", PyRevision(r.0))) |
6e8ba52857df
rust-pyo3: conversions to GraphError Python exception
Georges Racinet <georges.racinet@octobus.net>
parents:
52408
diff
changeset
|
23 } |
52771
2fb13c3f4496
rust: add GraphError::ParentOutOfOrder
Mitchell Kember <mkember@janestreet.com>
parents:
52531
diff
changeset
|
24 hg::GraphError::ParentOutOfOrder(r) => { |
2fb13c3f4496
rust: add GraphError::ParentOutOfOrder
Mitchell Kember <mkember@janestreet.com>
parents:
52531
diff
changeset
|
25 GraphError::new_err(("ParentOutOfOrder", PyRevision(r.0))) |
2fb13c3f4496
rust: add GraphError::ParentOutOfOrder
Mitchell Kember <mkember@janestreet.com>
parents:
52531
diff
changeset
|
26 } |
52412
6e8ba52857df
rust-pyo3: conversions to GraphError Python exception
Georges Racinet <georges.racinet@octobus.net>
parents:
52408
diff
changeset
|
27 } |
6e8ba52857df
rust-pyo3: conversions to GraphError Python exception
Georges Racinet <georges.racinet@octobus.net>
parents:
52408
diff
changeset
|
28 } |
6e8ba52857df
rust-pyo3: conversions to GraphError Python exception
Georges Racinet <georges.racinet@octobus.net>
parents:
52408
diff
changeset
|
29 pub fn from_vcsgraph(inner: vcsgraph::graph::GraphReadError) -> PyErr { |
6e8ba52857df
rust-pyo3: conversions to GraphError Python exception
Georges Racinet <georges.racinet@octobus.net>
parents:
52408
diff
changeset
|
30 match inner { |
6e8ba52857df
rust-pyo3: conversions to GraphError Python exception
Georges Racinet <georges.racinet@octobus.net>
parents:
52408
diff
changeset
|
31 vcsgraph::graph::GraphReadError::InconsistentGraphData => { |
6e8ba52857df
rust-pyo3: conversions to GraphError Python exception
Georges Racinet <georges.racinet@octobus.net>
parents:
52408
diff
changeset
|
32 GraphError::new_err("InconsistentGraphData") |
6e8ba52857df
rust-pyo3: conversions to GraphError Python exception
Georges Racinet <georges.racinet@octobus.net>
parents:
52408
diff
changeset
|
33 } |
6e8ba52857df
rust-pyo3: conversions to GraphError Python exception
Georges Racinet <georges.racinet@octobus.net>
parents:
52408
diff
changeset
|
34 vcsgraph::graph::GraphReadError::InvalidKey => { |
6e8ba52857df
rust-pyo3: conversions to GraphError Python exception
Georges Racinet <georges.racinet@octobus.net>
parents:
52408
diff
changeset
|
35 GraphError::new_err("ParentOutOfRange") |
6e8ba52857df
rust-pyo3: conversions to GraphError Python exception
Georges Racinet <georges.racinet@octobus.net>
parents:
52408
diff
changeset
|
36 } |
6e8ba52857df
rust-pyo3: conversions to GraphError Python exception
Georges Racinet <georges.racinet@octobus.net>
parents:
52408
diff
changeset
|
37 vcsgraph::graph::GraphReadError::KeyedInvalidKey(r) => { |
6e8ba52857df
rust-pyo3: conversions to GraphError Python exception
Georges Racinet <georges.racinet@octobus.net>
parents:
52408
diff
changeset
|
38 GraphError::new_err(("ParentOutOfRange", r)) |
6e8ba52857df
rust-pyo3: conversions to GraphError Python exception
Georges Racinet <georges.racinet@octobus.net>
parents:
52408
diff
changeset
|
39 } |
6e8ba52857df
rust-pyo3: conversions to GraphError Python exception
Georges Racinet <georges.racinet@octobus.net>
parents:
52408
diff
changeset
|
40 vcsgraph::graph::GraphReadError::WorkingDirectoryUnsupported => { |
6e8ba52857df
rust-pyo3: conversions to GraphError Python exception
Georges Racinet <georges.racinet@octobus.net>
parents:
52408
diff
changeset
|
41 WdirUnsupported::new_err(()) |
6e8ba52857df
rust-pyo3: conversions to GraphError Python exception
Georges Racinet <georges.racinet@octobus.net>
parents:
52408
diff
changeset
|
42 } |
6e8ba52857df
rust-pyo3: conversions to GraphError Python exception
Georges Racinet <georges.racinet@octobus.net>
parents:
52408
diff
changeset
|
43 } |
6e8ba52857df
rust-pyo3: conversions to GraphError Python exception
Georges Racinet <georges.racinet@octobus.net>
parents:
52408
diff
changeset
|
44 } |
6e8ba52857df
rust-pyo3: conversions to GraphError Python exception
Georges Racinet <georges.racinet@octobus.net>
parents:
52408
diff
changeset
|
45 } |
52531
4c9e31984b3a
rust-pyo3: exposition of AncestorsIterator
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52412
diff
changeset
|
46 |
4c9e31984b3a
rust-pyo3: exposition of AncestorsIterator
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52412
diff
changeset
|
47 pub fn map_lock_error<T>(e: std::sync::PoisonError<T>) -> PyErr { |
4c9e31984b3a
rust-pyo3: exposition of AncestorsIterator
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52412
diff
changeset
|
48 PyRuntimeError::new_err(format!("In Rust PyO3 bindings: {e}")) |
4c9e31984b3a
rust-pyo3: exposition of AncestorsIterator
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52412
diff
changeset
|
49 } |
52777
32008b1e7104
rust-pyo3-revlog: Python RevlogError with helper
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52771
diff
changeset
|
50 |
52784
5e3e8876fd9e
rust-pyo3-revlog: index and nodetree read accessor helpers
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52782
diff
changeset
|
51 pub fn map_try_lock_error<T>(e: std::sync::TryLockError<T>) -> PyErr { |
5e3e8876fd9e
rust-pyo3-revlog: index and nodetree read accessor helpers
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52782
diff
changeset
|
52 PyRuntimeError::new_err(format!("In Rust PyO3 bindings: {e}")) |
5e3e8876fd9e
rust-pyo3-revlog: index and nodetree read accessor helpers
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52782
diff
changeset
|
53 } |
5e3e8876fd9e
rust-pyo3-revlog: index and nodetree read accessor helpers
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52782
diff
changeset
|
54 |
52863
ab6198160960
rust-pyo3-exceptions: helper for ValueError by calling to_string
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52859
diff
changeset
|
55 pub fn to_string_value_error<T: Display>(e: T) -> PyErr { |
ab6198160960
rust-pyo3-exceptions: helper for ValueError by calling to_string
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52859
diff
changeset
|
56 PyValueError::new_err(e.to_string()) |
ab6198160960
rust-pyo3-exceptions: helper for ValueError by calling to_string
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52859
diff
changeset
|
57 } |
ab6198160960
rust-pyo3-exceptions: helper for ValueError by calling to_string
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52859
diff
changeset
|
58 |
52777
32008b1e7104
rust-pyo3-revlog: Python RevlogError with helper
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52771
diff
changeset
|
59 pub mod mercurial_py_errors { |
32008b1e7104
rust-pyo3-revlog: Python RevlogError with helper
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52771
diff
changeset
|
60 pyo3::import_exception!(mercurial.error, RevlogError); |
32008b1e7104
rust-pyo3-revlog: Python RevlogError with helper
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52771
diff
changeset
|
61 } |
32008b1e7104
rust-pyo3-revlog: Python RevlogError with helper
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52771
diff
changeset
|
62 |
32008b1e7104
rust-pyo3-revlog: Python RevlogError with helper
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52771
diff
changeset
|
63 pub fn revlog_error_from_msg(e: impl ToString) -> PyErr { |
32008b1e7104
rust-pyo3-revlog: Python RevlogError with helper
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52771
diff
changeset
|
64 mercurial_py_errors::RevlogError::new_err(e.to_string().into_bytes()) |
32008b1e7104
rust-pyo3-revlog: Python RevlogError with helper
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52771
diff
changeset
|
65 } |
52781
918239b55b3a
rust-pyo3-revlog: converting NodeMapError to Python ValueError
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52780
diff
changeset
|
66 |
52786
4e34e8fd46d4
rust-pyo3-revlog: nodemap based index methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52784
diff
changeset
|
67 pub fn revlog_error_bare() -> PyErr { |
4e34e8fd46d4
rust-pyo3-revlog: nodemap based index methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52784
diff
changeset
|
68 mercurial_py_errors::RevlogError::new_err((None::<String>,)) |
4e34e8fd46d4
rust-pyo3-revlog: nodemap based index methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52784
diff
changeset
|
69 } |
4e34e8fd46d4
rust-pyo3-revlog: nodemap based index methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52784
diff
changeset
|
70 |
52790
1b9907575768
rust-pyo3-revlog: helpers for revision checks
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52786
diff
changeset
|
71 pub fn rev_not_in_index(rev: UncheckedRevision) -> PyErr { |
1b9907575768
rust-pyo3-revlog: helpers for revision checks
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52786
diff
changeset
|
72 PyValueError::new_err(format!("revlog index out of range: {}", rev)) |
1b9907575768
rust-pyo3-revlog: helpers for revision checks
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52786
diff
changeset
|
73 } |
1b9907575768
rust-pyo3-revlog: helpers for revision checks
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52786
diff
changeset
|
74 |
52781
918239b55b3a
rust-pyo3-revlog: converting NodeMapError to Python ValueError
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52780
diff
changeset
|
75 pub fn nodemap_error(err: NodeMapError) -> PyErr { |
918239b55b3a
rust-pyo3-revlog: converting NodeMapError to Python ValueError
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52780
diff
changeset
|
76 match err { |
918239b55b3a
rust-pyo3-revlog: converting NodeMapError to Python ValueError
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52780
diff
changeset
|
77 NodeMapError::MultipleResults => { |
918239b55b3a
rust-pyo3-revlog: converting NodeMapError to Python ValueError
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52780
diff
changeset
|
78 mercurial_py_errors::RevlogError::new_err("") |
918239b55b3a
rust-pyo3-revlog: converting NodeMapError to Python ValueError
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52780
diff
changeset
|
79 } |
918239b55b3a
rust-pyo3-revlog: converting NodeMapError to Python ValueError
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52780
diff
changeset
|
80 |
918239b55b3a
rust-pyo3-revlog: converting NodeMapError to Python ValueError
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52780
diff
changeset
|
81 NodeMapError::RevisionNotInIndex(rev) => { |
918239b55b3a
rust-pyo3-revlog: converting NodeMapError to Python ValueError
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52780
diff
changeset
|
82 PyValueError::new_err(format!( |
918239b55b3a
rust-pyo3-revlog: converting NodeMapError to Python ValueError
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52780
diff
changeset
|
83 "Inconsistency: Revision {} found in nodemap \ |
918239b55b3a
rust-pyo3-revlog: converting NodeMapError to Python ValueError
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52780
diff
changeset
|
84 is not in revlog index", |
918239b55b3a
rust-pyo3-revlog: converting NodeMapError to Python ValueError
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52780
diff
changeset
|
85 rev |
918239b55b3a
rust-pyo3-revlog: converting NodeMapError to Python ValueError
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52780
diff
changeset
|
86 )) |
918239b55b3a
rust-pyo3-revlog: converting NodeMapError to Python ValueError
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52780
diff
changeset
|
87 } |
918239b55b3a
rust-pyo3-revlog: converting NodeMapError to Python ValueError
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52780
diff
changeset
|
88 } |
918239b55b3a
rust-pyo3-revlog: converting NodeMapError to Python ValueError
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52780
diff
changeset
|
89 } |
52795
adf91dfe6c04
rust-pyo3-index: _index_headrevs
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52792
diff
changeset
|
90 |
adf91dfe6c04
rust-pyo3-index: _index_headrevs
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52792
diff
changeset
|
91 pub fn graph_error(_err: hg::GraphError) -> PyErr { |
adf91dfe6c04
rust-pyo3-index: _index_headrevs
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52792
diff
changeset
|
92 // ParentOutOfRange is currently the only alternative |
adf91dfe6c04
rust-pyo3-index: _index_headrevs
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52792
diff
changeset
|
93 // in `hg::GraphError`. The C index always raises this simple ValueError. |
adf91dfe6c04
rust-pyo3-index: _index_headrevs
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52792
diff
changeset
|
94 PyValueError::new_err("parent out of range") |
adf91dfe6c04
rust-pyo3-index: _index_headrevs
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52792
diff
changeset
|
95 } |
52853
c6707e112d96
rust-pyo3-dirstate: exceptions for dirstate errors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52850
diff
changeset
|
96 |
c6707e112d96
rust-pyo3-dirstate: exceptions for dirstate errors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52850
diff
changeset
|
97 pub fn dirstate_error(err: DirstateError) -> PyErr { |
c6707e112d96
rust-pyo3-dirstate: exceptions for dirstate errors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52850
diff
changeset
|
98 PyOSError::new_err(format!("Dirstate error: {:?}", err)) |
c6707e112d96
rust-pyo3-dirstate: exceptions for dirstate errors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52850
diff
changeset
|
99 } |
c6707e112d96
rust-pyo3-dirstate: exceptions for dirstate errors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52850
diff
changeset
|
100 |
c6707e112d96
rust-pyo3-dirstate: exceptions for dirstate errors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52850
diff
changeset
|
101 pub fn dirstate_v2_error(_err: DirstateV2ParseError) -> PyErr { |
c6707e112d96
rust-pyo3-dirstate: exceptions for dirstate errors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52850
diff
changeset
|
102 PyValueError::new_err("corrupted dirstate-v2") |
c6707e112d96
rust-pyo3-dirstate: exceptions for dirstate errors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52850
diff
changeset
|
103 } |