diff options
| author | J. Emiliano Deustua <edeustua@gmail.com> | 2023-06-13 02:43:06 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-06-13 07:43:06 +0000 |
| commit | 79f7b1d81c182bfbcc8298963886390658dda71b (patch) | |
| tree | 8638d9aae39bcb93e8f3120b438f3b40d6e199c4 /atuin-client | |
| parent | Bump uuid from 1.2.1 to 1.3.4 (#1046) (diff) | |
| download | atuin-79f7b1d81c182bfbcc8298963886390658dda71b.zip | |
Fix `--delete-it-all` and `--delete` commands (#913)
* Add `delete_at` is null condition during search
Since entries are searched everytime a delete process ends, the
--delete-it-all command will enter an infinite loop if searching the
whole history.
* Remove command blanking
Command blanking may violate the `unique(timestamp, cwd, command)`
condition.
* Overwrite command with random string when deleting
* Add rand dependency to client crate
---------
Co-authored-by: Ellie Huxtable <ellie@elliehuxtable.com>
Diffstat (limited to 'atuin-client')
| -rw-r--r-- | atuin-client/Cargo.toml | 1 | ||||
| -rw-r--r-- | atuin-client/src/database.rs | 9 |
2 files changed, 9 insertions, 1 deletions
diff --git a/atuin-client/Cargo.toml b/atuin-client/Cargo.toml index 770d7741..42e3cf6b 100644 --- a/atuin-client/Cargo.toml +++ b/atuin-client/Cargo.toml @@ -41,6 +41,7 @@ serde_json = { workspace = true } parse_duration = "2.1.1" async-trait = { workspace = true } itertools = { workspace = true } +rand = { workspace = true } shellexpand = "2" sqlx = { workspace = true, features = ["sqlite"] } minspan = "0.1.1" diff --git a/atuin-client/src/database.rs b/atuin-client/src/database.rs index f7c063ce..22bd5886 100644 --- a/atuin-client/src/database.rs +++ b/atuin-client/src/database.rs @@ -6,6 +6,7 @@ use chrono::{prelude::*, Utc}; use fs_err as fs; use itertools::Itertools; use lazy_static::lazy_static; +use rand::{distributions::Alphanumeric, Rng}; use regex::Regex; use sql_builder::{esc, quote, SqlBuilder, SqlName}; use sqlx::{ @@ -460,6 +461,8 @@ impl Database for Sqlite { .map(|after| sql.and_where_gt("timestamp", quote(after.timestamp_nanos()))) }); + sql.and_where_is_null("deleted_at"); + let query = sql.sql().expect("bug in search query. please report"); let res = sqlx::query(&query) @@ -519,7 +522,11 @@ impl Database for Sqlite { // but the time that the system marks it as deleted async fn delete(&self, mut h: History) -> Result<()> { let now = chrono::Utc::now(); - h.command = String::from(""); // blank it + h.command = rand::thread_rng() + .sample_iter(&Alphanumeric) + .take(32) + .map(char::from) + .collect(); // overwrite with random string h.deleted_at = Some(now); // delete it self.update(&h).await?; // save it |
