fix: config merging

Embarrassingly, settings from the newly implemented config file where not being correctly applied. This *should* now be fixed.
Change the show standard error default to true
This commit is contained in:
Jack Wills
2025-04-16 15:16:16 +00:00
parent 9362d7b481
commit a468827f02
8 changed files with 63 additions and 44 deletions
+1 -1
View File
@@ -13,7 +13,7 @@
// Show self (the oxker container) when running as a docker container
"show_self": false,
// Show std_err in logs
"show_std_err": false,
"show_std_err": true,
// Show a timestamp for every log entry
"show_timestamp": true,
// Don't draw gui - for debugging - mostly pointless
+1 -1
View File
@@ -16,7 +16,7 @@ raw_logs = false
show_self = false
# Show std_err in logs
show_std_err = false
show_std_err = true
# Show a timestamp for every log entry
show_timestamp = true
+1 -1
View File
@@ -36,7 +36,7 @@ impl ContainerId {
/// Only return first 8 chars of id, is usually more than enough for uniqueness
/// TODO container id is a hex string, so can assume that 0..=8 will always return a 8 char ascii &str
/// need to update tests to use real ids, or atleast strings of the correct-ish length
/// need to update tests to use real ids, or atleast strings of the correct-ish length
pub fn get_short(&self) -> String {
self.0.chars().take(8).collect::<String>()
}
+1 -1
View File
@@ -16,7 +16,7 @@ raw_logs = false
show_self = false
# Show std_err in logs
show_std_err = false
show_std_err = true
# Show a timestamp for every log entry
show_timestamp = true
+36 -14
View File
@@ -126,19 +126,44 @@ impl Config {
}
/// Combine config from CLI into config file, the cli take priority
/// make sure color_logs and raw_logs can't clash
/// and also make sure color_logs and raw_logs can't clash
fn merge_args(mut self, config_from_cli: Self) -> Self {
self.color_logs = config_from_cli.color_logs;
self.docker_interval_ms = config_from_cli.docker_interval_ms;
self.gui = config_from_cli.gui;
self.raw_logs = config_from_cli.raw_logs;
self.show_self = config_from_cli.show_self;
self.show_std_err = config_from_cli.show_std_err;
self.show_timestamp = config_from_cli.show_timestamp;
self.use_cli = config_from_cli.use_cli;
let default_args = Args::default();
if config_from_cli.color_logs != default_args.color {
self.color_logs = config_from_cli.color_logs;
}
if config_from_cli.gui != default_args.gui {
self.gui = config_from_cli.gui;
}
if config_from_cli.docker_interval_ms != default_args.docker_interval {
self.docker_interval_ms = config_from_cli.docker_interval_ms;
}
if config_from_cli.docker_interval_ms < 1000 {
self.docker_interval_ms = 1000;
self.docker_interval_ms = default_args.docker_interval;
}
if config_from_cli.raw_logs != default_args.raw {
self.raw_logs = config_from_cli.raw_logs;
}
if config_from_cli.show_self != default_args.show_self {
self.show_self = config_from_cli.show_self;
}
if config_from_cli.show_std_err != default_args.no_std_err {
self.show_std_err = config_from_cli.show_std_err;
}
if config_from_cli.show_timestamp != default_args.timestamp {
self.show_timestamp = config_from_cli.show_timestamp;
}
if config_from_cli.use_cli != default_args.use_cli {
self.use_cli = config_from_cli.use_cli;
}
if let Some(host) = config_from_cli.host {
@@ -153,10 +178,7 @@ impl Config {
self.timezone = Some(tz);
}
if config_from_cli.raw_logs {
self.color_logs = false;
}
if config_from_cli.color_logs {
if self.color_logs && self.raw_logs {
self.raw_logs = false;
}
self
+19
View File
@@ -53,3 +53,22 @@ pub struct Args {
#[clap(long="use-cli", short = None)]
pub use_cli: bool,
}
impl Default for Args {
fn default() -> Self {
Self {
docker_interval: 1000,
timestamp: true,
color: false,
raw: false,
show_self: false,
gui: true,
host: None,
no_std_err: true,
timezone: None,
save_dir: None,
config_file: None,
use_cli: false,
}
}
}
+2 -24
View File
@@ -133,33 +133,13 @@ impl ConfigFile {
Self::parse(file_type, &input)
}
/// Resolve conflict in the args, this is handled automatically by Clap, basically just by rejecting it
/// But here we can just change the options - although maybe should be also reject to follow the same behaviour as Clap?
/// TODO I think this is duplicated with the merge_args fn
fn resolve_conflict(&mut self) {
if let Some(color) = self.color_logs.as_ref() {
if *color {
self.raw_logs = Some(false);
}
}
if let Some(interval) = self.docker_interval.as_ref() {
if interval < &1000 {
self.docker_interval = Some(1000);
}
}
}
/// Try to parse the config file when the path is user supplied via cliargs
pub fn try_parse_from_file(path: &str) -> Option<Self> {
let path = PathBuf::from(path);
let Ok(file_type) = ConfigFileType::try_from(&path) else {
return None;
};
Self::parse_config_file(file_type, &path).map_or(None, |mut config_file| {
config_file.resolve_conflict();
Some(config_file)
})
Self::parse_config_file(file_type, &path).ok()
}
/// Parse a config file using default config_file location
@@ -172,11 +152,9 @@ impl ConfigFile {
ConfigFileType::JsoncAsJson,
ConfigFileType::Json,
] {
if let Ok(mut config_file) =
if let Ok(config_file) =
Self::parse_config_file(file_type, &file_type.get_default_path_name(in_container))
{
Self::resolve_conflict(&mut config_file);
config = Some(config_file);
break;
}
+1 -1
View File
@@ -476,7 +476,7 @@ mod tests {
assert_snapshot!(setup.terminal.backend());
}
#[test]
#[test]
/// Custom keymap for help panel is correctly display, two definitions
fn test_draw_blocks_headers_custom_keymap_two_definitions() {
let mut setup = test_setup(140, 1, true, true);