From 045c87fbcd1cb8efe8bd3a41f55790b326ed6ee4 Mon Sep 17 00:00:00 2001 From: c-14 Date: Sun, 25 Sep 2022 12:15:33 +0200 Subject: Allow stateless commands to be run without config/database (#544) * Allow stateless commands to be run without config/database Fixes an issue where gen-completions fails trying to create a config directory in restrained build environments/distribution. * move non-db commands up to core subcommands * re-add lost lines * re-add lost lines Co-authored-by: Conrad Ludgate --- src/command/mod.rs | 50 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) (limited to 'src/command/mod.rs') diff --git a/src/command/mod.rs b/src/command/mod.rs index ca7fc724..393936b0 100644 --- a/src/command/mod.rs +++ b/src/command/mod.rs @@ -1,4 +1,5 @@ -use clap::Subcommand; +use clap::{CommandFactory, Subcommand}; +use clap_complete::{generate, generate_to, Shell}; use eyre::Result; #[cfg(feature = "client")] @@ -7,6 +8,8 @@ mod client; #[cfg(feature = "server")] mod server; +mod init; + #[derive(Subcommand)] #[clap(infer_subcommands = true)] pub enum AtuinCmd { @@ -18,6 +21,24 @@ pub enum AtuinCmd { #[cfg(feature = "server")] #[clap(subcommand)] Server(server::Cmd), + + /// Output shell setup + #[clap(subcommand)] + Init(init::Cmd), + + /// Generate a UUID + Uuid, + + /// Generate shell completions + GenCompletions { + /// Set the shell for generating completions + #[clap(long, short)] + shell: Shell, + + /// Set the output directory + #[clap(long, short)] + out_dir: Option, + }, } impl AtuinCmd { @@ -27,6 +48,33 @@ impl AtuinCmd { Self::Client(client) => client.run(), #[cfg(feature = "server")] Self::Server(server) => server.run(), + Self::Init(init) => { + init.run(); + Ok(()) + } + Self::Uuid => { + println!("{}", atuin_common::utils::uuid_v4()); + Ok(()) + } + Self::GenCompletions { shell, out_dir } => { + let mut cli = crate::Atuin::command(); + + match out_dir { + Some(out_dir) => { + generate_to(shell, &mut cli, env!("CARGO_PKG_NAME"), &out_dir)?; + } + None => { + generate( + shell, + &mut cli, + env!("CARGO_PKG_NAME"), + &mut std::io::stdout(), + ); + } + } + + Ok(()) + } } } } -- cgit v1.3.1