aboutsummaryrefslogtreecommitdiffstats
path: root/atuin-client
diff options
context:
space:
mode:
authorJ. Emiliano Deustua <edeustua@gmail.com>2023-06-13 02:43:06 -0500
committerGitHub <noreply@github.com>2023-06-13 07:43:06 +0000
commit79f7b1d81c182bfbcc8298963886390658dda71b (patch)
tree8638d9aae39bcb93e8f3120b438f3b40d6e199c4 /atuin-client
parentBump uuid from 1.2.1 to 1.3.4 (#1046) (diff)
downloadatuin-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.toml1
-rw-r--r--atuin-client/src/database.rs9
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