aboutsummaryrefslogtreecommitdiffstats
path: root/src/command/mod.rs
diff options
context:
space:
mode:
authorConrad Ludgate <conrad.ludgate@truelayer.com>2022-04-21 10:12:56 +0100
committerGitHub <noreply@github.com>2022-04-21 09:12:56 +0000
commitd57f549855caf8ab90b5ea0ae7cc9445f3abedfc (patch)
tree0818ff405a3b697a0ca981d215ceb4dbb30cd15a /src/command/mod.rs
parentFix SQL cache query (#318) (diff)
downloadatuin-d57f549855caf8ab90b5ea0ae7cc9445f3abedfc.zip
refactor commands for better separation (#313)
* refactor commands for better separation * fmt
Diffstat (limited to 'src/command/mod.rs')
-rw-r--r--src/command/mod.rs199
1 files changed, 6 insertions, 193 deletions
diff --git a/src/command/mod.rs b/src/command/mod.rs
index 84634211..3a3ed393 100644
--- a/src/command/mod.rs
+++ b/src/command/mod.rs
@@ -1,212 +1,25 @@
-use std::path::PathBuf;
-
-use clap::CommandFactory;
use clap::Subcommand;
-use clap_complete::Shell;
-use clap_complete::{generate, generate_to};
-use eyre::{Result, WrapErr};
-
-use atuin_client::database::Sqlite;
-use atuin_client::settings::Settings as ClientSettings;
-use atuin_common::utils::uuid_v4;
-use atuin_server::settings::Settings as ServerSettings;
+use eyre::Result;
-mod event;
-mod history;
-mod import;
-mod init;
-mod login;
-mod logout;
-mod register;
-mod search;
+mod client;
mod server;
-mod stats;
-mod sync;
#[derive(Subcommand)]
#[clap(infer_subcommands = true)]
pub enum AtuinCmd {
- /// Manipulate shell history
- #[clap(subcommand)]
- History(history::Cmd),
-
- /// Import shell history from file
- #[clap(subcommand)]
- Import(import::Cmd),
+ #[clap(flatten)]
+ Client(client::Cmd),
/// Start an atuin server
#[clap(subcommand)]
Server(server::Cmd),
-
- /// Calculate statistics for your history
- #[clap(subcommand)]
- Stats(stats::Cmd),
-
- /// Output shell setup
- #[clap(subcommand)]
- Init(init::Cmd),
-
- /// Generate a UUID
- Uuid,
-
- /// Interactive history search
- Search {
- /// Filter search result by directory
- #[clap(long, short)]
- cwd: Option<String>,
-
- /// Exclude directory from results
- #[clap(long = "exclude-cwd")]
- exclude_cwd: Option<String>,
-
- /// Filter search result by exit code
- #[clap(long, short)]
- exit: Option<i64>,
-
- /// Exclude results with this exit code
- #[clap(long = "exclude-exit")]
- exclude_exit: Option<i64>,
-
- /// Only include results added before this date
- #[clap(long, short)]
- before: Option<String>,
-
- /// Only include results after this date
- #[clap(long)]
- after: Option<String>,
-
- /// Open interactive search UI
- #[clap(long, short)]
- interactive: bool,
-
- /// Use human-readable formatting for time
- #[clap(long)]
- human: bool,
-
- query: Vec<String>,
-
- /// Show only the text of the command
- #[clap(long)]
- cmd_only: bool,
- },
-
- /// Sync with the configured server
- Sync {
- /// Force re-download everything
- #[clap(long, short)]
- force: bool,
- },
-
- /// Login to the configured server
- Login(login::Cmd),
-
- /// Log out
- Logout,
-
- /// Register with the configured server
- Register(register::Cmd),
-
- /// Print the encryption key for transfer to another machine
- Key,
-
- /// 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<String>,
- },
}
impl AtuinCmd {
pub async fn run(self) -> Result<()> {
- let client_settings = ClientSettings::new().wrap_err("could not load client settings")?;
- let server_settings = ServerSettings::new().wrap_err("could not load server settings")?;
-
- let db_path = PathBuf::from(client_settings.db_path.as_str());
-
- let mut db = Sqlite::new(db_path).await?;
-
match self {
- Self::History(history) => history.run(&client_settings, &mut db).await,
- Self::Import(import) => import.run(&mut db).await,
- Self::Server(server) => server.run(server_settings).await,
- Self::Stats(stats) => stats.run(&mut db, &client_settings).await,
- Self::Init(init) => {
- init.run();
- Ok(())
- }
- Self::Search {
- cwd,
- exit,
- interactive,
- human,
- exclude_exit,
- exclude_cwd,
- before,
- after,
- query,
- cmd_only,
- } => {
- search::run(
- &client_settings,
- cwd,
- exit,
- interactive,
- human,
- exclude_exit,
- exclude_cwd,
- before,
- after,
- cmd_only,
- &query,
- &mut db,
- )
- .await
- }
-
- Self::Sync { force } => sync::run(&client_settings, force, &mut db).await,
- Self::Login(l) => l.run(&client_settings).await,
- Self::Logout => {
- logout::run();
- Ok(())
- }
- Self::Register(r) => {
- register::run(&client_settings, &r.username, &r.email, &r.password).await
- }
- Self::Key => {
- use atuin_client::encryption::{encode_key, load_key};
- let key = load_key(&client_settings).wrap_err("could not load encryption key")?;
- let encode = encode_key(key).wrap_err("could not encode encryption key")?;
- println!("{}", encode);
- Ok(())
- }
- Self::Uuid => {
- println!("{}", 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(())
- }
+ Self::Client(client) => client.run().await,
+ Self::Server(server) => server.run().await,
}
}
}