[yum-cvs] yum-utils repoclosure.py,1.7,1.8

Seth Vidal skvidal at login.linux.duke.edu
Thu Jun 23 04:53:55 UTC 2005


Update of /home/groups/yum/cvs/yum-utils
In directory login:/tmp/cvs-serv10147

Modified Files:
	repoclosure.py 
Log Message:

check in most of Bill Nottingham's patch to make repoclosure work as a class
for importing from other programs


Index: repoclosure.py
===================================================================
RCS file: /home/groups/yum/cvs/yum-utils/repoclosure.py,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- repoclosure.py	21 Jun 2005 15:50:46 -0000	1.7
+++ repoclosure.py	23 Jun 2005 04:53:53 -0000	1.8
@@ -20,48 +20,18 @@
 #   dependencies in all packages for resolution. Print out the list of
 #   packages with unresolved dependencies
 
-
-import yum
-import yum.Errors
 import sys
 import os
-from stat import *
-import pwd
-import glob
 
+import yum
+import yum.Errors
+from yum.misc import getCacheDir
 from optparse import OptionParser
-import tempfile
 import rpmUtils.arch
 from yum.constants import *
 
 
-def getCacheDir():
-    """return a path to a valid and safe cachedir - only used when not running
-       as root or when --tempcache is set"""
-    
-    tmpdir='/var/tmp'
-    uid = os.geteuid()
-    try:
-        usertup = pwd.getpwuid(uid)
-        username = usertup[0]
-    except KeyError:
-        return None # if it returns None then, well, it's bollocksed
-
-    # check for /var/tmp/yum-username-* - 
-    prefix = 'yum-%s-' % username    
-    dirpath = '%s/%s*' % (tmpdir, prefix)
-    cachedirs = glob.glob(dirpath)
-    
-    for thisdir in cachedirs:
-        stats = os.lstat(thisdir)        
-        if S_ISDIR(stats[0]) and S_IMODE(stats[0]) == 448 and stats[4] == uid:
-            print thisdir
-            return thisdir
-
-    # make the dir (tempfile.mkdtemp())
-    cachedir = tempfile.mkdtemp(prefix=prefix, dir=tmpdir)
-    return cachedir
-    
+
 def evrTupletoVer(tuple):
     """convert and evr tuple to a version string, return None if nothing
        to convert"""
@@ -96,21 +66,71 @@
     (opts, args) = parser.parse_args()
     return (opts, args)
 
-class YumQuiet(yum.YumBase):
-    def __init__(self):
+class RepoClosure(yum.YumBase):
+    def __init__(self, arch = None, config = "/etc/yum.conf"):
         yum.YumBase.__init__(self)
+
+        self.arch = arch
+        self.doConfigSetup(fn = config)
+        if hasattr(self.repos, 'sqlite'):
+            self.repos.sqlite = False
+            self.repos._selectSackType()
+    
+    def evrTupletoVer(self,tuple):
+        """convert and evr tuple to a version string, return None if nothing
+        to convert"""
+    
+        e, v,r = tuple
+
+        if v is None:
+            return None
+    
+        val = ''
+        if e is not None:
+            val = '%s:%s' % (e, v)
+    
+        if r is not None:
+            val = '%s-%s' % (val, r)
+    
+        return val
+    
+    def readMetadata(self):
+        self.doRepoSetup()
+        self.doSackSetup(rpmUtils.arch.getArchList(self.arch))
+        for repo in self.repos.listEnabled():
+            self.repos.populateSack(which=[repo.id], with='filelists')
+
+    def getBrokenDeps(self):
+        unresolved = {}
+        resolved = {}
+        for pkg in self.pkgSack:
+            for (req, flags, (reqe, reqv, reqr)) in pkg.returnPrco('requires'):
+                if req.startswith('rpmlib'): continue # ignore rpmlib deps
+            
+                ver = self.evrTupletoVer((reqe, reqv, reqr))
+                if resolved.has_key((req,flags,ver)):
+                    continue
+                try:
+                    resolve_sack = self.whatProvides(req, flags, ver)
+                except yum.Errors.RepoError, e:
+                    pass
+            
+                if len(resolve_sack) < 1:
+                    if not unresolved.has_key(pkg):
+                        unresolved[pkg] = []
+                    unresolved[pkg].append((req, flags, ver))
+                else:
+                    resolved[(req,flags,ver)] = 1
+        return unresolved
+    
     
     def log(self, value, msg):
         pass
 
 def main():
     (opts, cruft) = parseArgs()
-    my = YumQuiet()
-    my.doConfigSetup(fn = opts.config)
-    if hasattr(my.repos, 'sqlite'):
-        my.repos.sqlite = False
-        my.repos._selectSackType()
-
+    my = RepoClosure(arch = opts.arch, config = opts.config)
+    
     if opts.repoid:
         for repo in my.repos.repos.values():
             if repo.id not in opts.repoid:
@@ -125,47 +145,21 @@
             sys.exit(50)
             
         my.repos.setCacheDir(cachedir)
-        
-    my.doRepoSetup()
+
     if not opts.quiet:
         print 'Reading in repository metadata - please wait....'
-    my.doSackSetup(rpmUtils.arch.getArchList(opts.arch))
-    for repo in my.repos.listEnabled():
-            
-        try:
-            my.repos.populateSack(which=[repo.id], with='filelists')
-        except yum.Errors.RepoError, e:
-            print 'Filelists not available for repo: %s' % repo
-            print 'Some dependencies may not be complete for this repository'
-            print 'Run as root to get all dependencies'
-
-    unresolved = {}
-    # Cache resolved dependencies for speed
-    resolved = {}
-    
+
+    try:
+        my.readMetadata()
+    except yum.Errors.RepoError, e:
+        print 'Filelists not available for repo: %s' % repo
+        print 'Some dependencies may not be complete for this repository'
+        print 'Run as root to get all dependencies or use -t to enable a user temp cache'
+
     if not opts.quiet:
         print 'Checking Dependencies'
-        
-    for pkg in my.pkgSack:
-        for (req, flags, (reqe, reqv, reqr)) in pkg.returnPrco('requires'):
-            if req.startswith('rpmlib'): continue # ignore rpmlib deps
-            
-            ver = evrTupletoVer((reqe, reqv, reqr))
-            if resolved.has_key((req,flags,ver)):
-                continue
-            try:
-                resolve_sack = my.whatProvides(req, flags, ver)
-            except yum.Errors.RepoError, e:
-                pass
-            
-            if len(resolve_sack) < 1:
-                if not unresolved.has_key(pkg):
-                    unresolved[pkg] = []
-                unresolved[pkg].append((req, flags, ver))
-            else:
-                resolved[(req,flags,ver)] = 1
-    
 
+    baddeps = my.getBrokenDeps()
     num = len(my.pkgSack)
     repos = my.repos.listEnabled()
 
@@ -175,12 +169,11 @@
             print '   %s' % repo
         print 'Num Packages in Repos: %s' % num
     
-    
-    pkgs = unresolved.keys()
+    pkgs = baddeps.keys()
     pkgs.sort()
     for pkg in pkgs:
         print 'package: %s from %s\n  unresolved deps: ' % (pkg, pkg.repoid)
-        for (n, f, v) in unresolved[pkg]:
+        for (n, f, v) in baddeps[pkg]:
             req = '%s' % n
             if f: 
                 flag = LETTERFLAGS[f]
@@ -189,6 +182,7 @@
                 req = '%s %s' % (req, v)
             
             print '     %s' % req
-    
+
 if __name__ == "__main__":
     main()
+        




More information about the Yum-cvs-commits mailing list