summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJesper Jensen <jesper@jnsn.dev>2026-02-09 18:04:14 +0100
committerJesper Jensen <jesper@jnsn.dev>2026-02-09 18:04:14 +0100
commit22c7e9566c439e2134946611ccba81c7499ac62c (patch)
tree0455ca5573cc234f5f64715979896027b325947b /src
parent18dc559d0e45c43faa3ed9de8f343b16248aa9f4 (diff)
Take entire row to delete
This will be useful if we need to do some locking at some point. It's just nice that the same thing is passed back every time
Diffstat (limited to 'src')
-rw-r--r--src/db.rs15
-rw-r--r--src/updater.rs6
2 files changed, 11 insertions, 10 deletions
diff --git a/src/db.rs b/src/db.rs
index 263d88d..6a4d732 100644
--- a/src/db.rs
+++ b/src/db.rs
@@ -26,7 +26,7 @@ pub trait Db {
fn get_tags_sorted(&self, image_id: i64) -> Vec<Tag>;
fn insert_tags(&self, tags: &mut [Tag]);
- fn delete_tags(&self, tag_ids: &[i64]);
+ fn delete_tags(&self, tags: &[Tag]);
fn update_tags(&self, tags: &[Tag]);
}
@@ -204,10 +204,10 @@ impl Db for SqliteDb {
}
}
- fn delete_tags(&self, tag_ids: &[i64]) {
+ fn delete_tags(&self, tags: &[Tag]) {
let _timer = crate::metrics::get().db_query_duration.start_timer();
- for id in tag_ids {
- self.conn.execute("DELETE FROM tags WHERE id = ?1", (id,)).unwrap();
+ for tag in tags {
+ self.conn.execute("DELETE FROM tags WHERE id = ?1", (tag.id,)).unwrap();
}
}
@@ -310,8 +310,9 @@ impl Db for StubDb {
}
}
- fn delete_tags(&self, tag_ids: &[i64]) {
- self.tags.borrow_mut().retain(|t| !tag_ids.contains(&t.id));
+ fn delete_tags(&self, tags: &[Tag]) {
+ let ids: Vec<i64> = tags.iter().map(|t| t.id).collect();
+ self.tags.borrow_mut().retain(|t| !ids.contains(&t.id));
}
fn update_tags(&self, tags: &[Tag]) {
@@ -384,7 +385,7 @@ mod tests {
Tag { id: 0, image_id: images[0].id, tag: "2.0".into(), digest: None },
];
db.insert_tags(&mut tags);
- db.delete_tags(&[tags[0].id]);
+ db.delete_tags(&[tags[0].clone()]);
let result: Vec<String> = db.get_tags_sorted(images[0].id).into_iter().map(|t| t.tag).collect();
assert_eq!(result, vec!["2.0"]);
}
diff --git a/src/updater.rs b/src/updater.rs
index 866a771..689aa57 100644
--- a/src/updater.rs
+++ b/src/updater.rs
@@ -61,13 +61,13 @@ pub fn update_images(now: &DateTime<Utc>, db: &dyn Db, reg: &dyn Registries, fil
match reg.get_tags(&expired.registry, &expired.image) {
Some(mut fetched_tags) => {
fetched_tags.sort();
- let mut to_delete: Vec<i64> = vec![];
+ let mut to_delete: Vec<Tag> = vec![];
let mut to_insert: Vec<Tag> = vec![];
let mut existing = cached_tags.iter().peekable();
for t in &fetched_tags {
while existing.peek().is_some_and(|e| e.tag.as_str() < t.as_str()) {
let gone = existing.next().unwrap();
- to_delete.push(gone.id);
+ to_delete.push(gone.clone());
}
if existing.peek().is_some_and(|e| e.tag.as_str() == t.as_str()) {
existing.next();
@@ -76,7 +76,7 @@ pub fn update_images(now: &DateTime<Utc>, db: &dyn Db, reg: &dyn Registries, fil
}
}
for gone in existing {
- to_delete.push(gone.id);
+ to_delete.push(gone.clone());
}
db.delete_tags(&to_delete);
db.insert_tags(&mut to_insert);