All pastes #27879 Raw Edit

Anonymous

public text v1 · immutable
#27879 ·published 2005-11-07 14:53 UTC
rendered paste body
#!/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()