#!/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()