Mercurial > public > mercurial-scm > hg-stable
diff rust/rhg/src/error.rs @ 46504:252d1bdba33d
rhg: replace `map_*_error` functions with `From` impls
Differential Revision: https://phab.mercurial-scm.org/D9876
author | Simon Sapin <simon.sapin@octobus.net> |
---|---|
date | Tue, 26 Jan 2021 20:31:26 +0100 |
parents | 2e2033081274 |
children | b274aa2f20fd |
line wrap: on
line diff
--- a/rust/rhg/src/error.rs Tue Jan 26 20:05:37 2021 +0100 +++ b/rust/rhg/src/error.rs Tue Jan 26 20:31:26 2021 +0100 @@ -1,7 +1,11 @@ use crate::exitcode; +use crate::ui::utf8_to_local; use crate::ui::UiError; use format_bytes::format_bytes; -use hg::operations::FindRootError; +use hg::operations::{ + CatRevError, DebugDataError, FindRootError, ListDirstateTrackedFilesError, + ListRevTrackedFilesError, +}; use hg::requirements::RequirementsError; use hg::utils::files::get_bytes_from_path; use std::convert::From; @@ -94,3 +98,160 @@ } } } + +impl From<(DebugDataError, &str)> for CommandError { + fn from((err, rev): (DebugDataError, &str)) -> CommandError { + match err { + DebugDataError::IoError(err) => CommandError::Abort(Some( + utf8_to_local(&format!("abort: {}\n", err)).into(), + )), + DebugDataError::InvalidRevision => CommandError::Abort(Some( + utf8_to_local(&format!( + "abort: invalid revision identifier{}\n", + rev + )) + .into(), + )), + DebugDataError::AmbiguousPrefix => CommandError::Abort(Some( + utf8_to_local(&format!( + "abort: ambiguous revision identifier{}\n", + rev + )) + .into(), + )), + DebugDataError::UnsuportedRevlogVersion(version) => { + CommandError::Abort(Some( + utf8_to_local(&format!( + "abort: unsupported revlog version {}\n", + version + )) + .into(), + )) + } + DebugDataError::CorruptedRevlog => { + CommandError::Abort(Some("abort: corrupted revlog\n".into())) + } + DebugDataError::UnknowRevlogDataFormat(format) => { + CommandError::Abort(Some( + utf8_to_local(&format!( + "abort: unknow revlog dataformat {:?}\n", + format + )) + .into(), + )) + } + } + } +} + +impl From<(ListRevTrackedFilesError, &str)> for CommandError { + fn from((err, rev): (ListRevTrackedFilesError, &str)) -> CommandError { + match err { + ListRevTrackedFilesError::IoError(err) => CommandError::Abort( + Some(utf8_to_local(&format!("abort: {}\n", err)).into()), + ), + ListRevTrackedFilesError::InvalidRevision => { + CommandError::Abort(Some( + utf8_to_local(&format!( + "abort: invalid revision identifier {}\n", + rev + )) + .into(), + )) + } + ListRevTrackedFilesError::AmbiguousPrefix => { + CommandError::Abort(Some( + utf8_to_local(&format!( + "abort: ambiguous revision identifier {}\n", + rev + )) + .into(), + )) + } + ListRevTrackedFilesError::UnsuportedRevlogVersion(version) => { + CommandError::Abort(Some( + utf8_to_local(&format!( + "abort: unsupported revlog version {}\n", + version + )) + .into(), + )) + } + ListRevTrackedFilesError::CorruptedRevlog => { + CommandError::Abort(Some("abort: corrupted revlog\n".into())) + } + ListRevTrackedFilesError::UnknowRevlogDataFormat(format) => { + CommandError::Abort(Some( + utf8_to_local(&format!( + "abort: unknow revlog dataformat {:?}\n", + format + )) + .into(), + )) + } + } + } +} + +impl From<(CatRevError, &str)> for CommandError { + fn from((err, rev): (CatRevError, &str)) -> CommandError { + match err { + CatRevError::IoError(err) => CommandError::Abort(Some( + utf8_to_local(&format!("abort: {}\n", err)).into(), + )), + CatRevError::InvalidRevision => CommandError::Abort(Some( + utf8_to_local(&format!( + "abort: invalid revision identifier {}\n", + rev + )) + .into(), + )), + CatRevError::AmbiguousPrefix => CommandError::Abort(Some( + utf8_to_local(&format!( + "abort: ambiguous revision identifier {}\n", + rev + )) + .into(), + )), + CatRevError::UnsuportedRevlogVersion(version) => { + CommandError::Abort(Some( + utf8_to_local(&format!( + "abort: unsupported revlog version {}\n", + version + )) + .into(), + )) + } + CatRevError::CorruptedRevlog => { + CommandError::Abort(Some("abort: corrupted revlog\n".into())) + } + CatRevError::UnknowRevlogDataFormat(format) => { + CommandError::Abort(Some( + utf8_to_local(&format!( + "abort: unknow revlog dataformat {:?}\n", + format + )) + .into(), + )) + } + } + } +} + +impl From<ListDirstateTrackedFilesError> for CommandError { + fn from(err: ListDirstateTrackedFilesError) -> Self { + match err { + ListDirstateTrackedFilesError::IoError(err) => { + CommandError::Abort(Some( + utf8_to_local(&format!("abort: {}\n", err)).into(), + )) + } + ListDirstateTrackedFilesError::ParseError(_) => { + CommandError::Abort(Some( + // TODO find a better error message + b"abort: parse error\n".to_vec(), + )) + } + } + } +}