##// END OF EJS Templates
rhg: refactor function to relativize paths in utils...
rhg: refactor function to relativize paths in utils Commands like `files`, `status` supports printing relative paths. Hence we need to re-use this code in other places too. So let's take this out from `rhg files` into a utility function. Next patch will make `rhg status` use it. Differential Revision: https://phab.mercurial-scm.org/D11613

File last commit:

r48988:9ecf802b default
r48988:9ecf802b default
Show More
files.rs
71 lines | 1.9 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;
Pulkit Goyal
rhg: refactor function to relativize paths in utils...
r48988 use crate::ui::UiError;
use crate::utils::path_utils::relativize_paths;
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;
Pulkit Goyal
rhg: refactor function to relativize paths in utils...
r48988 use hg::utils::hg_path::HgPath;
use std::borrow::Cow;
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> {
Simon Sapin
rhg: Fall back to Python if ui.relative-paths is configured...
r47473 let relative = invocation.config.get(b"ui", b"relative-paths");
if relative.is_some() {
return Err(CommandError::unsupported(
"non-default ui.relative-paths",
));
}
Simon Sapin
rhg: Group values passed to every sub-command into a struct...
r47334 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: Move `Repo` object creation into `main()`...
r47335 let repo = invocation.repo?;
Simon Sapin
rhg: replace command structs with functions...
r47250 if let Some(rev) = rev {
Simon Sapin
rhg: Move `Repo` object creation into `main()`...
r47335 let files = list_rev_tracked_files(repo, rev).map_err(|e| (e, rev))?;
display_files(invocation.ui, repo, files.iter())
Simon Sapin
rhg: replace command structs with functions...
r47250 } else {
Simon Sapin
rhg: Move `Repo` object creation into `main()`...
r47335 let distate = Dirstate::new(repo)?;
Simon Sapin
rhg: replace command structs with functions...
r47250 let files = distate.tracked_files()?;
Simon Sapin
rhg: Move `Repo` object creation into `main()`...
r47335 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> {
let mut stdout = ui.stdout_buffer();
Pulkit Goyal
rhg: refactor function to relativize paths in utils...
r48988 let mut any = false;
Simon Sapin
rhg: Make `files` work on repo-relative paths when possible...
r47687
Pulkit Goyal
rhg: refactor function to relativize paths in utils...
r48988 relativize_paths(repo, files, |path: Cow<[u8]>| -> Result<(), UiError> {
any = true;
stdout.write_all(path.as_ref())?;
stdout.write_all(b"\n")
})?;
Simon Sapin
rhg: replace command structs with functions...
r47250 stdout.flush()?;
Simon Sapin
rhg: Exit with an error code if `files` finds nothing...
r47479 if any {
Ok(())
} else {
Err(CommandError::Unsuccessful)
}
Antoine Cezar
rhg: add `--revision` argument to `rhg files`...
r46108 }