##// END OF EJS Templates
rhg: Group values passed to every sub-command into a struct...
rhg: Group values passed to every sub-command into a struct The set of which values this is is evidently not stable yet, so this will make changes easier. Also it is growing, and the function signatures are getting out hand. Differential Revision: https://phab.mercurial-scm.org/D10003

File last commit:

r47334:80840b65 default
r47334:80840b65 default
Show More
files.rs
62 lines | 1.8 KiB | application/rls-services+xml | RustLexer
Simon Sapin
rust: remove `FooError` structs with only `kind: FooErrorKind` enum field...
r47163 use crate::error::CommandError;
Antoine Cezar
rhg: add a `Files` `Command` to prepare the `rhg files` subcommand...
r45923 use crate::ui::Ui;
Simon Sapin
rhg: Move subcommand CLI arguments definitions to respective modules...
r47251 use clap::Arg;
Simon Sapin
rhg: replace `map_*_error` functions with `From` impls...
r47165 use hg::operations::list_rev_tracked_files;
use hg::operations::Dirstate;
Simon Sapin
rust: introduce Repo and Vfs types for filesystem abstraction...
r46782 use hg::repo::Repo;
Raphaël Gomès
rhg: make output of `files` relative to the current directory and the root...
r46007 use hg::utils::files::{get_bytes_from_path, relativize_path};
Antoine Cezar
rhg: add `--revision` argument to `rhg files`...
r46108 use hg::utils::hg_path::{HgPath, HgPathBuf};
Antoine Cezar
rhg: add a `Files` `Command` to prepare the `rhg files` subcommand...
r45923
pub const HELP_TEXT: &str = "
List tracked files.
Returns 0 on success.
";
Simon Sapin
rhg: Move subcommand CLI arguments definitions to respective modules...
r47251 pub fn args() -> clap::App<'static, 'static> {
clap::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(HELP_TEXT)
}
Simon Sapin
rhg: Group values passed to every sub-command into a struct...
r47334 pub fn run(invocation: &crate::CliInvocation) -> Result<(), CommandError> {
let rev = invocation.subcommand_args.value_of("rev");
Antoine Cezar
rhg: add a `Files` `Command` to prepare the `rhg files` subcommand...
r45923
Simon Sapin
rhg: Group values passed to every sub-command into a struct...
r47334 let repo = Repo::find(invocation.non_repo_config, invocation.repo_path)?;
Simon Sapin
rhg: replace command structs with functions...
r47250 if let Some(rev) = rev {
let files =
list_rev_tracked_files(&repo, rev).map_err(|e| (e, rev))?;
Simon Sapin
rhg: Group values passed to every sub-command into a struct...
r47334 display_files(invocation.ui, &repo, files.iter())
Simon Sapin
rhg: replace command structs with functions...
r47250 } else {
let distate = Dirstate::new(&repo)?;
let files = distate.tracked_files()?;
Simon Sapin
rhg: Group values passed to every sub-command into a struct...
r47334 display_files(invocation.ui, &repo, files)
Antoine Cezar
rhg: add a `Files` `Command` to prepare the `rhg files` subcommand...
r45923 }
}
Antoine Cezar
hg-core: simplify `list_tracked_files` operation...
r46106
Simon Sapin
rhg: replace command structs with functions...
r47250 fn display_files<'a>(
ui: &Ui,
repo: &Repo,
files: impl IntoIterator<Item = &'a HgPath>,
) -> Result<(), CommandError> {
Simon Sapin
rhg: Add support for -R and --repository command-line arguments...
r47253 let cwd = HgPathBuf::from(get_bytes_from_path(hg::utils::current_dir()?));
let working_directory =
HgPathBuf::from(get_bytes_from_path(repo.working_directory_path()));
Simon Sapin
rhg: replace command structs with functions...
r47250
let mut stdout = ui.stdout_buffer();
for file in files {
Simon Sapin
rhg: Add support for -R and --repository command-line arguments...
r47253 let file = working_directory.join(file);
stdout.write_all(relativize_path(&file, &cwd).as_ref())?;
Simon Sapin
rhg: replace command structs with functions...
r47250 stdout.write_all(b"\n")?;
Antoine Cezar
rhg: add `--revision` argument to `rhg files`...
r46108 }
Simon Sapin
rhg: replace command structs with functions...
r47250 stdout.flush()?;
Ok(())
Antoine Cezar
rhg: add `--revision` argument to `rhg files`...
r46108 }