##// END OF EJS Templates
config: add alias from `hg help rhg` to `hg help rust`...
config: add alias from `hg help rhg` to `hg help rust` This will make using `rhg` more user-friendly and features more discoverable.

File last commit:

r49284:9b0e1f64 default
r50462:04e6add9 stable
Show More
files.rs
101 lines | 3.1 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: refactor relativize_path into a struct + method...
r49284 use crate::utils::path_utils::RelativizePaths;
Simon Sapin
rhg: Move subcommand CLI arguments definitions to respective modules...
r47251 use clap::Arg;
Simon Sapin
rhg: Propogate manifest parse errors instead of panicking...
r49165 use hg::errors::HgError;
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;
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?;
Arseniy Alekseyev
rhg: add support for narrow clones and sparse checkouts...
r49238
// It seems better if this check is removed: this would correspond to
// automatically enabling the extension if the repo requires it.
// However we need this check to be in sync with vanilla hg so hg tests
// pass.
if repo.has_sparse()
&& invocation.config.get(b"extensions", b"sparse").is_none()
{
return Err(CommandError::unsupported(
"repo is using sparse, but sparse extension is not enabled",
));
}
Simon Sapin
rhg: replace command structs with functions...
r47250 if let Some(rev) = rev {
Arseniy Alekseyev
rhg: add support for narrow clones and sparse checkouts...
r49238 if repo.has_narrow() {
return Err(CommandError::unsupported(
"rhg files -r <rev> is not supported in narrow clones",
));
}
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 {
Arseniy Alekseyev
rhg: add support for narrow clones and sparse checkouts...
r49238 // The dirstate always reflects the sparse narrowspec, so if
// we only have sparse without narrow all is fine.
// If we have narrow, then [hg files] needs to check if
// the store narrowspec is in sync with the one of the dirstate,
// so we can't support that without explicit code.
if repo.has_narrow() {
return Err(CommandError::unsupported(
"rhg files is not supported in narrow clones",
));
}
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: Propogate manifest parse errors instead of panicking...
r49165 display_files(invocation.ui, repo, files.into_iter().map(Ok))
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,
Simon Sapin
rhg: Propogate manifest parse errors instead of panicking...
r49165 files: impl IntoIterator<Item = Result<&'a HgPath, HgError>>,
Simon Sapin
rhg: replace command structs with functions...
r47250 ) -> 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
Simon Sapin
rhg: refactor relativize_path into a struct + method...
r49284 let relativize = RelativizePaths::new(repo)?;
for result in files {
let path = result?;
stdout.write_all(&relativize.relativize(path))?;
stdout.write_all(b"\n")?;
Pulkit Goyal
rhg: refactor function to relativize paths in utils...
r48988 any = true;
Simon Sapin
rhg: refactor relativize_path into a struct + method...
r49284 }
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 }