Mercurial > hg-stable
changeset 46799:bcdcb4423ae3
rhg: Add more conversions between error types
This allows using the `?` operator in more places, as the next commit does.
Differential Revision: https://phab.mercurial-scm.org/D10238
author | Simon Sapin <simon.sapin@octobus.net> |
---|---|
date | Fri, 19 Mar 2021 13:18:53 +0100 |
parents | 38f55ef058fb |
children | f51ff655d338 |
files | rust/hg-core/src/config/config.rs rust/hg-core/src/errors.rs rust/hg-core/src/lib.rs rust/rhg/src/error.rs |
diffstat | 4 files changed, 48 insertions(+), 21 deletions(-) [+] |
line wrap: on
line diff
--- a/rust/hg-core/src/config/config.rs Fri Mar 19 23:51:46 2021 +0100 +++ b/rust/hg-core/src/config/config.rs Fri Mar 19 13:18:53 2021 +0100 @@ -17,6 +17,7 @@ use format_bytes::{write_bytes, DisplayBytes}; use std::collections::HashSet; use std::env; +use std::fmt; use std::path::{Path, PathBuf}; use std::str; @@ -68,6 +69,21 @@ pub expected_type: &'static str, } +impl fmt::Display for ConfigValueParseError { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + // TODO: add origin and line number information, here and in + // corresponding python code + write!( + f, + "config error: {}.{} is not a {} ('{}')", + String::from_utf8_lossy(&self.section), + String::from_utf8_lossy(&self.item), + self.expected_type, + String::from_utf8_lossy(&self.value) + ) + } +} + impl Config { /// Load system and user configuration from various files. ///
--- a/rust/hg-core/src/errors.rs Fri Mar 19 23:51:46 2021 +0100 +++ b/rust/hg-core/src/errors.rs Fri Mar 19 13:18:53 2021 +0100 @@ -88,25 +88,7 @@ HgError::UnsupportedFeature(explanation) => { write!(f, "unsupported feature: {}", explanation) } - HgError::ConfigValueParseError(ConfigValueParseError { - origin: _, - line: _, - section, - item, - value, - expected_type, - }) => { - // TODO: add origin and line number information, here and in - // corresponding python code - write!( - f, - "config error: {}.{} is not a {} ('{}')", - String::from_utf8_lossy(section), - String::from_utf8_lossy(item), - expected_type, - String::from_utf8_lossy(value) - ) - } + HgError::ConfigValueParseError(error) => error.fmt(f), } } }
--- a/rust/hg-core/src/lib.rs Fri Mar 19 23:51:46 2021 +0100 +++ b/rust/hg-core/src/lib.rs Fri Mar 19 13:18:53 2021 +0100 @@ -17,7 +17,8 @@ dirstate_map::DirstateMap, parsers::{pack_dirstate, parse_dirstate, PARENT_SIZE}, status::{ - status, BadMatch, BadType, DirstateStatus, StatusError, StatusOptions, + status, BadMatch, BadType, DirstateStatus, HgPathCow, StatusError, + StatusOptions, }, CopyMap, CopyMapIter, DirstateEntry, DirstateParents, EntryState, StateMap, StateMapIter,
--- a/rust/rhg/src/error.rs Fri Mar 19 23:51:46 2021 +0100 +++ b/rust/rhg/src/error.rs Fri Mar 19 13:18:53 2021 +0100 @@ -2,11 +2,12 @@ use crate::ui::UiError; use crate::NoRepoInCwdError; use format_bytes::format_bytes; -use hg::config::{ConfigError, ConfigParseError}; +use hg::config::{ConfigError, ConfigParseError, ConfigValueParseError}; use hg::errors::HgError; use hg::repo::RepoError; use hg::revlog::revlog::RevlogError; use hg::utils::files::get_bytes_from_path; +use hg::{DirstateError, DirstateMapError, StatusError}; use std::convert::From; /// The kind of command error @@ -61,6 +62,12 @@ } } +impl From<ConfigValueParseError> for CommandError { + fn from(error: ConfigValueParseError) -> Self { + CommandError::abort(error.to_string()) + } +} + impl From<UiError> for CommandError { fn from(_error: UiError) -> Self { // If we already failed writing to stdout or stderr, @@ -144,3 +151,24 @@ } } } + +impl From<StatusError> for CommandError { + fn from(error: StatusError) -> Self { + CommandError::abort(format!("{}", error)) + } +} + +impl From<DirstateMapError> for CommandError { + fn from(error: DirstateMapError) -> Self { + CommandError::abort(format!("{}", error)) + } +} + +impl From<DirstateError> for CommandError { + fn from(error: DirstateError) -> Self { + match error { + DirstateError::Common(error) => error.into(), + DirstateError::Map(error) => error.into(), + } + } +}