summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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);