##// END OF EJS Templates
revlog: change _addrevision to return the new revision...
revlog: change _addrevision to return the new revision The node is passed as argument already, so returning it is quite pointless. The revision number on the other is useful as it decouples the caller from the revlog internals. Differential Revision: https://phab.mercurial-scm.org/D9880

File last commit:

r47231:1a00a578 default
r47256:07984507 default
Show More
error.rs
115 lines | 3.4 KiB | application/rls-services+xml | RustLexer
Simon Sapin
rhg: replace `map_*_error` functions with `From` impls...
r47165 use crate::ui::utf8_to_local;
Antoine Cezar
rhg: add RootCommand using hg-core FindRoot operation to prepare `hg root`...
r45592 use crate::ui::UiError;
Simon Sapin
rust: Fold find_root and check_requirements into Repo::find...
r47175 use format_bytes::format_bytes;
Simon Sapin
rhg: Parse system and user configuration at program start...
r47213 use hg::config::{ConfigError, ConfigParseError};
Simon Sapin
rust: Fold find_root and check_requirements into Repo::find...
r47175 use hg::errors::HgError;
Simon Sapin
rhg: Parse per-repository configuration...
r47215 use hg::repo::RepoError;
Simon Sapin
rust: remove three enums that were identical to `RevlogError`...
r47166 use hg::revlog::revlog::RevlogError;
Simon Sapin
rust: Fold find_root and check_requirements into Repo::find...
r47175 use hg::utils::files::get_bytes_from_path;
Antoine Cezar
rhg: add RootCommand using hg-core FindRoot operation to prepare `hg root`...
r45592 use std::convert::From;
/// The kind of command error
Simon Sapin
rhg: Simplify CommandError based on its use...
r47174 #[derive(Debug)]
Simon Sapin
rust: remove `FooError` structs with only `kind: FooErrorKind` enum field...
r47163 pub enum CommandError {
Simon Sapin
rhg: Simplify CommandError based on its use...
r47174 /// Exit with an error message and "standard" failure exit code.
Abort { message: Vec<u8> },
Antoine Cezar
rhg: add a limited `rhg cat -r` subcommand...
r46113 /// A mercurial capability as not been implemented.
Simon Sapin
rhg: Simplify CommandError based on its use...
r47174 ///
/// There is no error message printed in this case.
/// Instead, we exit with a specic status code and a wrapper script may
/// fallback to Python-based Mercurial.
Antoine Cezar
rhg: add a limited `rhg cat -r` subcommand...
r46113 Unimplemented,
Antoine Cezar
rhg: add RootCommand using hg-core FindRoot operation to prepare `hg root`...
r45592 }
Simon Sapin
rust: remove `FooError` structs with only `kind: FooErrorKind` enum field...
r47163 impl CommandError {
Simon Sapin
rhg: Simplify CommandError based on its use...
r47174 pub fn abort(message: impl AsRef<str>) -> Self {
CommandError::Abort {
// TODO: bytes-based (instead of Unicode-based) formatting
// of error messages to handle non-UTF-8 filenames etc:
// https://www.mercurial-scm.org/wiki/EncodingStrategy#Mixing_output
message: utf8_to_local(message.as_ref()).into(),
Antoine Cezar
rhg: add RootCommand using hg-core FindRoot operation to prepare `hg root`...
r45592 }
}
Simon Sapin
rhg: Simplify CommandError based on its use...
r47174 }
Antoine Cezar
rhg: ask the error message from `CommandError`...
r45920
Simon Sapin
rhg: Simplify CommandError based on its use...
r47174 impl From<HgError> for CommandError {
fn from(error: HgError) -> Self {
match error {
HgError::UnsupportedFeature(_) => CommandError::Unimplemented,
_ => CommandError::abort(error.to_string()),
Antoine Cezar
rhg: ask the error message from `CommandError`...
r45920 }
}
Antoine Cezar
rhg: add RootCommand using hg-core FindRoot operation to prepare `hg root`...
r45592 }
impl From<UiError> for CommandError {
Simon Sapin
rhg: Simplify CommandError based on its use...
r47174 fn from(_error: UiError) -> Self {
// If we already failed writing to stdout or stderr,
// writing an error message to stderr about it would be likely to fail
// too.
CommandError::abort("")
Antoine Cezar
rhg: add RootCommand using hg-core FindRoot operation to prepare `hg root`...
r45592 }
}
Antoine Cezar
rhg: simplify `FindRootError` handling...
r45922
Simon Sapin
rhg: Parse per-repository configuration...
r47215 impl From<RepoError> for CommandError {
fn from(error: RepoError) -> Self {
Simon Sapin
rust: Fold find_root and check_requirements into Repo::find...
r47175 match error {
Simon Sapin
rhg: Add support for -R and --repository command-line arguments...
r47253 RepoError::NotFound { at } => CommandError::Abort {
Simon Sapin
rust: Fold find_root and check_requirements into Repo::find...
r47175 message: format_bytes!(
b"no repository found in '{}' (.hg not found)!",
Simon Sapin
rhg: Add support for -R and --repository command-line arguments...
r47253 get_bytes_from_path(at)
Simon Sapin
rust: Fold find_root and check_requirements into Repo::find...
r47175 ),
},
Simon Sapin
rhg: Parse per-repository configuration...
r47215 RepoError::ConfigParseError(error) => error.into(),
RepoError::Other(error) => error.into(),
Antoine Cezar
rhg: simplify `FindRootError` handling...
r45922 }
}
}
Simon Sapin
rhg: replace `map_*_error` functions with `From` impls...
r47165
Simon Sapin
rhg: Parse system and user configuration at program start...
r47213 impl From<ConfigError> for CommandError {
fn from(error: ConfigError) -> Self {
match error {
Simon Sapin
rhg: Parse per-repository configuration...
r47215 ConfigError::Parse(error) => error.into(),
Simon Sapin
rhg: Parse system and user configuration at program start...
r47213 ConfigError::Other(error) => error.into(),
}
}
}
Simon Sapin
rhg: Parse per-repository configuration...
r47215 impl From<ConfigParseError> for CommandError {
fn from(error: ConfigParseError) -> Self {
let ConfigParseError {
origin,
line,
bytes,
} = error;
let line_message = if let Some(line_number) = line {
format_bytes!(b" at line {}", line_number.to_string().into_bytes())
} else {
Vec::new()
};
CommandError::Abort {
message: format_bytes!(
b"config parse error in {}{}: '{}'",
Simon Sapin
rust: Use the DisplayBytes trait in config printing...
r47249 origin,
Simon Sapin
rhg: Parse per-repository configuration...
r47215 line_message,
bytes
),
}
}
}
Simon Sapin
rust: remove three enums that were identical to `RevlogError`...
r47166 impl From<(RevlogError, &str)> for CommandError {
fn from((err, rev): (RevlogError, &str)) -> CommandError {
Simon Sapin
rhg: replace `map_*_error` functions with `From` impls...
r47165 match err {
Simon Sapin
rhg: Simplify CommandError based on its use...
r47174 RevlogError::InvalidRevision => CommandError::abort(format!(
"invalid revision identifier {}",
rev
Simon Sapin
rhg: replace `map_*_error` functions with `From` impls...
r47165 )),
Simon Sapin
rhg: Simplify CommandError based on its use...
r47174 RevlogError::AmbiguousPrefix => CommandError::abort(format!(
"ambiguous revision identifier {}",
rev
Simon Sapin
rhg: replace `map_*_error` functions with `From` impls...
r47165 )),
Simon Sapin
rhg: Simplify CommandError based on its use...
r47174 RevlogError::Other(error) => error.into(),
Simon Sapin
rhg: replace `map_*_error` functions with `From` impls...
r47165 }
}
}