debugrhgsparse.rs
49 lines
| 1.5 KiB
| application/rls-services+xml
|
RustLexer
Raphaël Gomès
|
r50534 | use std::{ | ||
ffi::{OsStr, OsString}, | ||||
os::unix::prelude::OsStrExt, | ||||
}; | ||||
Raphaël Gomès
|
r50379 | |||
use crate::error::CommandError; | ||||
use hg::{self, utils::hg_path::HgPath}; | ||||
pub const HELP_TEXT: &str = ""; | ||||
Raphaël Gomès
|
r50534 | pub fn args() -> clap::Command { | ||
clap::command!("debugrhgsparse") | ||||
Raphaël Gomès
|
r50379 | .arg( | ||
Raphaël Gomès
|
r50534 | clap::Arg::new("files") | ||
.value_name("FILES") | ||||
Raphaël Gomès
|
r50379 | .required(true) | ||
Raphaël Gomès
|
r50534 | .num_args(1..) | ||
.value_parser(clap::value_parser!(std::ffi::OsString)) | ||||
Raphaël Gomès
|
r50379 | .help("Files to check against sparse profile"), | ||
) | ||||
.about(HELP_TEXT) | ||||
} | ||||
pub fn run(invocation: &crate::CliInvocation) -> Result<(), CommandError> { | ||||
let repo = invocation.repo?; | ||||
Raphaël Gomès
|
r50809 | let (matcher, _warnings) = hg::sparse::matcher(repo).unwrap(); | ||
Raphaël Gomès
|
r50534 | let files = invocation.subcommand_args.get_many::<OsString>("files"); | ||
Raphaël Gomès
|
r50379 | if let Some(files) = files { | ||
Raphaël Gomès
|
r50534 | let files: Vec<&OsStr> = files | ||
.filter(|s| !s.is_empty()) | ||||
.map(|s| s.as_os_str()) | ||||
.collect(); | ||||
Raphaël Gomès
|
r50379 | for file in files { | ||
invocation.ui.write_stdout(b"matches: ")?; | ||||
invocation.ui.write_stdout( | ||||
if matcher.matches(HgPath::new(file.as_bytes())) { | ||||
b"yes" | ||||
} else { | ||||
b"no" | ||||
}, | ||||
)?; | ||||
invocation.ui.write_stdout(b" | file: ")?; | ||||
invocation.ui.write_stdout(file.as_bytes())?; | ||||
invocation.ui.write_stdout(b"\n")?; | ||||
} | ||||
} | ||||
Ok(()) | ||||
} | ||||