Mercurial > hg
changeset 45438:ed95ccc94333
rhg: pass `ui` to `Command` `run`
Allow implementation of `From<clap::ArgMatches> for Command`
Differential Revision: https://phab.mercurial-scm.org/D8954
author | Antoine Cezar <antoine.cezar@octobus.net> |
---|---|
date | Tue, 04 Aug 2020 16:11:23 +0200 |
parents | e339693addc0 |
children | fbc373b7cbc3 |
files | rust/rhg/src/commands.rs rust/rhg/src/commands/files.rs rust/rhg/src/commands/root.rs rust/rhg/src/main.rs |
diffstat | 4 files changed, 19 insertions(+), 22 deletions(-) [+] |
line wrap: on
line diff
--- a/rust/rhg/src/commands.rs Mon Aug 03 11:55:59 2020 +0200 +++ b/rust/rhg/src/commands.rs Tue Aug 04 16:11:23 2020 +0200 @@ -1,10 +1,11 @@ pub mod files; pub mod root; use crate::error::CommandError; +use crate::ui::Ui; /// The common trait for rhg commands /// /// Normalize the interface of the commands provided by rhg -pub trait Command<'a> { - fn run(&self) -> Result<(), CommandError>; +pub trait Command { + fn run(&self, ui: &Ui) -> Result<(), CommandError>; }
--- a/rust/rhg/src/commands/files.rs Mon Aug 03 11:55:59 2020 +0200 +++ b/rust/rhg/src/commands/files.rs Tue Aug 04 16:11:23 2020 +0200 @@ -11,18 +11,16 @@ Returns 0 on success. "; -pub struct FilesCommand<'a> { - ui: &'a Ui, -} +pub struct FilesCommand {} -impl<'a> FilesCommand<'a> { - pub fn new(ui: &'a Ui) -> Self { - FilesCommand { ui } +impl FilesCommand { + pub fn new() -> Self { + FilesCommand {} } } -impl<'a> Command<'a> for FilesCommand<'a> { - fn run(&self) -> Result<(), CommandError> { +impl Command for FilesCommand { + fn run(&self, ui: &Ui) -> Result<(), CommandError> { let operation_builder = ListTrackedFiles::new()?; let operation = operation_builder.load().map_err(|err| { CommandErrorKind::Abort(Some( @@ -47,7 +45,7 @@ .expect("cwd was already checked within the repository"); let rooted_cwd = HgPathBuf::from(get_bytes_from_path(rooted_cwd)); - let mut stdout = self.ui.stdout_buffer(); + let mut stdout = ui.stdout_buffer(); for file in files { stdout.write_all(relativize_path(file, &rooted_cwd).as_ref())?;
--- a/rust/rhg/src/commands/root.rs Mon Aug 03 11:55:59 2020 +0200 +++ b/rust/rhg/src/commands/root.rs Tue Aug 04 16:11:23 2020 +0200 @@ -10,24 +10,22 @@ Returns 0 on success. "; -pub struct RootCommand<'a> { - ui: &'a Ui, -} +pub struct RootCommand {} -impl<'a> RootCommand<'a> { - pub fn new(ui: &'a Ui) -> Self { - RootCommand { ui } +impl RootCommand { + pub fn new() -> Self { + RootCommand {} } } -impl<'a> Command<'a> for RootCommand<'a> { - fn run(&self) -> Result<(), CommandError> { +impl Command for RootCommand { + fn run(&self, ui: &Ui) -> Result<(), CommandError> { let path_buf = FindRoot::new().run()?; let bytes = get_bytes_from_path(path_buf); // TODO use formating macro - self.ui.write_stdout(&[bytes.as_slice(), b"\n"].concat())?; + ui.write_stdout(&[bytes.as_slice(), b"\n"].concat())?; Ok(()) }
--- a/rust/rhg/src/main.rs Mon Aug 03 11:55:59 2020 +0200 +++ b/rust/rhg/src/main.rs Tue Aug 04 16:11:23 2020 +0200 @@ -29,8 +29,8 @@ let command_result = match matches.subcommand_name() { Some(name) => match name { - "root" => commands::root::RootCommand::new(&ui).run(), - "files" => commands::files::FilesCommand::new(&ui).run(), + "root" => commands::root::RootCommand::new().run(&ui), + "files" => commands::files::FilesCommand::new().run(&ui), _ => std::process::exit(exitcode::UNIMPLEMENTED_COMMAND), }, _ => {