rust/hg-pyo3/src/exceptions.rs
author Georges Racinet <georges.racinet@cloudcrane.io>
Wed, 25 Dec 2024 13:37:26 +0100
changeset 52781 918239b55b3a
parent 52780 42b219a1404a
child 52782 827889802d11
permissions -rw-r--r--
rust-pyo3-revlog: converting NodeMapError to Python ValueError
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
52531
4c9e31984b3a rust-pyo3: exposition of AncestorsIterator
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52412
diff changeset
     1
use pyo3::exceptions::{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
52781
918239b55b3a rust-pyo3-revlog: converting NodeMapError to Python ValueError
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52780
diff changeset
     5
use hg::revlog::nodemap::NodeMapError;
918239b55b3a rust-pyo3-revlog: converting NodeMapError to Python ValueError
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52780
diff changeset
     6
52412
6e8ba52857df rust-pyo3: conversions to GraphError Python exception
Georges Racinet <georges.racinet@octobus.net>
parents: 52408
diff changeset
     7
use crate::revision::PyRevision;
52408
20c0472b2ab7 rust-pyo3: defining GraphError
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff changeset
     8
20c0472b2ab7 rust-pyo3: defining GraphError
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff changeset
     9
create_exception!(pyo3_rustext, GraphError, PyValueError);
52412
6e8ba52857df rust-pyo3: conversions to GraphError Python exception
Georges Racinet <georges.racinet@octobus.net>
parents: 52408
diff changeset
    10
import_exception!(mercurial.error, WdirUnsupported);
6e8ba52857df rust-pyo3: conversions to GraphError Python exception
Georges Racinet <georges.racinet@octobus.net>
parents: 52408
diff changeset
    11
6e8ba52857df rust-pyo3: conversions to GraphError Python exception
Georges Racinet <georges.racinet@octobus.net>
parents: 52408
diff changeset
    12
impl GraphError {
6e8ba52857df rust-pyo3: conversions to GraphError Python exception
Georges Racinet <georges.racinet@octobus.net>
parents: 52408
diff changeset
    13
    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
    14
        match inner {
6e8ba52857df rust-pyo3: conversions to GraphError Python exception
Georges Racinet <georges.racinet@octobus.net>
parents: 52408
diff changeset
    15
            hg::GraphError::ParentOutOfRange(r) => {
6e8ba52857df rust-pyo3: conversions to GraphError Python exception
Georges Racinet <georges.racinet@octobus.net>
parents: 52408
diff changeset
    16
                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
    17
            }
52771
2fb13c3f4496 rust: add GraphError::ParentOutOfOrder
Mitchell Kember <mkember@janestreet.com>
parents: 52531
diff changeset
    18
            hg::GraphError::ParentOutOfOrder(r) => {
2fb13c3f4496 rust: add GraphError::ParentOutOfOrder
Mitchell Kember <mkember@janestreet.com>
parents: 52531
diff changeset
    19
                GraphError::new_err(("ParentOutOfOrder", PyRevision(r.0)))
2fb13c3f4496 rust: add GraphError::ParentOutOfOrder
Mitchell Kember <mkember@janestreet.com>
parents: 52531
diff changeset
    20
            }
52412
6e8ba52857df rust-pyo3: conversions to GraphError Python exception
Georges Racinet <georges.racinet@octobus.net>
parents: 52408
diff changeset
    21
        }
6e8ba52857df rust-pyo3: conversions to GraphError Python exception
Georges Racinet <georges.racinet@octobus.net>
parents: 52408
diff changeset
    22
    }
6e8ba52857df rust-pyo3: conversions to GraphError Python exception
Georges Racinet <georges.racinet@octobus.net>
parents: 52408
diff changeset
    23
    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
    24
        match inner {
6e8ba52857df rust-pyo3: conversions to GraphError Python exception
Georges Racinet <georges.racinet@octobus.net>
parents: 52408
diff changeset
    25
            vcsgraph::graph::GraphReadError::InconsistentGraphData => {
6e8ba52857df rust-pyo3: conversions to GraphError Python exception
Georges Racinet <georges.racinet@octobus.net>
parents: 52408
diff changeset
    26
                GraphError::new_err("InconsistentGraphData")
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
            vcsgraph::graph::GraphReadError::InvalidKey => {
6e8ba52857df rust-pyo3: conversions to GraphError Python exception
Georges Racinet <georges.racinet@octobus.net>
parents: 52408
diff changeset
    29
                GraphError::new_err("ParentOutOfRange")
6e8ba52857df rust-pyo3: conversions to GraphError Python exception
Georges Racinet <georges.racinet@octobus.net>
parents: 52408
diff changeset
    30
            }
6e8ba52857df rust-pyo3: conversions to GraphError Python exception
Georges Racinet <georges.racinet@octobus.net>
parents: 52408
diff changeset
    31
            vcsgraph::graph::GraphReadError::KeyedInvalidKey(r) => {
6e8ba52857df rust-pyo3: conversions to GraphError Python exception
Georges Racinet <georges.racinet@octobus.net>
parents: 52408
diff changeset
    32
                GraphError::new_err(("ParentOutOfRange", r))
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::WorkingDirectoryUnsupported => {
6e8ba52857df rust-pyo3: conversions to GraphError Python exception
Georges Racinet <georges.racinet@octobus.net>
parents: 52408
diff changeset
    35
                WdirUnsupported::new_err(())
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
        }
6e8ba52857df rust-pyo3: conversions to GraphError Python exception
Georges Racinet <georges.racinet@octobus.net>
parents: 52408
diff changeset
    38
    }
6e8ba52857df rust-pyo3: conversions to GraphError Python exception
Georges Racinet <georges.racinet@octobus.net>
parents: 52408
diff changeset
    39
}
52531
4c9e31984b3a rust-pyo3: exposition of AncestorsIterator
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52412
diff changeset
    40
4c9e31984b3a rust-pyo3: exposition of AncestorsIterator
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52412
diff changeset
    41
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
    42
    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
    43
}
52777
32008b1e7104 rust-pyo3-revlog: Python RevlogError with helper
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52771
diff changeset
    44
32008b1e7104 rust-pyo3-revlog: Python RevlogError with helper
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52771
diff changeset
    45
/// Submodule to hold Mercurial errors defined on the Python side
32008b1e7104 rust-pyo3-revlog: Python RevlogError with helper
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52771
diff changeset
    46
///
32008b1e7104 rust-pyo3-revlog: Python RevlogError with helper
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52771
diff changeset
    47
/// This is better for clarity, as many hg-core errors have the same names
32008b1e7104 rust-pyo3-revlog: Python RevlogError with helper
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52771
diff changeset
    48
/// as their Python world counterparts
32008b1e7104 rust-pyo3-revlog: Python RevlogError with helper
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52771
diff changeset
    49
pub mod mercurial_py_errors {
32008b1e7104 rust-pyo3-revlog: Python RevlogError with helper
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52771
diff changeset
    50
    pyo3::import_exception!(mercurial.error, RevlogError);
32008b1e7104 rust-pyo3-revlog: Python RevlogError with helper
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52771
diff changeset
    51
}
32008b1e7104 rust-pyo3-revlog: Python RevlogError with helper
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52771
diff changeset
    52
32008b1e7104 rust-pyo3-revlog: Python RevlogError with helper
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52771
diff changeset
    53
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
    54
    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
    55
}
52781
918239b55b3a rust-pyo3-revlog: converting NodeMapError to Python ValueError
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52780
diff changeset
    56
918239b55b3a rust-pyo3-revlog: converting NodeMapError to Python ValueError
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52780
diff changeset
    57
#[allow(dead_code)]
918239b55b3a rust-pyo3-revlog: converting NodeMapError to Python ValueError
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52780
diff changeset
    58
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
    59
    match err {
918239b55b3a rust-pyo3-revlog: converting NodeMapError to Python ValueError
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52780
diff changeset
    60
        NodeMapError::MultipleResults => {
918239b55b3a rust-pyo3-revlog: converting NodeMapError to Python ValueError
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52780
diff changeset
    61
            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
    62
        }
918239b55b3a rust-pyo3-revlog: converting NodeMapError to Python ValueError
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52780
diff changeset
    63
918239b55b3a rust-pyo3-revlog: converting NodeMapError to Python ValueError
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52780
diff changeset
    64
        NodeMapError::RevisionNotInIndex(rev) => {
918239b55b3a rust-pyo3-revlog: converting NodeMapError to Python ValueError
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52780
diff changeset
    65
            PyValueError::new_err(format!(
918239b55b3a rust-pyo3-revlog: converting NodeMapError to Python ValueError
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52780
diff changeset
    66
                "Inconsistency: Revision {} found in nodemap \
918239b55b3a rust-pyo3-revlog: converting NodeMapError to Python ValueError
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52780
diff changeset
    67
             is not in revlog index",
918239b55b3a rust-pyo3-revlog: converting NodeMapError to Python ValueError
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52780
diff changeset
    68
                rev
918239b55b3a rust-pyo3-revlog: converting NodeMapError to Python ValueError
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52780
diff changeset
    69
            ))
918239b55b3a rust-pyo3-revlog: converting NodeMapError to Python ValueError
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52780
diff changeset
    70
        }
918239b55b3a rust-pyo3-revlog: converting NodeMapError to Python ValueError
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52780
diff changeset
    71
    }
918239b55b3a rust-pyo3-revlog: converting NodeMapError to Python ValueError
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52780
diff changeset
    72
}