diff rust/rhg/src/main.rs @ 45537:2f8227a12592

rhg: add `--revision` argument to `rhg files` Add the option to list the tracked files of a revision given its number or full node id. Benched on a clone of moz-central where tip is 1671467:81deaa1a68ebb28db0490954034ab38ab269409d files -r 81deaa1a68ebb28db0490954034ab38ab269409d > out.txt hg 0m1.633s rhg 0m0.157s files -r 81deaa1a68ebb28db0490954034ab38ab269409d > /dev/null hg 0m0.415s rhg 0m0.143s Differential Revision: https://phab.mercurial-scm.org/D9015
author Antoine Cezar <antoine.cezar@octobus.net>
date Wed, 09 Sep 2020 14:53:15 +0200
parents b1cea0dc9db0
children 33ded2d3f4fc
line wrap: on
line diff
--- a/rust/rhg/src/main.rs	Fri Sep 18 16:52:16 2020 +0200
+++ b/rust/rhg/src/main.rs	Wed Sep 09 14:53:15 2020 +0200
@@ -26,7 +26,16 @@
             SubCommand::with_name("root").about(commands::root::HELP_TEXT),
         )
         .subcommand(
-            SubCommand::with_name("files").about(commands::files::HELP_TEXT),
+            SubCommand::with_name("files")
+                .arg(
+                    Arg::with_name("rev")
+                        .help("search the repository as it is in REV")
+                        .short("-r")
+                        .long("--revision")
+                        .value_name("REV")
+                        .takes_value(true),
+                )
+                .about(commands::files::HELP_TEXT),
         )
         .subcommand(
             SubCommand::with_name("debugdata")
@@ -86,7 +95,9 @@
 ) -> Result<(), CommandError> {
     match matches.subcommand() {
         ("root", _) => commands::root::RootCommand::new().run(&ui),
-        ("files", _) => commands::files::FilesCommand::new().run(&ui),
+        ("files", Some(matches)) => {
+            commands::files::FilesCommand::try_from(matches)?.run(&ui)
+        }
         ("debugdata", Some(matches)) => {
             commands::debugdata::DebugDataCommand::try_from(matches)?.run(&ui)
         }
@@ -94,6 +105,15 @@
     }
 }
 
+impl<'a> TryFrom<&'a ArgMatches<'_>> for commands::files::FilesCommand<'a> {
+    type Error = CommandError;
+
+    fn try_from(args: &'a ArgMatches) -> Result<Self, Self::Error> {
+        let rev = args.value_of("rev");
+        Ok(commands::files::FilesCommand::new(rev))
+    }
+}
+
 impl<'a> TryFrom<&'a ArgMatches<'_>>
     for commands::debugdata::DebugDataCommand<'a>
 {