From 9d2ced134b7e114ff482d5e31ea5fc3c5885899e Mon Sep 17 00:00:00 2001 From: Redmar Kerkhoff Date: Fri, 3 Feb 2023 14:06:39 +0100 Subject: [PATCH] fixes bug in ls where old index entries come back --- src/index.rs | 35 ++++++++++++++++++++++++++++++----- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/src/index.rs b/src/index.rs index 9efd0d8..5e2e25e 100644 --- a/src/index.rs +++ b/src/index.rs @@ -247,6 +247,7 @@ pub fn ls(cache: &Path) -> impl Iterator> { format!("Error getting bucket entries from {}", owned_path.display()) })? .into_iter() + .rev() .collect::>() .into_iter() .filter_map(|se| { @@ -364,6 +365,15 @@ mod tests { const MOCK_ENTRY: &str = "\n251d18a2b33264ea8655695fd23c88bd874cdea2c3dc9d8f9b7596717ad30fec\t{\"key\":\"hello\",\"integrity\":\"sha1-deadbeef\",\"time\":1234567,\"size\":0,\"metadata\":null}"; + fn ls_entries(dir: &Path) -> Vec { + let mut entries = ls(dir) + .map(|x| Ok(x?.key)) + .collect::>>() + .unwrap(); + entries.sort(); + entries + } + #[test] fn insert_basic() { let tmp = tempfile::tempdir().unwrap(); @@ -502,11 +512,26 @@ mod tests { let opts = WriteOpts::new().integrity(sri).time(time); insert(&dir, "world", opts).unwrap(); - let mut entries = ls(&dir) - .map(|x| Ok(x?.key)) - .collect::>>() - .unwrap(); - entries.sort(); + let entries = ls_entries(&dir); assert_eq!(entries, vec![String::from("hello"), String::from("world")]) } + + #[test] + fn ls_basic_with_delete() { + let tmp = tempfile::tempdir().unwrap(); + let dir = tmp.path().to_owned(); + let sri: Integrity = "sha1-deadbeef".parse().unwrap(); + let time = 1_234_567; + let opts = WriteOpts::new().integrity(sri.clone()).time(time); + insert(&dir, "hello", opts).unwrap(); + let opts = WriteOpts::new().integrity(sri).time(time); + insert(&dir, "world", opts).unwrap(); + + let entries = ls_entries(&dir); + assert_eq!(entries, vec![String::from("hello"), String::from("world")]); + + delete(&dir, "hello").unwrap(); + let entries = ls_entries(&dir); + assert_eq!(entries, vec![String::from("world")]) + } }