diff options
| author | Benedikt Peetz <benedikt.peetz@b-peetz.de> | 2026-06-11 00:54:30 +0200 |
|---|---|---|
| committer | Benedikt Peetz <benedikt.peetz@b-peetz.de> | 2026-06-11 00:54:30 +0200 |
| commit | 5c39e7cf284a1f6e9a1657f2deb44e359fc47eb8 (patch) | |
| tree | c64baa8d5866c8e339eaf660dd3f94f30a3f7d8a /crates/atuin-client/src | |
| parent | chore: Somewhat simplify sync code (diff) | |
| download | atuin-5c39e7cf284a1f6e9a1657f2deb44e359fc47eb8.zip | |
chore: Move everything into one big crate
That helps remove duplicated code and rustc/cargo will now also show
dead code correctly.
Diffstat (limited to '')
| -rw-r--r-- | crates/turtle/src/atuin_client/api_client.rs (renamed from crates/atuin-client/src/api_client.rs) | 7 | ||||
| -rw-r--r-- | crates/turtle/src/atuin_client/auth.rs (renamed from crates/atuin-client/src/auth.rs) | 29 | ||||
| -rw-r--r-- | crates/turtle/src/atuin_client/database.rs (renamed from crates/atuin-client/src/database.rs) | 9 | ||||
| -rw-r--r-- | crates/turtle/src/atuin_client/distro.rs (renamed from crates/atuin-client/src/distro.rs) | 0 | ||||
| -rw-r--r-- | crates/turtle/src/atuin_client/encryption.rs (renamed from crates/atuin-client/src/encryption.rs) | 2 | ||||
| -rw-r--r-- | crates/turtle/src/atuin_client/history.rs (renamed from crates/atuin-client/src/history.rs) | 26 | ||||
| -rw-r--r-- | crates/turtle/src/atuin_client/history/builder.rs (renamed from crates/atuin-client/src/history/builder.rs) | 0 | ||||
| -rw-r--r-- | crates/turtle/src/atuin_client/history/store.rs (renamed from crates/atuin-client/src/history/store.rs) | 9 | ||||
| -rw-r--r-- | crates/turtle/src/atuin_client/import/bash.rs (renamed from crates/atuin-client/src/import/bash.rs) | 9 | ||||
| -rw-r--r-- | crates/turtle/src/atuin_client/import/fish.rs (renamed from crates/atuin-client/src/import/fish.rs) | 4 | ||||
| -rw-r--r-- | crates/turtle/src/atuin_client/import/mod.rs (renamed from crates/atuin-client/src/import/mod.rs) | 2 | ||||
| -rw-r--r-- | crates/turtle/src/atuin_client/import/nu.rs (renamed from crates/atuin-client/src/import/nu.rs) | 4 | ||||
| -rw-r--r-- | crates/turtle/src/atuin_client/import/nu_histdb.rs (renamed from crates/atuin-client/src/import/nu_histdb.rs) | 4 | ||||
| -rw-r--r-- | crates/turtle/src/atuin_client/import/powershell.rs (renamed from crates/atuin-client/src/import/powershell.rs) | 4 | ||||
| -rw-r--r-- | crates/turtle/src/atuin_client/import/replxx.rs (renamed from crates/atuin-client/src/import/replxx.rs) | 4 | ||||
| -rw-r--r-- | crates/turtle/src/atuin_client/import/resh.rs (renamed from crates/atuin-client/src/import/resh.rs) | 6 | ||||
| -rw-r--r-- | crates/turtle/src/atuin_client/import/xonsh.rs (renamed from crates/atuin-client/src/import/xonsh.rs) | 4 | ||||
| -rw-r--r-- | crates/turtle/src/atuin_client/import/xonsh_sqlite.rs (renamed from crates/atuin-client/src/import/xonsh_sqlite.rs) | 4 | ||||
| -rw-r--r-- | crates/turtle/src/atuin_client/import/zsh.rs (renamed from crates/atuin-client/src/import/zsh.rs) | 4 | ||||
| -rw-r--r-- | crates/turtle/src/atuin_client/import/zsh_histdb.rs (renamed from crates/atuin-client/src/import/zsh_histdb.rs) | 8 | ||||
| -rw-r--r-- | crates/turtle/src/atuin_client/login.rs (renamed from crates/atuin-client/src/login.rs) | 4 | ||||
| -rw-r--r-- | crates/turtle/src/atuin_client/logout.rs (renamed from crates/atuin-client/src/logout.rs) | 2 | ||||
| -rw-r--r-- | crates/turtle/src/atuin_client/meta.rs (renamed from crates/atuin-client/src/meta.rs) | 7 | ||||
| -rw-r--r-- | crates/turtle/src/atuin_client/mod.rs (renamed from crates/atuin-client/src/lib.rs) | 5 | ||||
| -rw-r--r-- | crates/turtle/src/atuin_client/ordering.rs (renamed from crates/atuin-client/src/ordering.rs) | 0 | ||||
| -rw-r--r-- | crates/turtle/src/atuin_client/plugin.rs (renamed from crates/atuin-client/src/plugin.rs) | 0 | ||||
| -rw-r--r-- | crates/turtle/src/atuin_client/record/encryption.rs (renamed from crates/atuin-client/src/record/encryption.rs) | 4 | ||||
| -rw-r--r-- | crates/turtle/src/atuin_client/record/mod.rs (renamed from crates/atuin-client/src/record/mod.rs) | 0 | ||||
| -rw-r--r-- | crates/turtle/src/atuin_client/record/sqlite_store.rs (renamed from crates/atuin-client/src/record/sqlite_store.rs) | 7 | ||||
| -rw-r--r-- | crates/turtle/src/atuin_client/record/store.rs (renamed from crates/atuin-client/src/record/store.rs) | 2 | ||||
| -rw-r--r-- | crates/turtle/src/atuin_client/record/sync.rs (renamed from crates/atuin-client/src/record/sync.rs) | 15 | ||||
| -rw-r--r-- | crates/turtle/src/atuin_client/register.rs (renamed from crates/atuin-client/src/register.rs) | 4 | ||||
| -rw-r--r-- | crates/turtle/src/atuin_client/secrets.rs (renamed from crates/atuin-client/src/secrets.rs) | 0 | ||||
| -rw-r--r-- | crates/turtle/src/atuin_client/settings.rs (renamed from crates/atuin-client/src/settings.rs) | 46 | ||||
| -rw-r--r-- | crates/turtle/src/atuin_client/settings/meta.rs (renamed from crates/atuin-client/src/settings/meta.rs) | 2 | ||||
| -rw-r--r-- | crates/turtle/src/atuin_client/settings/watcher.rs (renamed from crates/atuin-client/src/settings/watcher.rs) | 4 | ||||
| -rw-r--r-- | crates/turtle/src/atuin_client/sync.rs (renamed from crates/atuin-client/src/sync.rs) | 5 | ||||
| -rw-r--r-- | crates/turtle/src/atuin_client/theme.rs (renamed from crates/atuin-client/src/theme.rs) | 4 | ||||
| -rw-r--r-- | crates/turtle/src/atuin_client/utils.rs (renamed from crates/atuin-client/src/utils.rs) | 0 |
39 files changed, 121 insertions, 129 deletions
diff --git a/crates/atuin-client/src/api_client.rs b/crates/turtle/src/atuin_client/api_client.rs index ca2fc661..7955c2da 100644 --- a/crates/atuin-client/src/api_client.rs +++ b/crates/turtle/src/atuin_client/api_client.rs @@ -7,13 +7,14 @@ use reqwest::{ Response, StatusCode, Url, header::{AUTHORIZATION, HeaderMap, USER_AGENT}, }; +use tracing::debug; -use atuin_common::{ +use crate::atuin_common::{ api::{ATUIN_CARGO_VERSION, ATUIN_HEADER_VERSION, ATUIN_VERSION}, record::{EncryptedData, HostId, Record, RecordIdx}, tls::ensure_crypto_provider, }; -use atuin_common::{ +use crate::atuin_common::{ api::{ AddHistoryRequest, ChangePasswordRequest, CountResponse, DeleteHistoryRequest, ErrorResponse, LoginRequest, LoginResponse, MeResponse, RegisterResponse, StatusResponse, @@ -26,7 +27,7 @@ use semver::Version; use time::OffsetDateTime; use time::format_description::well_known::Rfc3339; -use crate::{history::History, sync::hash_str, utils::get_host_user}; +use crate::atuin_client::{history::History, sync::hash_str, utils::get_host_user}; static APP_USER_AGENT: &str = concat!("atuin/", env!("CARGO_PKG_VERSION"),); diff --git a/crates/atuin-client/src/auth.rs b/crates/turtle/src/atuin_client/auth.rs index 1031c11f..b770c488 100644 --- a/crates/atuin-client/src/auth.rs +++ b/crates/turtle/src/atuin_client/auth.rs @@ -2,12 +2,15 @@ use async_trait::async_trait; use eyre::{Context, Result, bail}; use reqwest::{Url, header::USER_AGENT}; -use atuin_common::{ - api::{ATUIN_CARGO_VERSION, ATUIN_HEADER_VERSION, ChangePasswordRequest, LoginRequest}, - tls::ensure_crypto_provider, +use crate::{ + atuin_client::api_client, + atuin_common::{ + api::{ATUIN_CARGO_VERSION, ATUIN_HEADER_VERSION, ChangePasswordRequest, LoginRequest}, + tls::ensure_crypto_provider, + }, }; -use crate::settings::Settings; +use crate::atuin_client::settings::Settings; static APP_USER_AGENT: &str = concat!("atuin/", env!("CARGO_PKG_VERSION")); @@ -42,12 +45,7 @@ pub enum MutateResponse { #[async_trait] pub trait AuthClient: Send + Sync { /// Log in with username + password, optionally providing a TOTP code. - async fn login( - &self, - username: &str, - password: &str, - totp_code: Option<&str>, - ) -> Result<AuthResponse>; + async fn login(&self, username: &str, password: &str) -> Result<AuthResponse>; /// Register a new account. async fn register(&self, username: &str, email: &str, password: &str) -> Result<AuthResponse>; @@ -129,14 +127,9 @@ impl LegacyAuthClient { #[async_trait] impl AuthClient for LegacyAuthClient { - async fn login( - &self, - username: &str, - password: &str, - _totp_code: Option<&str>, - ) -> Result<AuthResponse> { + async fn login(&self, username: &str, password: &str) -> Result<AuthResponse> { // The legacy server has no 2FA support; totp_code is ignored. - let resp = crate::api_client::login( + let resp = api_client::login( &self.address, LoginRequest { username: username.to_string(), @@ -152,7 +145,7 @@ impl AuthClient for LegacyAuthClient { } async fn register(&self, username: &str, email: &str, password: &str) -> Result<AuthResponse> { - let resp = crate::api_client::register(&self.address, username, email, password).await?; + let resp = api_client::register(&self.address, username, email, password).await?; Ok(AuthResponse::Success { session: resp.session, auth_type: resp.auth.or(Some("cli".into())), diff --git a/crates/atuin-client/src/database.rs b/crates/turtle/src/atuin_client/database.rs index 946c1eb0..75b1200c 100644 --- a/crates/atuin-client/src/database.rs +++ b/crates/turtle/src/atuin_client/database.rs @@ -5,9 +5,9 @@ use std::{ time::Duration, }; -use crate::history::{AUTHOR_FILTER_ALL_AGENT, AUTHOR_FILTER_ALL_USER, KNOWN_AGENTS}; +use crate::atuin_client::history::{AUTHOR_FILTER_ALL_AGENT, AUTHOR_FILTER_ALL_USER, KNOWN_AGENTS}; +use crate::atuin_common::utils; use async_trait::async_trait; -use atuin_common::utils; use fs_err as fs; use itertools::Itertools; use rand::{Rng, distributions::Alphanumeric}; @@ -20,9 +20,10 @@ use sqlx::{ }, }; use time::OffsetDateTime; +use tracing::debug; use uuid::Uuid; -use crate::{ +use crate::atuin_client::{ history::{HistoryId, HistoryStats}, utils::get_host_user, }; @@ -969,7 +970,7 @@ impl SqlBuilderExt for SqlBuilder { #[cfg(test)] mod test { - use crate::settings::test_local_timeout; + use crate::atuin_client::settings::test_local_timeout; use super::*; use std::time::{Duration, Instant}; diff --git a/crates/atuin-client/src/distro.rs b/crates/turtle/src/atuin_client/distro.rs index dead8355..dead8355 100644 --- a/crates/atuin-client/src/distro.rs +++ b/crates/turtle/src/atuin_client/distro.rs diff --git a/crates/atuin-client/src/encryption.rs b/crates/turtle/src/atuin_client/encryption.rs index f2032482..20a0cd90 100644 --- a/crates/atuin-client/src/encryption.rs +++ b/crates/turtle/src/atuin_client/encryption.rs @@ -22,7 +22,7 @@ use rmp::{Marker, decode::Bytes}; use serde::{Deserialize, Serialize}; use time::{OffsetDateTime, format_description::well_known::Rfc3339, macros::format_description}; -use crate::{history::History, settings::Settings}; +use crate::atuin_client::{history::History, settings::Settings}; #[derive(Debug, Serialize, Deserialize)] pub struct EncryptedHistory { diff --git a/crates/atuin-client/src/history.rs b/crates/turtle/src/atuin_client/history.rs index aa0d84d5..cef65115 100644 --- a/crates/atuin-client/src/history.rs +++ b/crates/turtle/src/atuin_client/history.rs @@ -5,14 +5,14 @@ use rmp::{Marker, decode::Bytes}; use std::env; use std::fmt::Display; -use atuin_common::record::DecryptedData; -use atuin_common::utils::uuid_v7; +use crate::atuin_common::record::DecryptedData; +use crate::atuin_common::utils::uuid_v7; use eyre::{Result, bail, eyre}; -use crate::secrets::SECRET_PATTERNS_RE; -use crate::settings::Settings; -use crate::utils::get_host_user; +use crate::atuin_client::secrets::SECRET_PATTERNS_RE; +use crate::atuin_client::settings::Settings; +use crate::atuin_client::utils::get_host_user; use time::OffsetDateTime; mod builder; @@ -381,7 +381,7 @@ impl History { /// /// ## Examples /// ``` - /// use atuin_client::history::History; + /// use crate::atuin_client::history::History; /// /// let history: History = History::import() /// .timestamp(time::OffsetDateTime::now_utc()) @@ -392,7 +392,7 @@ impl History { /// /// If shell history contains more information, it can be added to the builder: /// ``` - /// use atuin_client::history::History; + /// use crate::atuin_client::history::History; /// /// let history: History = History::import() /// .timestamp(time::OffsetDateTime::now_utc()) @@ -408,7 +408,7 @@ impl History { /// is forced at compile time: /// /// ```compile_fail - /// use atuin_client::history::History; + /// use crate::atuin_client::history::History; /// /// // this will not compile because timestamp is missing /// let history: History = History::import() @@ -428,7 +428,7 @@ impl History { /// /// ## Examples /// ```rust - /// use atuin_client::history::History; + /// use crate::atuin_client::history::History; /// /// let history: History = History::capture() /// .timestamp(time::OffsetDateTime::now_utc()) @@ -441,7 +441,7 @@ impl History { /// Command without any required info cannot be captured, which is forced at compile time: /// /// ```compile_fail - /// use atuin_client::history::History; + /// use crate::atuin_client::history::History; /// /// // this will not compile because `cwd` is missing /// let history: History = History::capture() @@ -466,7 +466,7 @@ impl History { /// /// ## Examples /// ```rust - /// use atuin_client::history::History; + /// use crate::atuin_client::history::History; /// /// let history: History = History::daemon() /// .timestamp(time::OffsetDateTime::now_utc()) @@ -481,7 +481,7 @@ impl History { /// Command without any required info cannot be captured, which is forced at compile time: /// /// ```compile_fail - /// use atuin_client::history::History; + /// use crate::atuin_client::history::History; /// /// // this will not compile because `hostname` is missing /// let history: History = History::daemon() @@ -501,7 +501,7 @@ impl History { /// All fields are required, as they are all present in the database. /// /// ```compile_fail - /// use atuin_client::history::History; + /// use crate::atuin_client::history::History; /// /// // this will not compile because `id` field is missing /// let history: History = History::from_db() diff --git a/crates/atuin-client/src/history/builder.rs b/crates/turtle/src/atuin_client/history/builder.rs index 72a505fd..72a505fd 100644 --- a/crates/atuin-client/src/history/builder.rs +++ b/crates/turtle/src/atuin_client/history/builder.rs diff --git a/crates/atuin-client/src/history/store.rs b/crates/turtle/src/atuin_client/history/store.rs index ce7b43a1..66d9db47 100644 --- a/crates/atuin-client/src/history/store.rs +++ b/crates/turtle/src/atuin_client/history/store.rs @@ -3,12 +3,13 @@ use std::{collections::HashSet, fmt::Write, time::Duration}; use eyre::{Result, bail, eyre}; use indicatif::{ProgressBar, ProgressState, ProgressStyle}; use rmp::decode::Bytes; +use tracing::debug; -use crate::{ +use crate::atuin_client::{ database::{Database, current_context}, record::{encryption::PASETO_V4, sqlite_store::SqliteStore, store::Store}, }; -use atuin_common::record::{DecryptedData, Host, HostId, Record, RecordId, RecordIdx}; +use crate::atuin_common::record::{DecryptedData, Host, HostId, Record, RecordId, RecordIdx}; use super::{HISTORY_TAG, HISTORY_VERSION, HISTORY_VERSION_V0, History, HistoryId}; @@ -361,10 +362,10 @@ impl HistoryStore { #[cfg(test)] mod tests { - use atuin_common::record::DecryptedData; + use crate::atuin_common::record::DecryptedData; use time::macros::datetime; - use crate::history::{HISTORY_VERSION, store::HistoryRecord}; + use crate::atuin_client::history::{HISTORY_VERSION, store::HistoryRecord}; use super::History; diff --git a/crates/atuin-client/src/import/bash.rs b/crates/turtle/src/atuin_client/import/bash.rs index 99a44a58..d92fdfa0 100644 --- a/crates/atuin-client/src/import/bash.rs +++ b/crates/turtle/src/atuin_client/import/bash.rs @@ -5,10 +5,11 @@ use directories::UserDirs; use eyre::{Result, eyre}; use itertools::Itertools; use time::{Duration, OffsetDateTime}; +use tracing::warn; use super::{Importer, Loader, get_histfile_path, unix_byte_lines}; -use crate::history::History; -use crate::import::read_to_end; +use crate::atuin_client::history::History; +use crate::atuin_client::import::read_to_end; #[derive(Debug)] pub struct Bash { @@ -130,7 +131,7 @@ mod test { use itertools::{Itertools, assert_equal}; - use crate::import::{Importer, tests::TestLoader}; + use crate::atuin_client::import::{Importer, tests::TestLoader}; use super::Bash; @@ -183,7 +184,7 @@ cd ../ ); assert_equal( loader.buf.iter().map(|h| h.timestamp.unix_timestamp()), - [1672918999, 1672919006, 1672919020], + [1_672_918_999, 1_672_919_006, 1_672_919_020], ) } diff --git a/crates/atuin-client/src/import/fish.rs b/crates/turtle/src/atuin_client/import/fish.rs index 9fcf624c..1375bdd6 100644 --- a/crates/atuin-client/src/import/fish.rs +++ b/crates/turtle/src/atuin_client/import/fish.rs @@ -9,8 +9,8 @@ use eyre::{Result, eyre}; use time::OffsetDateTime; use super::{Importer, Loader, unix_byte_lines}; -use crate::history::History; -use crate::import::read_to_end; +use crate::atuin_client::history::History; +use crate::atuin_client::import::read_to_end; #[derive(Debug)] pub struct Fish { diff --git a/crates/atuin-client/src/import/mod.rs b/crates/turtle/src/atuin_client/import/mod.rs index 4a1c6af6..7726ead7 100644 --- a/crates/atuin-client/src/import/mod.rs +++ b/crates/turtle/src/atuin_client/import/mod.rs @@ -6,7 +6,7 @@ use async_trait::async_trait; use eyre::{Result, bail}; use memchr::Memchr; -use crate::history::History; +use crate::atuin_client::history::History; pub mod bash; pub mod fish; diff --git a/crates/atuin-client/src/import/nu.rs b/crates/turtle/src/atuin_client/import/nu.rs index cae90ac4..c93789b8 100644 --- a/crates/atuin-client/src/import/nu.rs +++ b/crates/turtle/src/atuin_client/import/nu.rs @@ -9,8 +9,8 @@ use eyre::{Result, eyre}; use time::OffsetDateTime; use super::{Importer, Loader, unix_byte_lines}; -use crate::history::History; -use crate::import::read_to_end; +use crate::atuin_client::history::History; +use crate::atuin_client::import::read_to_end; #[derive(Debug)] pub struct Nu { diff --git a/crates/atuin-client/src/import/nu_histdb.rs b/crates/turtle/src/atuin_client/import/nu_histdb.rs index a13cb2b4..7de18369 100644 --- a/crates/atuin-client/src/import/nu_histdb.rs +++ b/crates/turtle/src/atuin_client/import/nu_histdb.rs @@ -10,8 +10,8 @@ use sqlx::{Pool, sqlite::SqlitePool}; use time::{Duration, OffsetDateTime}; use super::Importer; -use crate::history::History; -use crate::import::Loader; +use crate::atuin_client::history::History; +use crate::atuin_client::import::Loader; #[derive(sqlx::FromRow, Debug)] pub struct HistDbEntry { diff --git a/crates/atuin-client/src/import/powershell.rs b/crates/turtle/src/atuin_client/import/powershell.rs index 86fd007d..8adcc850 100644 --- a/crates/atuin-client/src/import/powershell.rs +++ b/crates/turtle/src/atuin_client/import/powershell.rs @@ -5,8 +5,8 @@ use std::path::PathBuf; use time::{Duration, OffsetDateTime}; use super::{Importer, Loader, count_lines, unix_byte_lines}; -use crate::history::History; -use crate::import::read_to_end; +use crate::atuin_client::history::History; +use crate::atuin_client::import::read_to_end; #[derive(Debug)] pub struct PowerShell { diff --git a/crates/atuin-client/src/import/replxx.rs b/crates/turtle/src/atuin_client/import/replxx.rs index 47d566cf..42f84df5 100644 --- a/crates/atuin-client/src/import/replxx.rs +++ b/crates/turtle/src/atuin_client/import/replxx.rs @@ -6,8 +6,8 @@ use eyre::{Result, eyre}; use time::{OffsetDateTime, PrimitiveDateTime, macros::format_description}; use super::{Importer, Loader, get_histfile_path, unix_byte_lines}; -use crate::history::History; -use crate::import::read_to_end; +use crate::atuin_client::history::History; +use crate::atuin_client::import::read_to_end; #[derive(Debug)] pub struct Replxx { diff --git a/crates/atuin-client/src/import/resh.rs b/crates/turtle/src/atuin_client/import/resh.rs index df15f5b4..c5980c44 100644 --- a/crates/atuin-client/src/import/resh.rs +++ b/crates/turtle/src/atuin_client/import/resh.rs @@ -5,12 +5,12 @@ use directories::UserDirs; use eyre::{Result, eyre}; use serde::Deserialize; -use atuin_common::utils::uuid_v7; +use crate::atuin_common::utils::uuid_v7; use time::OffsetDateTime; use super::{Importer, Loader, get_histfile_path, unix_byte_lines}; -use crate::history::History; -use crate::import::read_to_end; +use crate::atuin_client::history::History; +use crate::atuin_client::import::read_to_end; #[derive(Deserialize, Debug)] #[serde(rename_all = "camelCase")] diff --git a/crates/atuin-client/src/import/xonsh.rs b/crates/turtle/src/atuin_client/import/xonsh.rs index 6f38de68..a7217826 100644 --- a/crates/atuin-client/src/import/xonsh.rs +++ b/crates/turtle/src/atuin_client/import/xonsh.rs @@ -11,8 +11,8 @@ use uuid::Uuid; use uuid::timestamp::{Timestamp, context::NoContext}; use super::{Importer, Loader, get_histdir_path}; -use crate::history::History; -use crate::utils::get_host_user; +use crate::atuin_client::history::History; +use crate::atuin_client::utils::get_host_user; // Note: both HistoryFile and HistoryData have other keys present in the JSON, we don't // care about them so we leave them unspecified so as to avoid deserializing unnecessarily. diff --git a/crates/atuin-client/src/import/xonsh_sqlite.rs b/crates/turtle/src/atuin_client/import/xonsh_sqlite.rs index 7d50ac84..ceedf7e9 100644 --- a/crates/atuin-client/src/import/xonsh_sqlite.rs +++ b/crates/turtle/src/atuin_client/import/xonsh_sqlite.rs @@ -11,8 +11,8 @@ use uuid::Uuid; use uuid::timestamp::{Timestamp, context::NoContext}; use super::{Importer, Loader, get_histfile_path}; -use crate::history::History; -use crate::utils::get_host_user; +use crate::atuin_client::history::History; +use crate::atuin_client::utils::get_host_user; #[derive(Debug, FromRow)] struct HistDbEntry { diff --git a/crates/atuin-client/src/import/zsh.rs b/crates/turtle/src/atuin_client/import/zsh.rs index 11e2f371..e1fd813a 100644 --- a/crates/atuin-client/src/import/zsh.rs +++ b/crates/turtle/src/atuin_client/import/zsh.rs @@ -10,8 +10,8 @@ use eyre::{Result, eyre}; use time::OffsetDateTime; use super::{Importer, Loader, get_histfile_path, unix_byte_lines}; -use crate::history::History; -use crate::import::read_to_end; +use crate::atuin_client::history::History; +use crate::atuin_client::import::read_to_end; #[derive(Debug)] pub struct Zsh { diff --git a/crates/atuin-client/src/import/zsh_histdb.rs b/crates/turtle/src/atuin_client/import/zsh_histdb.rs index bf44c3ad..f61bb74f 100644 --- a/crates/atuin-client/src/import/zsh_histdb.rs +++ b/crates/turtle/src/atuin_client/import/zsh_histdb.rs @@ -36,16 +36,16 @@ use std::collections::HashMap; use std::path::{Path, PathBuf}; use async_trait::async_trait; -use atuin_common::utils::uuid_v7; +use crate::atuin_common::utils::uuid_v7; use directories::UserDirs; use eyre::{Result, eyre}; use sqlx::{Pool, sqlite::SqlitePool}; use time::PrimitiveDateTime; use super::Importer; -use crate::history::History; -use crate::import::Loader; -use crate::utils::{get_hostname, get_username}; +use crate::atuin_client::history::History; +use crate::atuin_client::import::Loader; +use crate::atuin_client::utils::{get_hostname, get_username}; #[derive(sqlx::FromRow, Debug)] pub struct HistDbEntryCount { diff --git a/crates/atuin-client/src/login.rs b/crates/turtle/src/atuin_client/login.rs index 2545e890..ca4e16fe 100644 --- a/crates/atuin-client/src/login.rs +++ b/crates/turtle/src/atuin_client/login.rs @@ -1,11 +1,11 @@ use std::path::PathBuf; -use atuin_common::api::LoginRequest; +use crate::atuin_common::api::LoginRequest; use eyre::{Context, Result, bail}; use tokio::fs::File; use tokio::io::AsyncWriteExt; -use crate::{ +use crate::atuin_client::{ api_client, encryption::{decode_key, load_key}, record::{sqlite_store::SqliteStore, store::Store}, diff --git a/crates/atuin-client/src/logout.rs b/crates/turtle/src/atuin_client/logout.rs index f720b302..343934b9 100644 --- a/crates/atuin-client/src/logout.rs +++ b/crates/turtle/src/atuin_client/logout.rs @@ -1,6 +1,6 @@ use eyre::Result; -use crate::settings::Settings; +use crate::atuin_client::settings::Settings; pub async fn logout() -> Result<()> { let meta = Settings::meta_store().await?; diff --git a/crates/atuin-client/src/meta.rs b/crates/turtle/src/atuin_client/meta.rs index 870f36d0..1eea7061 100644 --- a/crates/atuin-client/src/meta.rs +++ b/crates/turtle/src/atuin_client/meta.rs @@ -2,11 +2,12 @@ use std::path::Path; use std::str::FromStr; use std::time::Duration; -use atuin_common::record::HostId; +use crate::atuin_common::record::HostId; use eyre::{Result, eyre}; use sqlx::sqlite::{SqliteConnectOptions, SqliteJournalMode, SqlitePool, SqlitePoolOptions}; use time::{OffsetDateTime, format_description::well_known::Rfc3339}; use tokio::sync::OnceCell; +use tracing::{debug, warn}; use uuid::Uuid; // Filenames for the legacy plain-text files that we migrate from. @@ -125,7 +126,7 @@ impl MetaStore { return Ok(HostId(parsed)); } - let uuid = atuin_common::utils::uuid_v7(); + let uuid = crate::atuin_common::utils::uuid_v7(); self.set(KEY_HOST_ID, uuid.as_simple().to_string().as_ref()) .await?; @@ -197,7 +198,7 @@ impl MetaStore { return Ok(()); } - let data_dir = crate::settings::Settings::effective_data_dir(); + let data_dir = crate::atuin_client::settings::Settings::effective_data_dir(); // host_id — validate as UUID let host_id_path = data_dir.join(LEGACY_HOST_ID_FILENAME); diff --git a/crates/atuin-client/src/lib.rs b/crates/turtle/src/atuin_client/mod.rs index cd7785e1..7f07f2e2 100644 --- a/crates/atuin-client/src/lib.rs +++ b/crates/turtle/src/atuin_client/mod.rs @@ -1,8 +1,3 @@ -#![deny(unsafe_code)] - -#[macro_use] -extern crate log; - #[cfg(feature = "sync")] pub mod api_client; #[cfg(feature = "sync")] diff --git a/crates/atuin-client/src/ordering.rs b/crates/turtle/src/atuin_client/ordering.rs index 4e5ec84c..4e5ec84c 100644 --- a/crates/atuin-client/src/ordering.rs +++ b/crates/turtle/src/atuin_client/ordering.rs diff --git a/crates/atuin-client/src/plugin.rs b/crates/turtle/src/atuin_client/plugin.rs index 6f351bf1..6f351bf1 100644 --- a/crates/atuin-client/src/plugin.rs +++ b/crates/turtle/src/atuin_client/plugin.rs diff --git a/crates/atuin-client/src/record/encryption.rs b/crates/turtle/src/atuin_client/record/encryption.rs index 1e94d967..22dcdec3 100644 --- a/crates/atuin-client/src/record/encryption.rs +++ b/crates/turtle/src/atuin_client/record/encryption.rs @@ -1,4 +1,4 @@ -use atuin_common::record::{ +use crate::atuin_common::record::{ AdditionalData, DecryptedData, EncryptedData, Encryption, HostId, RecordId, RecordIdx, }; use base64::{Engine, engine::general_purpose}; @@ -197,7 +197,7 @@ impl Assertions<'_> { #[cfg(test)] mod tests { - use atuin_common::{ + use crate::atuin_common::{ record::{Host, Record}, utils::uuid_v7, }; diff --git a/crates/atuin-client/src/record/mod.rs b/crates/turtle/src/atuin_client/record/mod.rs index c40fd395..c40fd395 100644 --- a/crates/atuin-client/src/record/mod.rs +++ b/crates/turtle/src/atuin_client/record/mod.rs diff --git a/crates/atuin-client/src/record/sqlite_store.rs b/crates/turtle/src/atuin_client/record/sqlite_store.rs index ed51f3fd..5fab999d 100644 --- a/crates/atuin-client/src/record/sqlite_store.rs +++ b/crates/turtle/src/atuin_client/record/sqlite_store.rs @@ -13,11 +13,12 @@ use sqlx::{ Row, sqlite::{SqliteConnectOptions, SqliteJournalMode, SqlitePool, SqlitePoolOptions, SqliteRow}, }; +use tracing::debug; -use atuin_common::record::{ +use crate::atuin_common::record::{ EncryptedData, Host, HostId, Record, RecordId, RecordIdx, RecordStatus, }; -use atuin_common::utils; +use crate::atuin_common::utils; use uuid::Uuid; use super::encryption::PASETO_V4; @@ -371,7 +372,7 @@ impl Store for SqliteStore { #[cfg(test)] mod tests { - use atuin_common::{ + use crate::atuin_common::{ record::{DecryptedData, EncryptedData, Host, HostId, Record}, utils::uuid_v7, }; diff --git a/crates/atuin-client/src/record/store.rs b/crates/turtle/src/atuin_client/record/store.rs index 49ca4968..f99085d0 100644 --- a/crates/atuin-client/src/record/store.rs +++ b/crates/turtle/src/atuin_client/record/store.rs @@ -1,7 +1,7 @@ use async_trait::async_trait; use eyre::Result; -use atuin_common::record::{EncryptedData, HostId, Record, RecordId, RecordIdx, RecordStatus}; +use crate::atuin_common::record::{EncryptedData, HostId, Record, RecordId, RecordIdx, RecordStatus}; /// A record store stores records /// In more detail - we tend to need to process this into _another_ format to actually query it. diff --git a/crates/atuin-client/src/record/sync.rs b/crates/turtle/src/atuin_client/record/sync.rs index b785b5dc..f831570b 100644 --- a/crates/atuin-client/src/record/sync.rs +++ b/crates/turtle/src/atuin_client/record/sync.rs @@ -3,11 +3,12 @@ use std::{cmp::Ordering, fmt::Write}; use eyre::Result; use thiserror::Error; +use tracing::error; use super::{encryption::PASETO_V4, store::Store}; -use crate::{api_client::Client, settings::Settings}; +use crate::atuin_client::{api_client::Client, settings::Settings}; -use atuin_common::record::{Diff, HostId, RecordId, RecordIdx, RecordStatus}; +use crate::atuin_common::record::{Diff, HostId, RecordId, RecordIdx, RecordStatus}; use indicatif::{ProgressBar, ProgressState, ProgressStyle}; #[derive(Error, Debug)] @@ -372,10 +373,10 @@ pub async fn sync( #[cfg(test)] mod tests { - use atuin_common::record::{Diff, EncryptedData, HostId, Record}; + use crate::atuin_common::record::{Diff, EncryptedData, HostId, Record}; use pretty_assertions::assert_eq; - use crate::{ + use crate::atuin_client::{ record::{ encryption::PASETO_V4, sqlite_store::SqliteStore, @@ -387,11 +388,11 @@ mod tests { fn test_record() -> Record<EncryptedData> { Record::builder() - .host(atuin_common::record::Host::new(HostId( - atuin_common::utils::uuid_v7(), + .host(crate::atuin_common::record::Host::new(HostId( + crate::atuin_common::utils::uuid_v7(), ))) .version("v1".into()) - .tag(atuin_common::utils::uuid_v7().simple().to_string()) + .tag(crate::atuin_common::utils::uuid_v7().simple().to_string()) .data(EncryptedData { data: String::new(), content_encryption_key: String::new(), diff --git a/crates/atuin-client/src/register.rs b/crates/turtle/src/atuin_client/register.rs index ad077dd1..4b14c233 100644 --- a/crates/atuin-client/src/register.rs +++ b/crates/turtle/src/atuin_client/register.rs @@ -1,6 +1,6 @@ use eyre::Result; -use crate::{api_client, settings::Settings}; +use crate::atuin_client::{api_client, settings::Settings}; pub async fn register_classic( settings: &Settings, @@ -14,7 +14,7 @@ pub async fn register_classic( let meta = Settings::meta_store().await?; meta.save_session(&session.session).await?; - let _key = crate::encryption::load_key(settings)?; + let _key = crate::atuin_client::encryption::load_key(settings)?; Ok(session.session) } diff --git a/crates/atuin-client/src/secrets.rs b/crates/turtle/src/atuin_client/secrets.rs index e8a6ab62..e8a6ab62 100644 --- a/crates/atuin-client/src/secrets.rs +++ b/crates/turtle/src/atuin_client/secrets.rs diff --git a/crates/atuin-client/src/settings.rs b/crates/turtle/src/atuin_client/settings.rs index 5fb65c17..b0ffc7c1 100644 --- a/crates/atuin-client/src/settings.rs +++ b/crates/turtle/src/atuin_client/settings.rs @@ -1,8 +1,8 @@ use std::{collections::HashMap, fmt, io::prelude::*, path::PathBuf, str::FromStr, sync::OnceLock}; use tokio::sync::OnceCell; -use atuin_common::record::HostId; -use atuin_common::utils; +use crate::atuin_common::record::HostId; +use crate::atuin_common::utils; use clap::ValueEnum; use config::{ Config, ConfigBuilder, Environment, File as ConfigFile, FileFormat, builder::DefaultState, @@ -16,11 +16,10 @@ use serde_with::DeserializeFromStr; use time::{OffsetDateTime, UtcOffset, format_description::FormatItem, macros::format_description}; pub const HISTORY_PAGE_SIZE: i64 = 100; -static EXAMPLE_CONFIG: &str = include_str!("../config.toml"); static DATA_DIR: OnceLock<PathBuf> = OnceLock::new(); static META_CONFIG: OnceLock<(String, f64)> = OnceLock::new(); -static META_STORE: OnceCell<crate::meta::MetaStore> = OnceCell::const_new(); +static META_STORE: OnceCell<crate::atuin_client::meta::MetaStore> = OnceCell::const_new(); pub(crate) mod meta; pub mod watcher; @@ -374,8 +373,8 @@ impl SyncAuth { /// Convert into the auth token type used by the API client. /// /// Returns an error with an actionable message for `NotLoggedIn`. - pub fn into_auth_token(self) -> Result<crate::api_client::AuthToken> { - use crate::api_client::AuthToken; + pub fn into_auth_token(self) -> Result<crate::atuin_client::api_client::AuthToken> { + use crate::atuin_client::api_client::AuthToken; match self { SyncAuth::Legacy { token } => Ok(AuthToken::Token(token)), SyncAuth::NotLoggedIn { reason } => Err(eyre!(reason)), @@ -1038,7 +1037,6 @@ pub struct Settings { pub timezone: Timezone, pub style: Style, pub auto_sync: bool, - pub update_check: bool, /// The sync address for atuin. pub sync_address: String, @@ -1144,18 +1142,18 @@ impl Settings { DATA_DIR .get() .cloned() - .unwrap_or_else(atuin_common::utils::data_dir) + .unwrap_or_else(crate::atuin_common::utils::data_dir) } // -- Meta store: lazily initialized on first access -- - pub async fn meta_store() -> Result<&'static crate::meta::MetaStore> { + pub async fn meta_store() -> Result<&'static crate::atuin_client::meta::MetaStore> { META_STORE .get_or_try_init(|| async { let (db_path, timeout) = META_CONFIG.get().ok_or_else(|| { eyre!("meta store config not set — Settings::new() has not been called") })?; - crate::meta::MetaStore::new(db_path, *timeout).await + crate::atuin_client::meta::MetaStore::new(db_path, *timeout).await }) .await } @@ -1240,7 +1238,7 @@ impl Settings { /// `AuthToken`. Callers that need to distinguish between auth states /// (e.g. to show different UI) should call `resolve_sync_auth` directly. #[cfg(feature = "sync")] - pub async fn sync_auth_token(&self) -> Result<crate::api_client::AuthToken> { + pub async fn sync_auth_token(&self) -> Result<crate::atuin_client::api_client::AuthToken> { self.resolve_sync_auth().await.into_auth_token() } @@ -1262,7 +1260,7 @@ impl Settings { } pub fn builder() -> Result<ConfigBuilder<DefaultState>> { - Self::builder_with_data_dir(&atuin_common::utils::data_dir()) + Self::builder_with_data_dir(&crate::atuin_common::utils::data_dir()) } fn builder_with_data_dir(data_dir: &std::path::Path) -> Result<ConfigBuilder<DefaultState>> { @@ -1271,9 +1269,9 @@ impl Settings { let kv_path = data_dir.join("kv.db"); let scripts_path = data_dir.join("scripts.db"); let ai_sessions_path = data_dir.join("ai_sessions.db"); - let socket_path = atuin_common::utils::runtime_dir().join("atuin.sock"); + let socket_path = crate::atuin_common::utils::runtime_dir().join("atuin.sock"); let pidfile_path = data_dir.join("atuin-daemon.pid"); - let logs_dir = atuin_common::utils::logs_dir(); + let logs_dir = crate::atuin_common::utils::logs_dir(); let key_path = data_dir.join("key"); let meta_path = data_dir.join("meta.db"); @@ -1286,7 +1284,6 @@ impl Settings { .set_default("dialect", "us")? .set_default("timezone", "local")? .set_default("auto_sync", true)? - .set_default("update_check", cfg!(feature = "check-update"))? .set_default("sync_address", "https://api.atuin.sh")? .set_default("sync_frequency", "5m")? .set_default("search_mode", "fuzzy")? @@ -1390,7 +1387,7 @@ impl Settings { } pub fn get_config_path() -> Result<PathBuf> { - let config_dir = atuin_common::utils::config_dir(); + let config_dir = crate::atuin_common::utils::config_dir(); create_dir_all(&config_dir) .wrap_err_with(|| format!("could not create dir {config_dir:?}"))?; @@ -1447,10 +1444,10 @@ impl Settings { .map_err(|e| eyre!("failed to expand data_dir path: {}", e))?; PathBuf::from(expanded.as_ref()) } - None => atuin_common::utils::data_dir(), + None => crate::atuin_common::utils::data_dir(), } } else { - atuin_common::utils::data_dir() + crate::atuin_common::utils::data_dir() }; DATA_DIR.set(effective_data_dir.clone()).ok(); @@ -1467,7 +1464,10 @@ impl Settings { config_builder.add_source(ConfigFile::new(config_file_str, FileFormat::Toml)) } else { let mut file = File::create(config_file).wrap_err("could not create config file")?; - file.write_all(EXAMPLE_CONFIG.as_bytes()) + + let config = config_builder.build_cloned()?; + // TODO(@bpeetz): Not so sure about this <2026-06-10> + file.write_all(config.cache.to_string().as_bytes()) .wrap_err("could not write default config file")?; config_builder @@ -1590,10 +1590,6 @@ impl Settings { .map_err(|e| eyre!("failed to expand path: {}", e)) } - pub fn example_config() -> &'static str { - EXAMPLE_CONFIG - } - pub fn paths_ok(&self) -> bool { let paths = [ &self.db_path, @@ -1766,7 +1762,7 @@ mod tests { assert_eq!(meta_db_path, custom_dir.join("meta.db").to_str().unwrap()); assert_eq!( daemon_socket_path, - atuin_common::utils::runtime_dir() + crate::atuin_common::utils::runtime_dir() .join("atuin.sock") .to_str() .unwrap() @@ -1783,7 +1779,7 @@ mod tests { #[test] fn effective_data_dir_returns_default_when_not_set() { let effective = super::Settings::effective_data_dir(); - let default = atuin_common::utils::data_dir(); + let default = crate::atuin_common::utils::data_dir(); assert!(effective.to_str().is_some()); assert!(effective.ends_with("atuin") || effective == default); diff --git a/crates/atuin-client/src/settings/meta.rs b/crates/turtle/src/atuin_client/settings/meta.rs index 108d74ec..450d0432 100644 --- a/crates/atuin-client/src/settings/meta.rs +++ b/crates/turtle/src/atuin_client/settings/meta.rs @@ -7,7 +7,7 @@ pub struct Settings { impl Default for Settings { fn default() -> Self { - let dir = atuin_common::utils::data_dir(); + let dir = crate::atuin_common::utils::data_dir(); let path = dir.join("meta.db"); Self { diff --git a/crates/atuin-client/src/settings/watcher.rs b/crates/turtle/src/atuin_client/settings/watcher.rs index 740b8d12..7548573e 100644 --- a/crates/atuin-client/src/settings/watcher.rs +++ b/crates/turtle/src/atuin_client/settings/watcher.rs @@ -6,7 +6,7 @@ //! # Example //! //! ```no_run -//! use atuin_client::settings::watcher::global_settings_watcher; +//! use crate::atuin_client::settings::watcher::global_settings_watcher; //! //! async fn example() -> eyre::Result<()> { //! let watcher = global_settings_watcher()?; @@ -103,7 +103,7 @@ impl SettingsWatcher { let config_dir = if let Ok(p) = std::env::var("ATUIN_CONFIG_DIR") { PathBuf::from(p) } else { - atuin_common::utils::config_dir() + crate::atuin_common::utils::config_dir() }; config_dir.join("config.toml") } diff --git a/crates/atuin-client/src/sync.rs b/crates/turtle/src/atuin_client/sync.rs index 2c902794..361b6636 100644 --- a/crates/atuin-client/src/sync.rs +++ b/crates/turtle/src/atuin_client/sync.rs @@ -2,12 +2,13 @@ use std::collections::HashSet; use std::iter::FromIterator; use eyre::Result; +use tracing::{debug, info}; -use atuin_common::api::AddHistoryRequest; +use crate::atuin_common::api::AddHistoryRequest; use crypto_secretbox::Key; use time::OffsetDateTime; -use crate::{ +use crate::atuin_client::{ api_client, database::Database, encryption::{decrypt, encrypt, load_key}, diff --git a/crates/atuin-client/src/theme.rs b/crates/turtle/src/atuin_client/theme.rs index a277ac13..1d9c0b9e 100644 --- a/crates/atuin-client/src/theme.rs +++ b/crates/turtle/src/atuin_client/theme.rs @@ -395,7 +395,7 @@ impl ThemeManager { } PathBuf::from(p) } else { - let config_dir = atuin_common::utils::config_dir(); + let config_dir = crate::atuin_common::utils::config_dir(); let mut theme_file = if let Ok(p) = std::env::var("ATUIN_CONFIG_DIR") { PathBuf::from(p) } else { @@ -407,7 +407,7 @@ impl ThemeManager { theme_file }; - let theme_toml = format!["{name}.toml"]; + let theme_toml = format!("{name}.toml"); theme_file.push(theme_toml); let mut config_builder = Config::builder(); diff --git a/crates/atuin-client/src/utils.rs b/crates/turtle/src/atuin_client/utils.rs index 35d7db26..35d7db26 100644 --- a/crates/atuin-client/src/utils.rs +++ b/crates/turtle/src/atuin_client/utils.rs |
