--- 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(),
+ ))
+ }
+ }
+ }
+}