feat(cli): support explaining multiple parameters

This commit is contained in:
Orhun Parmaksız 2022-04-17 17:47:55 +03:00
parent ace15e10e8
commit 8bd45ee41b
No known key found for this signature in database
GPG key ID: F83424824B3E4B90
4 changed files with 18 additions and 7 deletions

View file

@ -385,10 +385,16 @@ systeroid -E user.max_user_namespaces --docs /usr/share/doc/linux
To change the default pager (`less(1)`), you can use the `PAGER` environment variable. Also, you can simply use `--no-pager` flag to disable it.
```
```sh
systeroid -E kernel.ctrl-alt-del --no-pager
```
It is also possible to retrieve information about multiple parameters:
```sh
systeroid -E --pattern '.*ipv4.*' --no-pager
```
## TUI
### Usage

View file

@ -170,7 +170,7 @@ impl Parameter {
if let Some(documentation) = self.get_documentation() {
writeln!(output, "{}\n", documentation)?;
} else {
writeln!(output, "No documentation available")?;
writeln!(output, "No documentation available for {}", self.name)?;
}
Ok(())
}
@ -267,7 +267,7 @@ mod tests {
let mut output = Vec::new();
parameter.display_documentation(&mut output)?;
assert_eq!(
"No documentation available\n",
format!("No documentation available for {}\n", parameter.name),
String::from_utf8_lossy(&output)
);

View file

@ -68,6 +68,7 @@ impl<'a, Output: Write> App<'a, Output> {
&mut self,
pattern: Option<Regex>,
display_deprecated: bool,
explain: bool,
) -> Result<()> {
let parameters = self.sysctl.parameters.clone();
let mut parameters = parameters.iter().filter(|parameter| {
@ -81,7 +82,11 @@ impl<'a, Output: Write> App<'a, Output> {
}
true
});
self.print_parameters(&mut parameters)
if explain {
parameters.try_for_each(|parameter| self.display_documentation(&parameter.name))
} else {
self.print_parameters(&mut parameters)
}
}
/// Displays the documentation of a parameter.
@ -242,14 +247,14 @@ mod tests {
let mut app = App::new(&mut sysctl, &mut output, OutputType::Default);
app.display_parameters(Regex::new("kernel|vm").ok(), false)?;
app.display_parameters(Regex::new("kernel|vm").ok(), false, false)?;
let result = String::from_utf8_lossy(app.output);
assert!(result.contains("vm.zone_reclaim_mode ="));
assert!(result.contains("kernel.version ="));
app.output.clear();
app.output_type = OutputType::Tree;
app.display_parameters(None, true)?;
app.display_parameters(None, true, false)?;
assert!(String::from_utf8_lossy(app.output).contains("─ osrelease ="));
app.output.clear();

View file

@ -37,7 +37,7 @@ pub fn run<Output: Write>(args: Args, output: &mut Output) -> Result<()> {
if args.preload_system_files {
app.preload_from_system()?;
} else if args.values.is_empty() {
app.display_parameters(args.pattern, args.display_deprecated)?;
app.display_parameters(args.pattern, args.display_deprecated, args.explain)?;
} else if args.explain {
for param in args.values {
app.display_documentation(&param)?;