From bbdf38018b47328b5faa2cef635c37095045be72 Mon Sep 17 00:00:00 2001 From: Benedikt Peetz Date: Fri, 12 Jun 2026 01:54:21 +0200 Subject: feat(server): Really make users stateless (with tests) This commit also remove another load of unneeded features. --- crates/turtle/src/command/client/search/engines.rs | 11 +++++------ crates/turtle/src/command/client/search/engines/daemon.rs | 11 +++++------ crates/turtle/src/command/client/search/engines/db.rs | 11 ++++------- crates/turtle/src/command/client/search/engines/skim.rs | 15 ++++----------- crates/turtle/src/command/client/search/interactive.rs | 11 +++++++---- 5 files changed, 25 insertions(+), 34 deletions(-) (limited to 'crates/turtle/src/command/client/search') diff --git a/crates/turtle/src/command/client/search/engines.rs b/crates/turtle/src/command/client/search/engines.rs index d6335a38..a84c4798 100644 --- a/crates/turtle/src/command/client/search/engines.rs +++ b/crates/turtle/src/command/client/search/engines.rs @@ -1,9 +1,9 @@ -use async_trait::async_trait; use crate::atuin_client::{ - database::{Context, Database, OptFilters}, - history::{AUTHOR_FILTER_ALL_USER, History, HistoryId}, + database::{ClientSqlite, Context, OptFilters}, + history::{History, HistoryId}, settings::{FilterMode, SearchMode, Settings}, }; +use async_trait::async_trait; use eyre::Result; use super::cursor::Cursor; @@ -67,10 +67,10 @@ pub(crate) trait SearchEngine: Send + Sync + 'static { async fn full_query( &mut self, state: &SearchState, - db: &mut dyn Database, + db: &mut ClientSqlite, ) -> Result>; - async fn query(&mut self, state: &SearchState, db: &mut dyn Database) -> Result> { + async fn query(&mut self, state: &SearchState, db: &mut ClientSqlite) -> Result> { if state.input.as_str().is_empty() { Ok(db .search( @@ -80,7 +80,6 @@ pub(crate) trait SearchEngine: Send + Sync + 'static { "", OptFilters { limit: Some(200), - authors: vec![AUTHOR_FILTER_ALL_USER.to_string()], ..Default::default() }, ) diff --git a/crates/turtle/src/command/client/search/engines/daemon.rs b/crates/turtle/src/command/client/search/engines/daemon.rs index df5ab9f8..55b3c6f2 100644 --- a/crates/turtle/src/command/client/search/engines/daemon.rs +++ b/crates/turtle/src/command/client/search/engines/daemon.rs @@ -1,6 +1,6 @@ use crate::atuin_client::{ - database::{Database, OptFilters}, - history::{AUTHOR_FILTER_ALL_USER, History}, + database::{ClientSqlite, OptFilters}, + history::History, settings::{SearchMode, Settings}, }; use crate::atuin_daemon::client::{DaemonClientErrorKind, SearchClient, classify_error}; @@ -75,7 +75,7 @@ impl Search { async fn fallback_to_db_search( &self, state: &SearchState, - db: &dyn Database, + db: &ClientSqlite, ) -> Result> { let results = db .search( @@ -85,7 +85,6 @@ impl Search { state.input.as_str(), OptFilters { limit: Some(200), - authors: vec![AUTHOR_FILTER_ALL_USER.to_string()], ..Default::default() }, ) @@ -95,7 +94,7 @@ impl Search { } #[instrument(skip_all, level = Level::TRACE, name = "hydrate_from_db", fields(count = ids.len()))] - async fn hydrate_from_db(&self, db: &dyn Database, ids: &[String]) -> Result> { + async fn hydrate_from_db(&self, db: &ClientSqlite, ids: &[String]) -> Result> { let placeholders: Vec = ids.iter().map(|id| format!("'{id}'")).collect(); let sql_query = format!( "SELECT * FROM history WHERE id IN ({}) ORDER BY timestamp DESC", @@ -111,7 +110,7 @@ impl SearchEngine for Search { async fn full_query( &mut self, state: &SearchState, - db: &mut dyn Database, + db: &mut ClientSqlite, ) -> Result> { let query = state.input.as_str().to_string(); diff --git a/crates/turtle/src/command/client/search/engines/db.rs b/crates/turtle/src/command/client/search/engines/db.rs index 86917a02..e6657b17 100644 --- a/crates/turtle/src/command/client/search/engines/db.rs +++ b/crates/turtle/src/command/client/search/engines/db.rs @@ -1,12 +1,10 @@ use super::{SearchEngine, SearchState}; -use async_trait::async_trait; use crate::atuin_client::{ - database::Database, - database::OptFilters, - database::{QueryToken, QueryTokenizer}, - history::{AUTHOR_FILTER_ALL_USER, History}, + database::{ClientSqlite, OptFilters, QueryToken, QueryTokenizer}, + history::History, settings::SearchMode, }; +use async_trait::async_trait; use eyre::Result; use norm::Metric; use norm::fzf::{FzfParser, FzfV2}; @@ -21,7 +19,7 @@ impl SearchEngine for Search { async fn full_query( &mut self, state: &SearchState, - db: &mut dyn Database, + db: &mut ClientSqlite, ) -> Result> { let results = db .search( @@ -31,7 +29,6 @@ impl SearchEngine for Search { state.input.as_str(), OptFilters { limit: Some(200), - authors: vec![AUTHOR_FILTER_ALL_USER.to_string()], ..Default::default() }, ) diff --git a/crates/turtle/src/command/client/search/engines/skim.rs b/crates/turtle/src/command/client/search/engines/skim.rs index fe2bdea3..a6a77573 100644 --- a/crates/turtle/src/command/client/search/engines/skim.rs +++ b/crates/turtle/src/command/client/search/engines/skim.rs @@ -1,18 +1,13 @@ use std::path::Path; +use crate::atuin_client::{database::ClientSqlite, history::History, settings::FilterMode}; use async_trait::async_trait; -use crate::atuin_client::{ - database::Database, - history::{History, is_known_agent}, - settings::FilterMode, -}; use eyre::Result; use fuzzy_matcher::{FuzzyMatcher, skim::SkimMatcherV2}; use itertools::Itertools; use time::OffsetDateTime; use tokio::task::yield_now; use tracing::{Level, instrument, warn}; -use uuid; use super::{SearchEngine, SearchState}; @@ -36,7 +31,7 @@ impl SearchEngine for Search { async fn full_query( &mut self, state: &SearchState, - db: &mut dyn Database, + db: &mut ClientSqlite, ) -> Result> { if self.all_history.is_empty() { self.all_history = load_all_history(db).await; @@ -56,7 +51,7 @@ impl SearchEngine for Search { } #[instrument(skip_all, level = Level::TRACE, name = "load_all_history")] -async fn load_all_history(db: &dyn Database) -> Vec<(History, i32)> { +async fn load_all_history(db: &ClientSqlite) -> Vec<(History, i32)> { db.all_with_count().await.unwrap() } @@ -76,9 +71,7 @@ async fn fuzzy_search( if i % 256 == 0 { yield_now().await; } - if is_known_agent(&history.author) { - continue; - } + let context = &state.context; let git_root = context .git_root diff --git a/crates/turtle/src/command/client/search/interactive.rs b/crates/turtle/src/command/client/search/interactive.rs index 380fc33b..1d067e50 100644 --- a/crates/turtle/src/command/client/search/interactive.rs +++ b/crates/turtle/src/command/client/search/interactive.rs @@ -6,7 +6,10 @@ use std::{ #[cfg(unix)] use std::io::Read as _; -use crate::atuin_common::{shell::Shell, utils::Escapable as _}; +use crate::{ + atuin_client::database::ClientSqlite, + atuin_common::{shell::Shell, utils::Escapable as _}, +}; use eyre::Result; use time::OffsetDateTime; use unicode_width::{UnicodeWidthChar, UnicodeWidthStr}; @@ -17,7 +20,7 @@ use super::{ history_list::{HistoryList, ListState}, }; use crate::atuin_client::{ - database::{Context, Database, current_context}, + database::{Context, current_context}, history::{History, HistoryId, HistoryStats, store::HistoryStore}, settings::{ CursorStyle, ExitMode, FilterMode, KeymapMode, PreviewStrategy, SearchMode, Settings, @@ -149,7 +152,7 @@ struct StyleState { impl State { async fn query_results( &mut self, - db: &mut dyn Database, + db: &mut ClientSqlite, smart_sort: bool, ) -> Result> { let results = self.engine.query(&self.search, db).await?; @@ -1550,7 +1553,7 @@ fn compute_popup_placement( pub(crate) async fn history( query: &[String], settings: &Settings, - mut db: impl Database, + mut db: ClientSqlite, history_store: &HistoryStore, theme: &Theme, ) -> Result { -- cgit v1.3.1