From d8a5b9c736033cdb429a0c949319647f2cf7db07 Mon Sep 17 00:00:00 2001 From: Florian Weimer Date: Sun, 24 Apr 2011 15:09:25 +0000 Subject: bin/list-queue: slightly unify cache expiry and update git-svn-id: svn+ssh://svn.debian.org/svn/secure-testing@16579 e39458fd-73e7-0310-bf30-c45bca0a0e42 --- bin/list-queue | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) (limited to 'bin/list-queue') diff --git a/bin/list-queue b/bin/list-queue index e13c4e0bf3..a0343c8224 100755 --- a/bin/list-queue +++ b/bin/list-queue @@ -110,9 +110,21 @@ def readchanges(db): result[name] = (size, mtime, dist, set(debs.split())) return result -def computeupdate(ondisk, indb): - return [(path, stat) for (path, stat) in ondisk.items() - if path not in indb or stat <> tuple(indb[path][0:2])] +def deletepaths(db, table, paths): + db.executemany("DELETE FROM " + table + " WHERE path = ?", paths) + +def prepareupdate(db, ondisk, indb, table): + need_update = [(path, stat) for (path, stat) in ondisk.items() + if path not in indb or stat <> tuple(indb[path][0:2])] + db.executemany("DELETE FROM " + table + " WHERE path = ?", + ((path,) for path, _ in need_update)) + return need_update + +def expire(db, ondisk, indb, table): + need_delete = [(path,) for path in indb if path not in ondisk] + db.executemany("DELETE FROM " + table + " WHERE path = ?", need_delete) + for (path,) in need_delete: + del indb[path] def updatepackages(db, ondisk): """Updates the package table from the file system. @@ -120,15 +132,10 @@ def updatepackages(db, ondisk): Returns the current list of package objects, in arbitary order. """ indb = readpackages(db) - - # Expire old entries - need_delete = ((path,) for path in indb if path not in ondisk) - db.executemany("DELETE FROM package WHERE path = ?", need_delete) + expire(db, ondisk, indb, "package") # Update the cache in indb and the database - need_update = computeupdate(ondisk, indb) - db.executemany("DELETE FROM package WHERE path = ?", - ((path,) for path, _ in need_update)) + need_update = prepareupdate(db, ondisk, indb, "package") def do_update(): for (path, stat) in need_update: deb = DebFile(path) @@ -149,15 +156,10 @@ def updatechanges(db, ondisk): Change objects are pairs (DISTRIBUTION, SET-OF-DEBS) """ indb = readchanges(db) + expire(db, ondisk, indb, "changes") - # Expire old entries - need_delete = ((path,) for path in indb if path not in ondisk) - db.executemany("DELETE FROM changes WHERE path = ?", need_delete) - # Update the cache in indb and the database - need_update = computeupdate(ondisk, indb) - db.executemany("DELETE FROM changes WHERE path = ?", - ((path,) for path, _ in need_update)) + need_update = prepareupdate(db, ondisk, indb, "changes") def do_update(): for (path, stat) in need_update: changes = Changes(file(path)) -- cgit v1.2.3