diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/db.rs | 15 | ||||
| -rw-r--r-- | src/updater.rs | 6 |
2 files changed, 11 insertions, 10 deletions
@@ -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); |
