Skip to content
Snippets Groups Projects
Commit bcdcb442 authored by Simon Sapin's avatar Simon Sapin
Browse files

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
parent 38f55ef0
No related branches found
No related tags found
No related merge requests found
......@@ -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.
///
......
......@@ -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),
}
}
}
......
......@@ -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,
......
......@@ -2,8 +2,8 @@
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;
......@@ -6,7 +6,8 @@
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(),
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment