##// END OF EJS Templates
rust-ignore: make `debugignorerhg` command show a full regex, with exact files
rust-ignore: make `debugignorerhg` command show a full regex, with exact files

File last commit:

r53250:e2e49069 default
r53250:e2e49069 default
Show More
debugignorerhg.rs
43 lines | 1.2 KiB | application/rls-services+xml | RustLexer
use crate::error::CommandError;
use hg::dirstate::status::StatusError;
use hg::filepatterns::RegexCompleteness;
use hg::matchers::get_ignore_matcher_pre;
use log::warn;
pub const HELP_TEXT: &str = "
Show effective hgignore patterns used by rhg.
This is a pure Rust version of `hg debugignore`.
Some options might be missing, check the list below.
";
pub fn args() -> clap::Command {
clap::command!("debugignorerhg").about(HELP_TEXT)
}
pub fn run(invocation: &crate::CliInvocation) -> Result<(), CommandError> {
let repo = invocation.repo?;
let ignore_file = repo.working_directory_vfs().join(".hgignore"); // TODO hardcoded
let (ignore_matcher, warnings) = get_ignore_matcher_pre(
vec![ignore_file],
repo.working_directory_path(),
&mut |_source, _pattern_bytes| (),
)
.map_err(StatusError::from)?;
let ignore_matcher = ignore_matcher
.build_debug_matcher(RegexComprehensiveness::Comprehensive)
.map_err(StatusError::from)?;
if !warnings.is_empty() {
warn!("Pattern warnings: {:?}", &warnings);
}
let patterns = ignore_matcher.debug_get_patterns();
invocation.ui.write_stdout(patterns)?;
invocation.ui.write_stdout(b"\n")?;
Ok(())
}