diff --git a/rust/hg-core/src/lib.rs b/rust/hg-core/src/lib.rs --- a/rust/hg-core/src/lib.rs +++ b/rust/hg-core/src/lib.rs @@ -33,4 +33,5 @@ pub trait Graph { #[derive(Clone, Debug, PartialEq)] pub enum GraphError { ParentOutOfRange(Revision), + WorkingDirectoryUnsupported, } diff --git a/rust/hg-cpython/src/exceptions.rs b/rust/hg-cpython/src/exceptions.rs --- a/rust/hg-cpython/src/exceptions.rs +++ b/rust/hg-cpython/src/exceptions.rs @@ -8,6 +8,8 @@ //! Bindings for Rust errors //! //! [`GraphError`] exposes `hg::GraphError` as a subclass of `ValueError` +//! but some variants of `hg::GraphError` can be converted directly to other +//! existing Python exceptions if appropriate. //! //! [`GraphError`]: struct.GraphError.html use cpython::exc::ValueError; @@ -22,6 +24,15 @@ impl GraphError { hg::GraphError::ParentOutOfRange(r) => { GraphError::new(py, ("ParentOutOfRange", r)) } + hg::GraphError::WorkingDirectoryUnsupported => { + match py + .import("mercurial.error") + .and_then(|m| m.get(py, "WdirUnsupported")) + { + Err(e) => e, + Ok(cls) => PyErr::from_instance(py, cls), + } + } } } }