--- a/rust/rhg/src/commands/files.rs Mon Feb 08 11:13:56 2021 +0100
+++ b/rust/rhg/src/commands/files.rs Mon Feb 08 20:33:04 2021 +0100
@@ -1,6 +1,6 @@
-use crate::commands::Command;
use crate::error::CommandError;
use crate::ui::Ui;
+use clap::ArgMatches;
use hg::config::Config;
use hg::operations::list_rev_tracked_files;
use hg::operations::Dirstate;
@@ -14,49 +14,42 @@
Returns 0 on success.
";
-pub struct FilesCommand<'a> {
- rev: Option<&'a str>,
-}
-
-impl<'a> FilesCommand<'a> {
- pub fn new(rev: Option<&'a str>) -> Self {
- FilesCommand { rev }
- }
+pub fn run(
+ ui: &Ui,
+ config: &Config,
+ args: &ArgMatches,
+) -> Result<(), CommandError> {
+ let rev = args.value_of("rev");
- fn display_files(
- &self,
- ui: &Ui,
- repo: &Repo,
- files: impl IntoIterator<Item = &'a HgPath>,
- ) -> Result<(), CommandError> {
- let cwd = hg::utils::current_dir()?;
- let rooted_cwd = cwd
- .strip_prefix(repo.working_directory_path())
- .expect("cwd was already checked within the repository");
- let rooted_cwd = HgPathBuf::from(get_bytes_from_path(rooted_cwd));
-
- let mut stdout = ui.stdout_buffer();
-
- for file in files {
- stdout.write_all(relativize_path(file, &rooted_cwd).as_ref())?;
- stdout.write_all(b"\n")?;
- }
- stdout.flush()?;
- Ok(())
+ let repo = Repo::find(config)?;
+ if let Some(rev) = rev {
+ let files =
+ list_rev_tracked_files(&repo, rev).map_err(|e| (e, rev))?;
+ display_files(ui, &repo, files.iter())
+ } else {
+ let distate = Dirstate::new(&repo)?;
+ let files = distate.tracked_files()?;
+ display_files(ui, &repo, files)
}
}
-impl<'a> Command for FilesCommand<'a> {
- fn run(&self, ui: &Ui, config: &Config) -> Result<(), CommandError> {
- let repo = Repo::find(config)?;
- if let Some(rev) = self.rev {
- let files =
- list_rev_tracked_files(&repo, rev).map_err(|e| (e, rev))?;
- self.display_files(ui, &repo, files.iter())
- } else {
- let distate = Dirstate::new(&repo)?;
- let files = distate.tracked_files()?;
- self.display_files(ui, &repo, files)
- }
+fn display_files<'a>(
+ ui: &Ui,
+ repo: &Repo,
+ files: impl IntoIterator<Item = &'a HgPath>,
+) -> Result<(), CommandError> {
+ let cwd = hg::utils::current_dir()?;
+ let rooted_cwd = cwd
+ .strip_prefix(repo.working_directory_path())
+ .expect("cwd was already checked within the repository");
+ let rooted_cwd = HgPathBuf::from(get_bytes_from_path(rooted_cwd));
+
+ let mut stdout = ui.stdout_buffer();
+
+ for file in files {
+ stdout.write_all(relativize_path(file, &rooted_cwd).as_ref())?;
+ stdout.write_all(b"\n")?;
}
+ stdout.flush()?;
+ Ok(())
}