##// END OF EJS Templates
fix: allow tools to use :linerange, but also run if a file is unchanged...
fix: allow tools to use :linerange, but also run if a file is unchanged The definition of "unchanged" here is subtle, because pure deletion diff hunks are ignored. That means this is different from using the --whole flag. This change allows you to configure, for example, a code formatter that: 1. Formats specific line ranges if specified via flags 2. Does not format the entire file when there are no line ranges provided 3. Performs some other kind of formatting regardless of provided line ranges This sounds a little far fetched, but it is meant to address a specific corner case encountered in Google's use of the fix extension. The default behavior is kept because it exists to prevent mistakes that could erase uncommitted changes. Differential Revision: https://phab.mercurial-scm.org/D6723

File last commit:

r42979:826407e1 default
r42983:69b37b72 default
Show More
exceptions.rs
71 lines | 2.2 KiB | application/rls-services+xml | RustLexer
// 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`
//! but some variants of `hg::GraphError` can be converted directly to other
//! existing Python exceptions if appropriate.
//!
//! [`GraphError`]: struct.GraphError.html
use cpython::{
exc::{IOError, RuntimeError, ValueError},
py_exception, PyErr, Python,
};
use hg;
py_exception!(rustext, GraphError, ValueError);
impl GraphError {
pub fn pynew(py: Python, inner: hg::GraphError) -> PyErr {
match inner {
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),
}
}
}
}
}
py_exception!(rustext, PatternError, RuntimeError);
py_exception!(rustext, PatternFileError, RuntimeError);
impl PatternError {
pub fn pynew(py: Python, inner: hg::PatternError) -> PyErr {
match inner {
hg::PatternError::UnsupportedSyntax(m) => {
PatternError::new(py, ("PatternError", m))
}
}
}
}
impl PatternFileError {
pub fn pynew(py: Python, inner: hg::PatternFileError) -> PyErr {
match inner {
hg::PatternFileError::IO(e) => {
let value = (e.raw_os_error().unwrap_or(2), e.to_string());
PyErr::new::<IOError, _>(py, value)
}
hg::PatternFileError::Pattern(e, l) => match e {
hg::PatternError::UnsupportedSyntax(m) => {
PatternFileError::new(py, ("PatternFileError", m, l))
}
},
}
}
}
py_exception!(shared_ref, AlreadyBorrowed, RuntimeError);