From: Ian Jackson Date: Tue, 10 Jan 2023 23:50:27 +0000 (+0000) Subject: Config inspection: Print nothing on no associations X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ian/git?a=commitdiff_plain;h=e741782f73bb57519809a6acbdad762b7401b201;p=hippotat.git Config inspection: Print nothing on no associations Signed-off-by: Ian Jackson --- diff --git a/client/client.rs b/client/client.rs index cc8db31..77a8164 100644 --- a/client/client.rs +++ b/client/client.rs @@ -341,8 +341,9 @@ async fn main() { &opts.config, &opts.log, |_, ics| { PrintConfigOpt(&opts.print_config) - .implement(&ics, )?; - + .implement(ics, )?; + Ok(()) + }, |_, ics| { Ok((ics,)) }); diff --git a/server/server.rs b/server/server.rs index 8498d25..ff21f76 100644 --- a/server/server.rs +++ b/server/server.rs @@ -171,20 +171,29 @@ async fn async_main(opts: Opts, daemon: Option) { "hippotatd", LinkEnd::Server, &opts.config, &opts.log, |server_name, ics| { - let global_config = config::InstanceConfigGlobal::from(&ics); let server_name = server_name.expect("LinkEnd::Server didn't do its job"); + let pc = PrintConfigOpt(&opts.print_config); + + if ics.is_empty() { + pc.implement(ics)?; + return Ok(None); + } - { - let pc = PrintConfigOpt(&opts.print_config); - let gc = (&server_name, &global_config); + let global_config = config::InstanceConfigGlobal::from(&ics); + let gc = (&server_name, &global_config); - if pc.keys().all(|k| gc.inspect_key(k).is_some()) { - pc.implement([&gc])?; - } else { - pc.implement(&ics)?; - } + if pc.keys().all(|k| gc.inspect_key(k).is_some()) { + pc.implement([&gc])?; + } else { + pc.implement(ics)?; } + Ok(Some(global_config)) + + }, |global_config, ics| { + + let global_config = global_config.expect("some instances"); + if let Some(pidfile_path) = opts.pidfile.as_ref() { (||{ let mut pidfile = fs::File::create(pidfile_path).context("create")?; diff --git a/src/config.rs b/src/config.rs index 447e67f..538bce2 100644 --- a/src/config.rs +++ b/src/config.rs @@ -1039,20 +1039,23 @@ pub fn read(opts: &Opts, end: LinkEnd) (server_name, ics) } -pub fn startup(progname: &str, end: LinkEnd, +pub fn startup(progname: &str, end: LinkEnd, opts: &Opts, logopts: &LogOpts, - f: F) -> T - where F: FnOnce(Option, Vec) -> Result + f: F, g: G) -> U +where F: FnOnce(Option, &[InstanceConfig]) -> Result, + G: FnOnce(T, Vec) -> Result, { (||{ dedup_eyre_setup()?; let (server_name, ics) = config::read(opts, end)?; + + let t = f(server_name, &ics)?; if ics.is_empty() { throw!(anyhow!("no associations, quitting")); } logopts.log_init()?; - let t = f(server_name, ics)?; + let u = g(t, ics)?; - Ok::<_,AE>(t) + Ok::<_,AE>(u) })().unwrap_or_else(|e| { eprintln!("{}: startup error: {}", progname, &e); process::exit(8);