mirror of
https://github.com/orhun/systeroid
synced 2024-10-06 15:49:09 +00:00
feat(sysctl): support using more flexible queries for variables
This commit is contained in:
parent
830535a170
commit
082af7b458
|
@ -57,6 +57,30 @@ impl Sysctl {
|
|||
parameter
|
||||
}
|
||||
|
||||
/// Returns the parameters that matches the given query.
|
||||
pub fn get_parameters(&self, query: &str) -> Vec<&Parameter> {
|
||||
let parameters = self
|
||||
.parameters
|
||||
.iter()
|
||||
.filter(|param| {
|
||||
param.name == query.replace("/", ".")
|
||||
|| param.section.to_string() == query
|
||||
|| match param.name.split('.').collect::<Vec<&str>>().last() {
|
||||
Some(absolute_name) => absolute_name == &query.replace("/", "."),
|
||||
_ => false,
|
||||
}
|
||||
})
|
||||
.collect::<Vec<&Parameter>>();
|
||||
if parameters.is_empty() {
|
||||
eprintln!(
|
||||
"{}: cannot stat /proc/{}: No such file or directory",
|
||||
env!("CARGO_PKG_NAME").split('-').collect::<Vec<_>>()[0],
|
||||
query.replace(".", "/")
|
||||
)
|
||||
}
|
||||
parameters
|
||||
}
|
||||
|
||||
/// Updates the parameters using the given list.
|
||||
///
|
||||
/// Keeps the original values.
|
||||
|
|
|
@ -121,12 +121,15 @@ impl<'a> App<'a> {
|
|||
} else {
|
||||
None
|
||||
};
|
||||
if let Some(parameter) = self.sysctl.get_parameter(¶m_name) {
|
||||
if let Some(new_value) = new_value {
|
||||
if let Some(new_value) = new_value {
|
||||
if let Some(parameter) = self.sysctl.get_parameter(¶m_name) {
|
||||
parameter.update_value(&new_value, self.config, &mut self.stdout)?;
|
||||
} else {
|
||||
parameter.display_value(self.config, &mut self.stdout)?;
|
||||
}
|
||||
} else {
|
||||
self.sysctl
|
||||
.get_parameters(¶m_name)
|
||||
.iter()
|
||||
.try_for_each(|parameter| parameter.display_value(self.config, &mut self.stdout))?;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue