more work on the SQLite integration
git-svn-id: http://svn.sabayonlinux.org/projects/entropy/trunk@212 cd1c1023-2f26-0410-ae45-c471fc1f0318
This commit is contained in:
+122
-16
@@ -51,14 +51,35 @@ def database(options):
|
||||
# fill the database
|
||||
dbconn = etpDatabase()
|
||||
dbconn.initializeDatabase()
|
||||
|
||||
print_info(green(" * ")+red("Reinitializing Entropy database using Portage database..."))
|
||||
# now run quickpkg for all the packages and then extract data
|
||||
installedAtoms, atomsnumber = getInstalledPackages()
|
||||
currCounter = 0
|
||||
import reagentTools
|
||||
for atom in installedAtoms:
|
||||
currCounter += 1
|
||||
print_info(green(" (")+ blue(str(currCounter))+"/"+red(str(atomsnumber))+green(") ")+red("Analyzing ")+bold(atom)+red(" ..."))
|
||||
quickpkg(atom,etpConst['packagestmpdir'])
|
||||
# file is etpConst['packagestmpdir']+"/atomscan/"+pkgnamever.tbz2
|
||||
etpData = reagentTools.extractPkgData(etpConst['packagestmpdir']+"/"+atom.split("/")[1]+".tbz2")
|
||||
# fill the db entry
|
||||
dbconn.addPackage(etpData)
|
||||
os.system("rm -rf "+etpConst['packagestmpdir']+"/"+atom.split("/")[1]+"*")
|
||||
dbconn.commitChanges()
|
||||
dbconn.commitChanges()
|
||||
dbconn.closeDB()
|
||||
print_info(green(" * ")+red("Entropy database initialized."))
|
||||
print_info(green(" * ")+red("Entropy database has been reinitialized using Portage database entries"))
|
||||
|
||||
|
||||
elif (options[0] == "search"):
|
||||
mykeywords = options[1:]
|
||||
if (len(mykeywords) == 0):
|
||||
print_error(yellow(" * ")+red("Not enough parameters"))
|
||||
sys.exit(302)
|
||||
if (not os.path.isfile(etpConst['etpdatabasefile'])):
|
||||
print_error(yellow(" * ")+red("Entropy Datbase does not exist"))
|
||||
sys.exit(303)
|
||||
# search tool
|
||||
print_info(green(" * ")+red("Searching inside the Entropy database..."))
|
||||
dbconn = etpDatabase()
|
||||
@@ -91,33 +112,56 @@ def database(options):
|
||||
if (result[17]):
|
||||
print_info(red("\t Slot: ")+yellow(result[17]))
|
||||
#print_info(red("\t Blah: ")+result[18]) # I don't need to print mirrorlinks
|
||||
if (result[19]):
|
||||
deps = result[19].split()
|
||||
if (result[20]):
|
||||
deps = result[20].split()
|
||||
print_info(red("\t Dependencies"))
|
||||
for dep in deps:
|
||||
print_info(darkred("\t # Depends on: ")+dep)
|
||||
#print_info(red("\t Blah: ")+result[20]) --> it's a dup of [21]
|
||||
if (result[21]):
|
||||
rundeps = result[21].split()
|
||||
if (result[22]):
|
||||
rundeps = result[22].split()
|
||||
print_info(red("\t Built with runtime dependencies"))
|
||||
for rundep in rundeps:
|
||||
print_info(darkred("\t # Dependency: ")+rundep)
|
||||
if (result[22]):
|
||||
if (result[23]):
|
||||
print_info(red("\t Conflicts with"))
|
||||
conflicts = result[22].split()
|
||||
conflicts = result[23].split()
|
||||
for conflict in conflicts:
|
||||
print_info(darkred("\t # Conflict: ")+conflict)
|
||||
print_info(red("\t Entry API: ")+green(result[23]))
|
||||
print_info(red("\t Entry revision: ")+str(result[24]))
|
||||
print_info(red("\t Entry API: ")+green(result[24]))
|
||||
print_info(red("\t Entry revision: ")+str(result[25]))
|
||||
#print result
|
||||
print
|
||||
dbconn.closeDB()
|
||||
|
||||
elif (options[0] == "dump-package-info"):
|
||||
mypackages = options[1:]
|
||||
if (len(mypackages) == 0):
|
||||
print_error(yellow(" * ")+red("Not enough parameters"))
|
||||
sys.exit(302)
|
||||
for package in mypackages:
|
||||
print_info(green(" * ")+red("Searching package ")+bold(package)+red(" ..."))
|
||||
if isjustname(package) or (package.find("/") == -1):
|
||||
print_warning(yellow(" * ")+red("Package ")+bold(package)+red(" is not a complete atom."))
|
||||
continue
|
||||
# open db connection
|
||||
dbconn = etpDatabase()
|
||||
if (not dbconn.isPackageAvailable(package)):
|
||||
# package does not exist in the Entropy database
|
||||
print_warning(yellow(" * ")+red("Package ")+bold(package)+red(" does not exist in Entropy database."))
|
||||
dbconn.closeDB()
|
||||
continue
|
||||
etpData = dbconn.retrievePackageInfo(package)
|
||||
print etpData
|
||||
dbconn.closeDB()
|
||||
|
||||
|
||||
############
|
||||
# Functions
|
||||
#####################################################################################
|
||||
|
||||
|
||||
|
||||
class etpDatabase:
|
||||
|
||||
def __init__(self):
|
||||
@@ -130,8 +174,20 @@ class etpDatabase:
|
||||
self.connection.close()
|
||||
|
||||
def commitChanges(self):
|
||||
self.taintDatabase()
|
||||
self.connection.commit()
|
||||
|
||||
def taintDatabase(self):
|
||||
# taint the database status
|
||||
f = open(etpConst['etpdatabasedir']+"/"+etpConst['etpdatabasetaintfile'],"w")
|
||||
f.write(etpConst['currentarch']+" database tainted\n")
|
||||
f.flush()
|
||||
f.close()
|
||||
|
||||
def untaintDatabase(self):
|
||||
# untaint the database status
|
||||
os.system("rm -f "+etpConst['etpdatabasedir']+"/"+etpConst['etpdatabasetaintfile'])
|
||||
|
||||
def discardChanges(self):
|
||||
self.connection.rollback()
|
||||
|
||||
@@ -143,16 +199,16 @@ class etpDatabase:
|
||||
# this function manages the submitted package
|
||||
# if it does not exist, it fires up addPackage
|
||||
# otherwise it fires up updatePackage
|
||||
def handlePackage(self,etpData):
|
||||
def handlePackage(self,etpData,forceBump = False):
|
||||
if (not isPackageAvailable(etpData['category']+"/"+etpData['name']+"-"+etpData['version'])):
|
||||
self.addPackage(etpData)
|
||||
else:
|
||||
self.updatePackage(etpData)
|
||||
self.updatePackage(etpData,forceBump)
|
||||
|
||||
def addPackage(self,etpData, revision = 0):
|
||||
self.cursor.execute(
|
||||
'INSERT into etpData VALUES '
|
||||
'(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)'
|
||||
'(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)'
|
||||
, ( etpData['category']+"/"+etpData['name']+"-"+etpData['version'],
|
||||
etpData['name'],
|
||||
etpData['version'],
|
||||
@@ -171,6 +227,7 @@ class etpDatabase:
|
||||
etpData['digest'],
|
||||
etpData['sources'],
|
||||
etpData['slot'],
|
||||
etpData['content'],
|
||||
etpData['mirrorlinks'],
|
||||
etpData['dependencies'],
|
||||
etpData['rundependencies'],
|
||||
@@ -181,16 +238,19 @@ class etpDatabase:
|
||||
)
|
||||
)
|
||||
self.commitChanges()
|
||||
return True,revision
|
||||
|
||||
# Update already available atom in db
|
||||
# returns True,revision if the package has been updated
|
||||
# returns False,revision if not
|
||||
def updatePackage(self,etpData):
|
||||
def updatePackage(self,etpData,forceBump = False):
|
||||
# check if the data correspond
|
||||
# if not, update, else drop
|
||||
curRevision = dbconn.retrievePackageVar(etpData['category']+"/"+etpData['name']+"-"+etpData['version'],"revision")
|
||||
oldPkgInfo = retrievePackageInfo(etpData['category']+"/"+etpData['name']+"-"+etpData['version'])
|
||||
if etpData != oldPkgInfo:
|
||||
curRevision = self.retrievePackageVar(etpData['category']+"/"+etpData['name']+"-"+etpData['version'],"revision")
|
||||
# FIXME: I don't know if this works
|
||||
oldPkgInfo = self.retrievePackageInfo(etpData['category']+"/"+etpData['name']+"-"+etpData['version'])
|
||||
rc = self.comparePackagesData(etpData,oldPkgInfo)
|
||||
if (not rc) or (forceBump):
|
||||
# update !
|
||||
curRevision += 1
|
||||
# remove the table
|
||||
@@ -209,6 +269,52 @@ class etpDatabase:
|
||||
self.commitChanges()
|
||||
return result
|
||||
|
||||
# WARNING: this function must be kept in sync with Entropy database schema
|
||||
# returns True if equal
|
||||
# returns False if not
|
||||
def comparePackagesData(self,etpData,dbPkgInfo):
|
||||
|
||||
# reset before using the tmpEtpData dictionary
|
||||
for i in tmpEtpData:
|
||||
tmpEtpData[i] = ""
|
||||
|
||||
# fill content
|
||||
for i in tmpEtpData:
|
||||
tmpEtpData[i] = self.retrievePackageVar(dbPkgInfo,i)
|
||||
|
||||
"""
|
||||
oldEtpData['name'] = self.retrievePackageVar(dbPkgInfo,"name")
|
||||
oldEtpData['version'] = self.retrievePackageVar(dbPkgInfo,"version")
|
||||
oldEtpData['description'] = self.retrievePackageVar(dbPkgInfo,"description")
|
||||
oldEtpData['category'] = self.retrievePackageVar(dbPkgInfo,"category")
|
||||
oldEtpData['chost'] = self.retrievePackageVar(dbPkgInfo,"chost")
|
||||
oldEtpData['cflags'] = self.retrievePackageVar(dbPkgInfo,"cflags")
|
||||
oldEtpData['cxxflags'] = self.retrievePackageVar(dbPkgInfo,"cxxflags")
|
||||
oldEtpData['homepage'] = self.retrievePackageVar(dbPkgInfo,"homepage")
|
||||
oldEtpData['useflags'] = self.retrievePackageVar(dbPkgInfo,"useflags")
|
||||
oldEtpData['license'] = self.retrievePackageVar(dbPkgInfo,"license")
|
||||
oldEtpData['keywords'] = self.retrievePackageVar(dbPkgInfo,"keywords")
|
||||
oldEtpData['binkeywords'] = self.retrievePackageVar(dbPkgInfo,"binkeywords")
|
||||
oldEtpData['packagepath'] = self.retrievePackageVar(dbPkgInfo,"packagepath")
|
||||
oldEtpData['download'] = self.retrievePackageVar(dbPkgInfo,"download")
|
||||
oldEtpData['digest'] = self.retrievePackageVar(dbPkgInfo,"digest")
|
||||
oldEtpData['sources'] = self.retrievePackageVar(dbPkgInfo,"sources")
|
||||
oldEtpData['slot'] = self.retrievePackageVar(dbPkgInfo,"slot")
|
||||
oldEtpData['content'] = self.retrievePackageVar(dbPkgInfo,"content")
|
||||
oldEtpData['mirrorlinks'] = self.retrievePackageVar(dbPkgInfo,"mirrorlinks")
|
||||
oldEtpData['dependencies'] = self.retrievePackageVar(dbPkgInfo,"dependencies")
|
||||
oldEtpData['rundependencies'] = self.retrievePackageVar(dbPkgInfo,"rundependencies")
|
||||
oldEtpData['rundependenciesXT'] = self.retrievePackageVar(dbPkgInfo,"rundependenciesXT")
|
||||
oldEtpData['conflicts'] = self.retrievePackageVar(dbPkgInfo,"conflicts")
|
||||
oldEtpData['etpapi'] = self.retrievePackageVar(dbPkgInfo,"etpapi")
|
||||
"""
|
||||
|
||||
for i in etpData:
|
||||
if etpData[i] != tmpEtpData[i]:
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
# You must provide the full atom to this function
|
||||
def retrievePackageInfo(self,pkgkey):
|
||||
pkgkey = removePackageOperators(pkgkey)
|
||||
|
||||
Reference in New Issue
Block a user