Mercurial > public > mercurial-scm > hg-stable
diff rust/rhg/src/commands/root.rs @ 45381:47997afadf08
rhg: ask the error message from `CommandError`
Avoid repeating the display of the same error messages in different commands.
Differential Revision: https://phab.mercurial-scm.org/D8865
author | Antoine Cezar <antoine.cezar@octobus.net> |
---|---|
date | Mon, 20 Jul 2020 18:14:52 +0200 |
parents | 227281e76c22 |
children | 5dbf875b3275 |
line wrap: on
line diff
--- a/rust/rhg/src/commands/root.rs Tue Jul 21 10:39:30 2020 +0200 +++ b/rust/rhg/src/commands/root.rs Mon Jul 20 18:14:52 2020 +0200 @@ -1,9 +1,8 @@ use crate::commands::Command; use crate::error::{CommandError, CommandErrorKind}; use crate::ui::Ui; -use hg::operations::{FindRoot, FindRootError, FindRootErrorKind}; +use hg::operations::{FindRoot, FindRootErrorKind}; use hg::utils::files::get_bytes_from_path; -use std::path::PathBuf; pub const HELP_TEXT: &str = " Print the root directory of the current repository. @@ -11,19 +10,28 @@ Returns 0 on success. "; -pub struct RootCommand { - ui: Ui, +pub struct RootCommand<'a> { + ui: &'a Ui, +} + +impl<'a> RootCommand<'a> { + pub fn new(ui: &'a Ui) -> Self { + RootCommand { ui } + } } -impl RootCommand { - pub fn new() -> Self { - RootCommand { ui: Ui::new() } - } +impl<'a> Command<'a> for RootCommand<'a> { + fn run(&self) -> Result<(), CommandError> { + let path_buf = + FindRoot::new().run().map_err(|err| match err.kind { + FindRootErrorKind::RootNotFound(path) => { + CommandErrorKind::RootNotFound(path) + } + FindRootErrorKind::GetCurrentDirError(e) => { + CommandErrorKind::CurrentDirNotFound(e) + } + })?; - fn display_found_path( - &self, - path_buf: PathBuf, - ) -> Result<(), CommandError> { let bytes = get_bytes_from_path(path_buf); // TODO use formating macro @@ -31,46 +39,4 @@ Ok(()) } - - fn display_error(&self, error: FindRootError) -> Result<(), CommandError> { - match error.kind { - FindRootErrorKind::RootNotFound(path) => { - let bytes = get_bytes_from_path(path); - - // TODO use formating macro - self.ui.write_stderr( - &[ - b"abort: no repository found in '", - bytes.as_slice(), - b"' (.hg not found)!\n", - ] - .concat(), - )?; - - Err(CommandErrorKind::RootNotFound.into()) - } - FindRootErrorKind::GetCurrentDirError(e) => { - // TODO use formating macro - self.ui.write_stderr( - &[ - b"abort: error getting current working directory: ", - e.to_string().as_bytes(), - b"\n", - ] - .concat(), - )?; - - Err(CommandErrorKind::CurrentDirNotFound.into()) - } - } - } } - -impl Command for RootCommand { - fn run(&self) -> Result<(), CommandError> { - match FindRoot::new().run() { - Ok(path_buf) => self.display_found_path(path_buf), - Err(e) => self.display_error(e), - } - } -}