From 600ebc33ab46d8f461c78b5a4a8e8bc81714d211 Mon Sep 17 00:00:00 2001 From: Ellie Huxtable Date: Mon, 22 Jan 2024 16:48:21 +0000 Subject: feat: make store init idempotent (#1609) --- atuin-client/src/history/store.rs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'atuin-client/src') diff --git a/atuin-client/src/history/store.rs b/atuin-client/src/history/store.rs index ab88182a..73166de1 100644 --- a/atuin-client/src/history/store.rs +++ b/atuin-client/src/history/store.rs @@ -1,3 +1,5 @@ +use std::collections::HashSet; + use eyre::{bail, eyre, Result}; use rmp::decode::Bytes; @@ -230,6 +232,20 @@ impl HistoryStore { Ok(()) } + + /// Get a list of history IDs that exist in the store + /// Note: This currently involves loading all history into memory. This is not going to be a + /// large amount in absolute terms, but do not all it in a hot loop. + pub async fn history_ids(&self) -> Result> { + let history = self.history().await?; + + let ret = HashSet::from_iter(history.iter().map(|h| match h { + HistoryRecord::Create(h) => h.id.clone(), + HistoryRecord::Delete(id) => id.clone(), + })); + + Ok(ret) + } } #[cfg(test)] -- cgit v1.3.1