mirror of
https://github.com/orhun/systeroid
synced 2024-10-01 13:13:32 +00:00
feat(tui): show deprecated values optionally via --deprecated
This commit is contained in:
parent
a0b35e1964
commit
c39169c5f5
|
@ -415,6 +415,7 @@ systeroid-tui [options]
|
|||
--fg-color <color>
|
||||
set the foreground color [default: white]
|
||||
-n, --no-docs do not show the kernel documentation
|
||||
--deprecated include deprecated variables while listing
|
||||
-h, --help display this help and exit
|
||||
-V, --version output version information and exit
|
||||
```
|
||||
|
|
|
@ -34,6 +34,9 @@ Use this option to set the foreground color. [default: white]
|
|||
\fB\-n\fR, \fB\-\-no\-docs\fR
|
||||
Do not show the kernel documentation.
|
||||
.TP
|
||||
\fB\-\-deprecated\fR
|
||||
Include deprecated variables while listing.
|
||||
.TP
|
||||
\fB\-h\fR, \fB\-\-help\fR
|
||||
Display help text and exit.
|
||||
.TP
|
||||
|
|
|
@ -19,6 +19,8 @@ pub struct Config {
|
|||
pub verbose: bool,
|
||||
/// Whether if the errors should be ignored.
|
||||
pub ignore_errors: bool,
|
||||
/// Whether if the deprecated variables should be included while listing.
|
||||
pub display_deprecated: bool,
|
||||
/// Whether if the quiet mode is enabled.
|
||||
pub quiet: bool,
|
||||
/// Whether if the pager is disabled.
|
||||
|
@ -36,6 +38,7 @@ impl Default for Config {
|
|||
Self {
|
||||
verbose: false,
|
||||
ignore_errors: false,
|
||||
display_deprecated: false,
|
||||
quiet: false,
|
||||
no_pager: false,
|
||||
section_colors: map! {
|
||||
|
|
|
@ -4,6 +4,7 @@ use crate::error::Result;
|
|||
use crate::parsers::{parse_kernel_docs, KERNEL_DOCS_PATH};
|
||||
use crate::sysctl::parameter::Parameter;
|
||||
use crate::sysctl::section::Section;
|
||||
use crate::sysctl::DEPRECATED_PARAMS;
|
||||
use crate::sysctl::{DISABLE_CACHE_ENV, PARAMETERS_CACHE_LABEL, PROC_PATH};
|
||||
use parseit::globwalk;
|
||||
use rayon::prelude::*;
|
||||
|
@ -33,7 +34,17 @@ impl Sysctl {
|
|||
}) {
|
||||
match Parameter::try_from(&ctl) {
|
||||
Ok(parameter) => {
|
||||
parameters.push(parameter);
|
||||
if !config.display_deprecated {
|
||||
let mut skip_param = false;
|
||||
if let Some(param_name) = parameter.get_absolute_name() {
|
||||
skip_param = DEPRECATED_PARAMS.contains(¶m_name);
|
||||
}
|
||||
if !skip_param {
|
||||
parameters.push(parameter);
|
||||
}
|
||||
} else {
|
||||
parameters.push(parameter);
|
||||
}
|
||||
}
|
||||
Err(e) => {
|
||||
if config.verbose {
|
||||
|
@ -119,17 +130,17 @@ impl Sysctl {
|
|||
/// Updates the parameters internally using the given list.
|
||||
///
|
||||
/// Keeps the original values.
|
||||
fn update_params(&mut self, mut parameters: Vec<Parameter>) {
|
||||
parameters.par_iter_mut().for_each(|parameter| {
|
||||
if let Some(param) = self
|
||||
.parameters
|
||||
fn update_params(&mut self, parameters: Vec<Parameter>) {
|
||||
self.parameters.par_iter_mut().for_each(|parameter| {
|
||||
if let Some(param) = parameters
|
||||
.par_iter()
|
||||
.find_any(|param| param.name == parameter.name)
|
||||
{
|
||||
parameter.value = param.value.to_string();
|
||||
parameter.description = param.description.clone();
|
||||
parameter.docs_path = param.docs_path.clone();
|
||||
parameter.docs_title = param.docs_title.clone();
|
||||
}
|
||||
});
|
||||
self.parameters = parameters;
|
||||
}
|
||||
|
||||
/// Updates the descriptions of the kernel parameters.
|
||||
|
|
|
@ -30,6 +30,8 @@ pub struct Args {
|
|||
pub colors: Colors,
|
||||
/// Do not parse/show Linux kernel documentation.
|
||||
pub no_docs: bool,
|
||||
/// Whether if the deprecated variables should be included while listing.
|
||||
pub display_deprecated: bool,
|
||||
}
|
||||
|
||||
impl Args {
|
||||
|
@ -63,6 +65,11 @@ impl Args {
|
|||
"<color>",
|
||||
);
|
||||
opts.optflag("n", "no-docs", "do not show the kernel documentation");
|
||||
opts.optflag(
|
||||
"",
|
||||
"deprecated",
|
||||
"include deprecated variables while listing",
|
||||
);
|
||||
opts.optflag("h", "help", "display this help and exit");
|
||||
opts.optflag("V", "version", "output version information and exit");
|
||||
opts
|
||||
|
@ -106,6 +113,7 @@ impl Args {
|
|||
.map_err(|e| eprintln!("error: `{}`", e))
|
||||
.ok()?,
|
||||
no_docs: matches.opt_present("n"),
|
||||
display_deprecated: matches.opt_present("deprecated"),
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
@ -34,7 +34,11 @@ use tui::terminal::Terminal;
|
|||
|
||||
/// Runs `systeroid-tui`.
|
||||
pub fn run<B: Backend>(args: Args, backend: B) -> Result<()> {
|
||||
let mut sysctl = Sysctl::init(Config::default())?;
|
||||
let config = Config {
|
||||
display_deprecated: args.display_deprecated,
|
||||
..Default::default()
|
||||
};
|
||||
let mut sysctl = Sysctl::init(config)?;
|
||||
if !args.no_docs {
|
||||
sysctl.update_docs_from_cache(args.kernel_docs.as_ref(), &Cache::init()?)?;
|
||||
}
|
||||
|
|
|
@ -64,22 +64,12 @@ impl<'a, Output: Write> App<'a, Output> {
|
|||
}
|
||||
|
||||
/// Displays all of the available kernel parameters.
|
||||
pub fn display_parameters(
|
||||
&mut self,
|
||||
pattern: Option<Regex>,
|
||||
display_deprecated: bool,
|
||||
explain: bool,
|
||||
) -> Result<()> {
|
||||
pub fn display_parameters(&mut self, pattern: Option<Regex>, explain: bool) -> Result<()> {
|
||||
let parameters = self.sysctl.parameters.clone();
|
||||
let mut parameters = parameters.iter().filter(|parameter| {
|
||||
if let Some(pattern) = &pattern {
|
||||
return pattern.is_match(¶meter.name);
|
||||
}
|
||||
if !display_deprecated {
|
||||
if let Some(param_name) = parameter.get_absolute_name() {
|
||||
return !DEPRECATED_PARAMS.contains(¶m_name);
|
||||
}
|
||||
}
|
||||
true
|
||||
});
|
||||
if explain {
|
||||
|
@ -247,14 +237,14 @@ mod tests {
|
|||
|
||||
let mut app = App::new(&mut sysctl, &mut output, OutputType::Default);
|
||||
|
||||
app.display_parameters(Regex::new("kernel|vm").ok(), false, false)?;
|
||||
app.display_parameters(Regex::new("kernel|vm").ok(), 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, false)?;
|
||||
app.display_parameters(None, false)?;
|
||||
assert!(String::from_utf8_lossy(app.output).contains("─ osrelease ="));
|
||||
app.output.clear();
|
||||
|
||||
|
|
|
@ -23,6 +23,7 @@ pub fn run<Output: Write>(args: Args, output: &mut Output) -> Result<()> {
|
|||
let config = Config {
|
||||
verbose: args.verbose,
|
||||
ignore_errors: args.ignore_errors,
|
||||
display_deprecated: args.display_deprecated,
|
||||
quiet: args.quiet,
|
||||
no_pager: args.no_pager,
|
||||
display_type: args.display_type,
|
||||
|
@ -37,7 +38,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, args.explain)?;
|
||||
app.display_parameters(args.pattern, args.explain)?;
|
||||
} else if args.explain {
|
||||
for param in args.values {
|
||||
app.display_documentation(¶m)?;
|
||||
|
|
Loading…
Reference in a new issue