rhg: pass `ui` to `Command` `run`
authorAntoine Cezar <antoine.cezar@octobus.net>
Tue, 04 Aug 2020 16:11:23 +0200
changeset 45438 ed95ccc94333
parent 45437 e339693addc0
child 45439 fbc373b7cbc3
rhg: pass `ui` to `Command` `run` Allow implementation of `From<clap::ArgMatches> for Command` Differential Revision: https://phab.mercurial-scm.org/D8954
rust/rhg/src/commands.rs
rust/rhg/src/commands/files.rs
rust/rhg/src/commands/root.rs
rust/rhg/src/main.rs
--- 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),
         },
         _ => {