summaryrefslogtreecommitdiff
path: root/readyaml.py
diff options
context:
space:
mode:
authorHelmut Grohne <helmut@subdivi.de>2013-07-17 16:27:08 +0200
committerHelmut Grohne <helmut@subdivi.de>2013-07-17 16:27:08 +0200
commited3e611cfc54b8c916e919701070bfd5c6770610 (patch)
treefe06694d5a2212c87a0d149eccb0f4cbb889a5cd /readyaml.py
parenta03daac99a237babcd874748d19fc0f809a1dc60 (diff)
parent6205c89b1e289f04dcea1e6e32fafa6357abf063 (diff)
downloaddebian-dedup-ed3e611cfc54b8c916e919701070bfd5c6770610.tar.gz
Merge branch master into sqlalchemy
This basically pulls the packageid branch into sqlalchemy. The merge was complex, because many sql statements diverged. The merge brings us one step closer to supporting postgres, because an "INSERT OR REPLACE" was removed from readyaml.py in the packageid branch. Conflicts: update_sharing.py webapp.py
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)