##// END OF EJS Templates
auto-upgrade: add a test case with no permission to lock the repository...
auto-upgrade: add a test case with no permission to lock the repository This show the current behavior when the repository is unlockable. The current behavior is to abort, which is probably not great. Now that we have a proper test, we can think about the behavior we want in a later changeset. Differential Revision: https://phab.mercurial-scm.org/D12615

File last commit:

r49284:9b0e1f64 default
r50091:1c233af9 default
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 }