#!/usr/bin/python
import sys
from conary import *
import sqlite3
db = sqlite3.connect(sys.argv[1])
cu = db.cursor()
cu.execute('select distinct version, isPresent from versions, instances where
versions.versionid = instances.versionid and version like
"%contrib.rpath.org%"')
toFix = [ x for x in cu ]
expectBranches = False
for version, troveIsPresent in toFix:
newVersion = version.replace('contrib.rpath.org', 'contrib.rpath.com')
cu.execute("select count(*) from versions where version=?", newVersion)
newVersionExists = cu.next()[0]
cu.execute("select versionid from versions where version=?",
version)
versionId = cu.next()[0]
print version, troveIsPresent, newVersionExists
assert(not troveIsPresent or not newVersionExists)
expectBranches = expectBranches or troveIsPresent
if not newVersionExists:
cu.execute("update versions set version=? where versionid=?",
newVersion, versionId)
else:
cu.execute("select versionId from versions where version=?",
newVersion)
correctVersionId = cu.next()[0]
cu.execute("delete from versions where versionid=?", versionId)
assert(not troveIsPresent)
cu.execute("select instanceId from instances where versionid=?",
correctVersionId)
instances = [ x[0] for x in cu ]
assert(len(instances) == 1)
correctInstanceId = instances[0]
cu.execute("select instanceId from instances where versionid=?",
versionId)
instances = [ x[0] for x in cu ]
assert(len(instances) == 1)
brokenInstanceId = instances[0]
cu.execute("select count(*) from trovefiles where instanceid=?",
brokenInstanceId)
assert(cu.next()[0] == 0)
cu.execute("select count(*) from trovefiles where instanceid=?",
correctInstanceId)
assert(cu.next()[0] == 0)
cu.execute("update trovetroves set includedid=? where includedid=?",
correctInstanceId, brokenInstanceId)
cu.execute("delete from instances where instanceid=?",
brokenInstanceId)
cu.execute("select nodeId from nodes where versionid=?", versionId)
nodes = [ x[0] for x in cu ]
assert(len(nodes) == 1)
nodeId = nodes[0]
cu.execute("delete from nodes where nodeid=?", nodeId)
cu.execute("select count(*) from trovefiles where versionId=?",
versionId)
assert(cu.next()[0] == 0)
print "---", expectBranches
branches = [ x for x in cu.execute("select branchId, branch from branches where
branch like '%contrib.rpath.org%'";) ]
if expectBranches:
assert(branches)
for branchId, branch in branches:
correctBranch = branch.replace('contrib.rpath.org', 'contrib.rpath.com')
cu.execute("select branchId from branches where branch=?", correctBranch)
try:
correctBranchId = cu.next()[0]
except StopIteration:
correctBranchId = None
if correctBranchId is None:
print "renaming", correctBranch
cu.execute("update branches set branch=? where branchid=?",
correctBranch, branchId)
correctBranchId = branchId
else:
print "deleting", branch
cu.execute("delete from branches where branchid=?", branchId)
cu.execute("update nodes set branchid=? where branchid=?",
correctBranchId, branchId)
cu.execute("select itemId, labelId from labelmap where branchId=?",
branchId)
for (itemId, labelId) in [ x for x in cu ]:
cu.execute("select count(*) from labelmap where "
"itemId=? and labelId=? and branchId=?",
itemId, labelId, correctBranchId)
if not cu.next()[0]:
cu.execute("insert into labelmap (itemid, labelid, branchid) "
"values (?, ?, ?)",
itemId, labelId, correctBranchId)
cu.execute("delete from labelmap where branchid=?", branchId)
cu.execute("delete from latest where branchid=?", correctBranchId)
cu.execute("delete from latest where branchid=?", branchId)
cu.execute("""
select instances.itemid, instances.flavorid,
max(nodes.finaltimestamp)
from
nodes, instances
where
nodes.itemid=instances.itemid and
nodes.versionid=instances.versionid and
nodes.branchid = ? and
isPresent = 1
group by,
instances.itemid, instances.flavorid
""", correctBranchId)
for (itemId, flavorId, ts) in [ x for x in cu ]:
cu.execute("select versionId from nodes where "
"itemid=? and finalTimestamp=?",
itemId, ts)
versionId = cu.next()[0]
cu.execute("insert into latest (versionId, branchId, flavorId, itemId)"
" values (?, ?, ?, ?)" ,
versionId, correctBranchId, flavorId, itemId)
db.commit()