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