Mercurial > public > mercurial-scm > hg-stable
diff rust/rhg/src/commands/files.rs @ 46136:dca9cb99971c
rust: replace most "operation" structs with functions
The hg-core crate has a partially-formed concept of "operation",
represented as structs with constructors and a `run` method.
Each struct?s contructor takes different parameters,
and each `run` has a different return type.
Constructors typically don?t do much more than store parameters
for `run` to access them.
There was a comment about adding an `Operation` trait
when the language supports expressing something so general,
but it?s hard to imagine how operations with such different APIs
could be used in a generic context.
This commit starts removing the concept of "operation",
since those are pretty much just functions.
Differential Revision: https://phab.mercurial-scm.org/D9595
author | Simon Sapin <simon.sapin@octobus.net> |
---|---|
date | Mon, 14 Dec 2020 14:59:23 +0100 |
parents | cc6faec62cb7 |
children | 8a4914397d02 |
line wrap: on
line diff
--- a/rust/rhg/src/commands/files.rs Mon Dec 14 13:47:44 2020 +0100 +++ b/rust/rhg/src/commands/files.rs Mon Dec 14 14:59:23 2020 +0100 @@ -2,14 +2,13 @@ use crate::error::{CommandError, CommandErrorKind}; use crate::ui::utf8_to_local; use crate::ui::Ui; -use hg::operations::FindRoot; +use hg::operations::find_root; use hg::operations::{ - ListDirstateTrackedFiles, ListDirstateTrackedFilesError, - ListDirstateTrackedFilesErrorKind, + list_rev_tracked_files, ListRevTrackedFilesError, + ListRevTrackedFilesErrorKind, }; use hg::operations::{ - ListRevTrackedFiles, ListRevTrackedFilesError, - ListRevTrackedFilesErrorKind, + Dirstate, ListDirstateTrackedFilesError, ListDirstateTrackedFilesErrorKind, }; use hg::requirements; use hg::utils::files::{get_bytes_from_path, relativize_path}; @@ -57,17 +56,15 @@ impl<'a> Command for FilesCommand<'a> { fn run(&self, ui: &Ui) -> Result<(), CommandError> { - let root = FindRoot::new().run()?; + let root = find_root()?; requirements::check(&root)?; if let Some(rev) = self.rev { - let mut operation = ListRevTrackedFiles::new(&root, rev) + let files = list_rev_tracked_files(&root, rev) .map_err(|e| map_rev_error(rev, e))?; - let files = operation.run().map_err(|e| map_rev_error(rev, e))?; - self.display_files(ui, &root, files) + self.display_files(ui, &root, files.iter()) } else { - let mut operation = ListDirstateTrackedFiles::new(&root) - .map_err(map_dirstate_error)?; - let files = operation.run().map_err(map_dirstate_error)?; + let distate = Dirstate::new(&root).map_err(map_dirstate_error)?; + let files = distate.tracked_files().map_err(map_dirstate_error)?; self.display_files(ui, &root, files) } }