##// END OF EJS Templates
typing: make `bundlerepository` subclass `localrepository` while type checking...
typing: make `bundlerepository` subclass `localrepository` while type checking Currently, `mercurial/bundlerepo.py` is excluded from pytype, mostly because it complains that various `ui` and `vfs` fields in `localrepository` are missing. (`bundlerepository` dynamically subclasses `localrepository` when it is instantiated, so it works at runtime.) This makes that class hierarchy known to pytype. Having a protocol for `Repository` is probably the right thing to do, but that will be a lot of work and this still reflects the class at runtime. Subclassing also has the benefit of making sure any method overrides have a matching signature, so maybe this is a situation where we do both of these things. (I'm not sure how clear the diagnostics are if a class *almost* implements a protocol, but is missing a method argument or similar.) The subclassing is not done outside of type checking runs to avoid any side effects on already complex code.

File last commit:

r51872:4c5f6e95 default
r52763:9d4ad05b default
Show More
exceptions.rs
63 lines | 2.0 KiB | application/rls-services+xml | RustLexer
Georges Racinet
rust-cpython: rustdoc improvements...
r41220 // ancestors.rs
//
// Copyright 2018 Georges Racinet <gracinet@anybox.fr>
//
// This software may be used and distributed according to the terms of the
// GNU General Public License version 2 or any later version.
//! Bindings for Rust errors
//!
//! [`GraphError`] exposes `hg::GraphError` as a subclass of `ValueError`
Georges Racinet
rust: error for WdirUnsupported with cpython conversion as exception...
r41385 //! but some variants of `hg::GraphError` can be converted directly to other
//! existing Python exceptions if appropriate.
Georges Racinet
rust-cpython: rustdoc improvements...
r41220 //!
//! [`GraphError`]: struct.GraphError.html
Raphaël Gomès
rust: switch hg-core and hg-cpython to rust 2018 edition...
r42828 use cpython::{
Raphaël Gomès
rust-filepatterns: remove bridge code for filepatterns-related functions...
r44589 exc::{RuntimeError, ValueError},
Raphaël Gomès
rust: switch hg-core and hg-cpython to rust 2018 edition...
r42828 py_exception, PyErr, Python,
};
Georges Racinet
rust-cpython: start cpython crate bindings...
r41001 use hg;
Raphaël Gomès
rust: make `Revision` a newtype...
r51872 use crate::PyRevision;
Georges Racinet
rust-cpython: start cpython crate bindings...
r41001 py_exception!(rustext, GraphError, ValueError);
impl GraphError {
pub fn pynew(py: Python, inner: hg::GraphError) -> PyErr {
match inner {
hg::GraphError::ParentOutOfRange(r) => {
Raphaël Gomès
rust: make `Revision` a newtype...
r51872 GraphError::new(py, ("ParentOutOfRange", PyRevision(r.0)))
Georges Racinet
rust-cpython: start cpython crate bindings...
r41001 }
Raphaël Gomès
rust-filepatterns: add `rust-cpython` bindings for `filepatterns`...
r42515 }
}
pacien
hg-cpython: use ancestor iterator impls from vcsgraph...
r49350
pub fn pynew_from_vcsgraph(
py: Python,
inner: vcsgraph::graph::GraphReadError,
) -> PyErr {
match inner {
vcsgraph::graph::GraphReadError::InconsistentGraphData => {
GraphError::new(py, "InconsistentGraphData")
}
vcsgraph::graph::GraphReadError::InvalidKey => {
GraphError::new(py, "ParentOutOfRange")
}
vcsgraph::graph::GraphReadError::KeyedInvalidKey(r) => {
GraphError::new(py, ("ParentOutOfRange", r))
}
vcsgraph::graph::GraphReadError::WorkingDirectoryUnsupported => {
match py
.import("mercurial.error")
.and_then(|m| m.get(py, "WdirUnsupported"))
{
Err(e) => e,
Ok(cls) => PyErr::from_instance(py, cls),
}
}
}
}
Raphaël Gomès
rust-filepatterns: add `rust-cpython` bindings for `filepatterns`...
r42515 }
Raphaël Gomès
rust-hgpath: replace all paths and filenames with HgPath/HgPathBuf...
r43227 py_exception!(rustext, HgPathPyError, RuntimeError);
Raphaël Gomès
rust-status: update rust-cpython bridge to account for the changes in core...
r45016 py_exception!(rustext, FallbackError, RuntimeError);
py_exception!(shared_ref, AlreadyBorrowed, RuntimeError);