diff options
Diffstat (limited to 'src/config/mod.rs')
-rw-r--r-- | src/config/mod.rs | 35 |
1 files changed, 24 insertions, 11 deletions
diff --git a/src/config/mod.rs b/src/config/mod.rs index 63c72d34..d9717704 100644 --- a/src/config/mod.rs +++ b/src/config/mod.rs @@ -2224,18 +2224,31 @@ impl Monitor { loop { match rx.recv().expect("watcher event") { DebouncedEvent::Rename(_, _) => continue, - DebouncedEvent::Write(path) | DebouncedEvent::Create(path) - | DebouncedEvent::Chmod(path) => { - // Reload file - if path == config_path { - match Config::load_from(path) { - Ok(config) => { - let _ = config_tx.send(config); - handler.on_config_reload(); - }, - Err(err) => error!("Ignoring invalid config: {}", err), + DebouncedEvent::Write(path) + | DebouncedEvent::Create(path) + | DebouncedEvent::Chmod(path) => + { + if path != config_path { + continue; + } + + let config = match Config::load_from(&path) { + Ok(config) => { + config + }, + Err(err) => { + if let Error::Empty = err { + info!("Config file {:?} is empty; loading default", path); + Config::default() + } else { + error!("Ignoring invalid config: {}", err); + continue; + } } - } + }; + + let _ = config_tx.send(config); + handler.on_config_reload(); } _ => {} } |