2 """This tool reads a yaml file as generated by importpkg.py on stdin and
3 updates the database with the contents."""
9 from debian.debian_support import version_compare
12 def readyaml(db, stream):
14 cur.execute("PRAGMA foreign_keys = ON;")
15 gen = yaml.load_all(stream, yaml.CSafeLoader)
17 package = metadata["package"]
18 cur.execute("SELECT id, version FROM package WHERE name = ?;",
23 if version_compare(version, metadata["version"]) > 0:
29 cur.execute("SELECT name, id FROM function;")
30 funcmapping = dict(cur.fetchall())
32 cur.execute("DELETE FROM content WHERE pid = ?;", (pid,))
33 cur.execute("DELETE FROM dependency WHERE pid = ?;", (pid,))
34 cur.execute("UPDATE package SET version = ?, architecture = ?, source = ? WHERE id = ?;",
35 (metadata["version"], metadata["architecture"], metadata["source"], pid))
37 cur.execute("INSERT INTO package (name, version, architecture, source) VALUES (?, ?, ?, ?);",
38 (package, metadata["version"], metadata["architecture"],
41 cur.executemany("INSERT INTO dependency (pid, required) VALUES (?, ?);",
42 ((pid, dep) for dep in metadata["depends"]))
48 cur.execute("INSERT INTO content (pid, filename, size) VALUES (?, ?, ?);",
49 (pid, entry["name"], entry["size"]))
51 cur.executemany("INSERT INTO hash (cid, fid, hash) VALUES (?, ?, ?);",
52 ((cid, funcmapping[func], hexhash)
53 for func, hexhash in entry["hashes"].items()))
54 raise ValueError("missing commit block")
57 parser = argparse.ArgumentParser()
58 parser.add_argument("-d", "--database", action="store",
59 default="test.sqlite3",
60 help="path to the sqlite3 database file")
61 args = parser.parse_args()
62 db = sqlite3.connect(args.database)
63 readyaml(db, sys.stdin)
65 if __name__ == "__main__":