Alphare created this revision. Herald added a subscriber: mercurial-devel. Herald added a reviewer: hg-reviewers.
REVISION SUMMARY This also updates the copyright notice REPOSITORY rHG Mercurial BRANCH default REVISION DETAIL https://phab.mercurial-scm.org/D8156 AFFECTED FILES rust/hg-cpython/src/revlog.rs CHANGE DETAILS diff --git a/rust/hg-cpython/src/revlog.rs b/rust/hg-cpython/src/revlog.rs --- a/rust/hg-cpython/src/revlog.rs +++ b/rust/hg-cpython/src/revlog.rs @@ -1,16 +1,16 @@ // revlog.rs // -// Copyright 2019 Georges Racinet <georges.raci...@octobus.net> +// Copyright 2019-2020 Georges Racinet <georges.raci...@octobus.net> // // This software may be used and distributed according to the terms of the // GNU General Public License version 2 or any later version. use crate::cindex; use cpython::{ - ObjectProtocol, PyClone, PyDict, PyModule, PyObject, PyResult, PyTuple, - Python, PythonObject, ToPyObject, + exc::ValueError, ObjectProtocol, PyClone, PyDict, PyErr, PyModule, + PyObject, PyResult, PyTuple, Python, PythonObject, ToPyObject, }; -use hg::Revision; +use hg::{nodemap::NodeMapError, NodeError, Revision}; use std::cell::RefCell; /// Return a Struct implementing the Graph trait @@ -224,6 +224,43 @@ } } +fn revlog_error(py: Python) -> PyErr { + match py + .import("mercurial.error") + .and_then(|m| m.get(py, "RevlogError")) + { + Err(e) => e, + Ok(cls) => PyErr::from_instance(py, cls), + } +} + +fn rev_not_in_index(py: Python, rev: Revision) -> PyErr { + PyErr::new::<ValueError, _>( + py, + format!( + "Inconsistency: Revision {} found in nodemap \ + is not in revlog index", + rev + ), + ) +} + +/// Standard treatment of NodeMapError +fn nodemap_error(py: Python, err: NodeMapError) -> PyErr { + match err { + NodeMapError::MultipleResults => revlog_error(py), + NodeMapError::RevisionNotInIndex(r) => rev_not_in_index(py, r), + NodeMapError::InvalidNodePrefix(s) => invalid_node_prefix(py, &s), + } +} + +fn invalid_node_prefix(py: Python, ne: &NodeError) -> PyErr { + PyErr::new::<ValueError, _>( + py, + format!("Invalid node or prefix: {:?}", ne), + ) +} + /// Create the module, with __package__ given from parent pub fn init_module(py: Python, package: &str) -> PyResult<PyModule> { let dotted_name = &format!("{}.revlog", package); To: Alphare, #hg-reviewers Cc: mercurial-devel _______________________________________________ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel