summaryrefslogtreecommitdiff
path: root/readyaml.py
diff options
context:
space:
mode:
Diffstat (limited to 'readyaml.py')
-rwxr-xr-xreadyaml.py35
1 files changed, 21 insertions, 14 deletions
diff --git a/readyaml.py b/readyaml.py
index e2f3bb3..bb8ac54 100755
--- a/readyaml.py
+++ b/readyaml.py
@@ -14,29 +14,36 @@ def readyaml(db, stream):
gen = yaml.safe_load_all(stream)
metadata = next(gen)
package = metadata["package"]
- cur.execute("SELECT version FROM package WHERE package = ?;",
+ cur.execute("SELECT id, version FROM package WHERE name = ?;",
(package,))
row = cur.fetchone()
- if row and version_compare(row[0], metadata["version"]) > 0:
- return
+ if row:
+ pid, version = row
+ if version_compare(version, metadata["version"]) > 0:
+ return
+ else:
+ pid = None
cur.execute("BEGIN;")
- cur.execute("DELETE FROM content WHERE package = ?;",
- (package,))
- cur.execute("INSERT OR REPLACE INTO package (package, version, architecture, source) VALUES (?, ?, ?, ?);",
- (package, metadata["version"], metadata["architecture"],
- metadata["source"]))
- cur.execute("DELETE FROM dependency WHERE package = ?;",
- (package,))
- cur.executemany("INSERT INTO dependency (package, required) VALUES (?, ?);",
- ((package, dep) for dep in metadata["depends"]))
+ if pid is not None:
+ cur.execute("DELETE FROM content WHERE pid = ?;", (pid,))
+ cur.execute("DELETE FROM dependency WHERE pid = ?;", (pid,))
+ cur.execute("UPDATE package SET version = ?, architecture = ?, source = ? WHERE id = ?;",
+ (metadata["version"], metadata["architecture"], metadata["source"], pid))
+ else:
+ cur.execute("INSERT INTO package (name, version, architecture, source) VALUES (?, ?, ?, ?);",
+ (package, metadata["version"], metadata["architecture"],
+ metadata["source"]))
+ pid = cur.lastrowid
+ cur.executemany("INSERT INTO dependency (pid, required) VALUES (?, ?);",
+ ((pid, dep) for dep in metadata["depends"]))
for entry in gen:
if entry == "commit":
db.commit()
return
- cur.execute("INSERT INTO content (package, filename, size) VALUES (?, ?, ?);",
- (package, entry["name"], entry["size"]))
+ cur.execute("INSERT INTO content (pid, filename, size) VALUES (?, ?, ?);",
+ (pid, entry["name"], entry["size"]))
cid = cur.lastrowid
cur.executemany("INSERT INTO hash (cid, function, hash) VALUES (?, ?, ?);",
((cid, func, hexhash)