[yum-cvs] yum/yum sqlitecache.py,1.1,1.2 sqlitesack.py,1.1,1.2
Gijs Hollestelle
gijs at login.linux.duke.edu
Sat Feb 26 13:15:59 UTC 2005
Update of /home/groups/yum/cvs/yum/yum
In directory login:/tmp/cvs-serv25660/yum
Modified Files:
sqlitecache.py sqlitesack.py
Log Message:
Implemented exclude support for sqlite.
Some minor fixes to the sqlite files inspired by pychecker.
Index: sqlitecache.py
===================================================================
RCS file: /home/groups/yum/cvs/yum/yum/sqlitecache.py,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- sqlitecache.py 25 Feb 2005 19:30:23 -0000 1.1
+++ sqlitecache.py 26 Feb 2005 13:15:56 -0000 1.2
@@ -9,7 +9,6 @@
# slower) use cpickle.dumps to store an array of filenames in a string
import os
-import sys
import mdcache
import sqlite
import time
@@ -258,7 +257,6 @@
def addFilelists(self, pkgId, package,cur):
"""Add a package to the filelists cache"""
- sep = '|'
pkginfo = {'pkgId': pkgId}
pkgKey = self.insertHash('packages',pkginfo, cur)
dirs = {}
Index: sqlitesack.py
===================================================================
RCS file: /home/groups/yum/cvs/yum/yum/sqlitesack.py,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- sqlitesack.py 25 Feb 2005 19:30:23 -0000 1.1
+++ sqlitesack.py 26 Feb 2005 13:15:56 -0000 1.2
@@ -57,6 +57,7 @@
self.primarydb = {}
self.filelistsdb = {}
self.otherdb = {}
+ self.excludes = {}
def buildIndexes(self):
# We don't need these
@@ -65,7 +66,16 @@
def _checkIndexes(self, failure='error'):
return
+ # Remove a package
+ # Because we don't want to remove a package from the database we just
+ # add it to the exclude list
+ def delPackage(self, obj):
+ repoid = obj.repoid
+ self.excludes[repoid][obj.pkgId] = 1
+
def addDict(self, repoid, datatype, dataobj, callback=None):
+ if (not self.excludes.has_key(repoid)):
+ self.excludes[repoid] = {}
if datatype == 'metadata':
if (self.primarydb.has_key(repoid)):
return
@@ -90,6 +100,7 @@
def getChangelog(self,pkgId):
result = []
for (rep,cache) in self.filelistsdb.items():
+ cur = cache.cursor()
cur.execute("select * from packages,changelog where packages.pkgId = %s and packages.pkgKey = changelog.pkgKey",pkgId)
for ob in cur.fetchall():
result.append({ 'author': ob['author'],
@@ -124,6 +135,10 @@
cur = cache.cursor()
cur.execute("select * from obsoletes,packages where obsoletes.pkgKey = packages.pkgKey")
for ob in cur.fetchall():
+ # If the package that is causing the obsoletes is excluded
+ # continue without processing the obsoletes
+ if (self.excludes[rep].has_key(ob['packages.pkgId'])):
+ continue
key = ( ob['packages.name'],ob['packages.arch'],
ob['packages.epoch'],ob['packages.version'],
ob['packages.release'])
@@ -155,6 +170,9 @@
cur.execute("select * from packages where pkgKey = %s" , (res['pkgKey']))
for x in cur.fetchall():
pkg = self.db2class(x)
+ if (self.excludes[rep].has_key(pkg.pkgId)):
+ continue
+
# Add this provides to prco otherwise yum doesn't understand
# that it matches
pkg.prco = {'provides':
@@ -182,6 +200,9 @@
cur.execute("select * from packages where pkgKey = %s" , (res['pkgKey']))
for x in cur.fetchall():
pkg = self.db2class(x)
+ if (self.excludes[rep].has_key(pkg.pkgId)):
+ continue
+
pkg.files = {name: res['type']}
provides.append(self.pc(pkg,rep))
@@ -192,6 +213,9 @@
cur.execute("select * from filelist,packages where dirname = %s AND filelist.pkgKey = packages.pkgKey" , (dirname))
provs = cur.fetchall()
for res in provs:
+ if (self.excludes[rep].has_key(res['packages.pkgId'])):
+ continue
+
# If it matches the dirname, that doesnt mean it matches
# the filename, check if it does
if (filename and res['filelist.filenames'].find('|%s|' % filename) == -1):
@@ -225,31 +249,34 @@
def simplePkgList(self, repoid=None):
"""returns a list of pkg tuples (n, a, e, v, r) optionally from a single repoid"""
- if (hasattr(self,'simplelist') and not repoid):
- return self.simplelist
simplelist = []
for (rep,cache) in self.primarydb.items():
- if (repoid == None or repoid == x):
+ if (repoid == None or repoid == rep):
cur = cache.cursor()
- cur.execute("select name,epoch,version,release,arch from packages")
- simplelist.extend([(pkg.name, pkg.arch, pkg.epoch, pkg.version, pkg.release) for pkg in cur.fetchall()])
- if (not repoid):
- self.simplelist = simplelist
+ cur.execute("select pkgId,name,epoch,version,release,arch from packages")
+ for pkg in cur.fetchall():
+ if (self.excludes[rep].has_key(pkg.pkgId)):
+ continue
+ simplelist.append((pkg.name, pkg.arch, pkg.epoch, pkg.version, pkg.release))
+
return simplelist
def returnNewestByNameArch(self, naTup=None):
# If naTup is set do it from the database otherwise use our parent's
# returnNewestByNameArch
if (not naTup):
- return repos.YumPackageSack.returnNewestByNameArch(self, naTup)
+ # TODO process obsoletes here
+ return repos.YumPackageSack.returnNewestByNameArch(self, naTup)
# First find all packages that fulfill naTup
allpkg = []
for (rep,cache) in self.primarydb.items():
cur = cache.cursor()
cur.execute("select pkgId,name,epoch,version,release,arch from packages where name=%s and arch=%s",naTup)
- res = [self.pc(self.db2class(x,True),rep) for x in cur.fetchall()]
- allpkg.extend(res)
+ for x in cur.fetchall():
+ if (self.excludes[rep].has_key(x.pkgId)):
+ continue
+ allpkg.append = self.pc(self.db2class(x,True),rep)
# Now find the newest one
newest = allpkg.pop()
for pkg in allpkg:
@@ -264,21 +291,24 @@
"""Returns a list of packages, only containing nevra information """
returnList = []
for (rep,cache) in self.primarydb.items():
- if (repoid == None or repoid == x):
+ if (repoid == None or repoid == rep):
cur = cache.cursor()
cur.execute("select pkgId,name,epoch,version,release,arch from packages")
- res = [self.pc(self.db2class(x,True),rep) for x in cur.fetchall()]
- returnList.extend(res)
+ for x in cur.fetchall():
+ if (self.excludes[rep].has_key(x.pkgId)):
+ continue
+ returnList.append(self.pc(self.db2class(x,True),rep))
return returnList
def searchNevra(self, name=None, epoch=None, ver=None, rel=None, arch=None):
"""return list of pkgobjects matching the nevra requested"""
returnList = []
- nevra = (name,epoch,ver,rel,arch)
# Search all repositories
for (rep,cache) in self.primarydb.items():
cur = cache.cursor()
cur.execute("select * from packages WHERE name = %s AND epoch = %s AND version = %s AND release = %s AND arch = %s" , (name,epoch,ver,rel,arch))
- returnList.extend([self.pc(self.db2class(x),rep) for x in cur.fetchall()]
- )
+ for x in cur.fetchall():
+ if (self.excludes[rep].has_key(x.pkgId)):
+ continue
+ returnList.append(self.pc(self.db2class(x),rep))
return returnList
More information about the Yum-cvs-commits
mailing list