about summary refs log tree commit diff stats
path: root/pkgs/by-name/fu/fupdate/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/by-name/fu/fupdate/src/main.rs')
-rw-r--r--pkgs/by-name/fu/fupdate/src/main.rs40
1 files changed, 40 insertions, 0 deletions
diff --git a/pkgs/by-name/fu/fupdate/src/main.rs b/pkgs/by-name/fu/fupdate/src/main.rs
new file mode 100644
index 00000000..850eaf87
--- /dev/null
+++ b/pkgs/by-name/fu/fupdate/src/main.rs
@@ -0,0 +1,40 @@
+use std::process::Command;
+
+use anyhow::{bail, Context, Result};
+use clap::{CommandFactory, Parser};
+
+pub mod cli;
+
+use crate::cli::CliArgs;
+
+fn main() -> Result<(), anyhow::Error> {
+    clap_complete::CompleteEnv::with_factory(CliArgs::command).complete();
+
+    let args = CliArgs::parse();
+
+    let other = args.command.first().map_or("flake", String::as_str);
+
+    {
+        let args = if args.command.len() > 1 {
+            &args.command[1..]
+        } else {
+            &[]
+        };
+
+        let status = Command::new(format!("fupdate-{other}"))
+            .args(args)
+            .status()
+            .with_context(|| format!("Failed to execute `fupdate-{other}`"))?;
+
+        if !status.success() {
+            bail!("Command `fupdate-{other}` failed!");
+        }
+    }
+
+    Ok(())
+}
+
+#[test]
+fn verify_cli() {
+    CliArgs::command().debug_assert();
+}