rust/rhg/src/error.rs
changeset 46436 252d1bdba33d
parent 46435 2e2033081274
child 46437 b274aa2f20fd
--- 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(),
+                ))
+            }
+        }
+    }
+}