chiark / gitweb /
Config inspection: Print nothing on no associations
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Tue, 10 Jan 2023 23:50:27 +0000 (23:50 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Wed, 11 Jan 2023 02:12:41 +0000 (02:12 +0000)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
client/client.rs
server/server.rs
src/config.rs

index cc8db31757c9e632cb8b6e6af2aa222a06d08a4a..77a816473574fe854b42c377ad1ccc9f720a1d99 100644 (file)
@@ -341,8 +341,9 @@ async fn main() {
     &opts.config, &opts.log, |_, ics| 
   {
     PrintConfigOpt(&opts.print_config)
-      .implement(&ics, )?;
-
+      .implement(ics, )?;
+    Ok(())
+  }, |_, ics| {
     Ok((ics,))
   });
 
index 8498d259b6b07eb97e5fd422a788b6a651e6bec6..ff21f76413234f602b08a865b99b93fc9316a7cc 100644 (file)
@@ -171,20 +171,29 @@ async fn async_main(opts: Opts, daemon: Option<Daemoniser>) {
     "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")?;
index 447e67f94c1a191a3ccaffc709403d35a7430d48..538bce211b7567a141d0f0c640fe6d0c8213a032 100644 (file)
@@ -1039,20 +1039,23 @@ pub fn read(opts: &Opts, end: LinkEnd)
   (server_name, ics)
 }
 
-pub fn startup<F,T>(progname: &str, end: LinkEnd,
+pub fn startup<F,T,G,U>(progname: &str, end: LinkEnd,
                     opts: &Opts, logopts: &LogOpts,
-                    f: F) -> T
-  where F: FnOnce(Option<ServerName>, Vec<InstanceConfig>) -> Result<T,AE>
+                    f: F, g: G) -> U
+where F: FnOnce(Option<ServerName>, &[InstanceConfig]) -> Result<T,AE>,
+      G: FnOnce(T, Vec<InstanceConfig>) -> Result<U,AE>,
 {
   (||{
     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);