Author: fw Date: 2011-04-24 15:09:25 +0000 (Sun, 24 Apr 2011) New Revision: 16579 Modified: bin/list-queue Log: bin/list-queue: slightly unify cache expiry and update Modified: bin/list-queue ==================================================================--- bin/list-queue 2011-04-24 15:02:36 UTC (rev 16578) +++ bin/list-queue 2011-04-24 15:09:25 UTC (rev 16579) @@ -110,25 +110,32 @@ 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. 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 @@ 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))