extras-buildsys/utils/pushscript MultiLib.py,1.12,1.13

Michael Schwendt (mschwendt) fedora-extras-commits at redhat.com
Thu Sep 6 12:33:16 UTC 2007


Author: mschwendt

Update of /cvs/fedora/extras-buildsys/utils/pushscript
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv8175

Modified Files:
	MultiLib.py 
Log Message:
- multi-lib resolver needs to work in testing repos and be
able to copy new multi-lib deps from stable in order to avoid
broken deps



Index: MultiLib.py
===================================================================
RCS file: /cvs/fedora/extras-buildsys/utils/pushscript/MultiLib.py,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- MultiLib.py	8 Mar 2007 12:02:18 -0000	1.12
+++ MultiLib.py	6 Sep 2007 12:33:13 -0000	1.13
@@ -108,12 +108,12 @@
             hdr = rpmUtils.miscutils.hdrFromPackage(ts,srpmloc)
             excludearch = hdr['excludearch']
         except rpmUtils.RpmUtilsError, e:  # source rpm not there or bad
-            print 'ERROR: %s' % e
+            print 'ERROR: %s' % ''.join(e)
             print srpmloc
             print 'referenced by: %s' % fname
             # TODO: We don't want such builds! Do something about it.
-            # Is this case possible at all? Or only during dep resolving
-            # and when running into old pkgs?
+            # This is normal for multi-lib, where a test update pulls in
+            # deps from stable as long as it stays in updates-testing.
             srcrpm = None
             excludearch = []
         
@@ -172,8 +172,6 @@
         self.resolved = {}
         self.seenbefore = []
         self.needed = {}
-        self.needed['rpms'] = []
-        self.needed['debug'] = []
 
     def readMetadata(self):
         self.doRepoSetup()
@@ -182,18 +180,22 @@
             self.repos.populateSack(which=[repo.id], with='filelists')
 
     def addNeededPkg(self,pkg):
+        self.needed.setdefault(pkg.repoid,{})
+        self.needed[pkg.repoid].setdefault('rpms',[])
+        self.needed[pkg.repoid].setdefault('debug',[])
+        
         (n,a,e,v,r) = pkg.returnPackageTuple()
         file = '%s-%s-%s.%s.rpm' % (n,v,r,a)
-        if file not in self.needed['rpms']:
-            self.needed['rpms'].append(file)
+        if file not in self.needed[pkg.repoid]['rpms']:
+            self.needed[pkg.repoid]['rpms'].append(file)
             print ' +', file
 
             binarch = a
             srcrpm = pkg.returnSimple('sourcerpm')
             (n,v,r,e,a) = rpmUtils.miscutils.splitFilename(srcrpm)
             debugrpm = '%s-debuginfo-%s-%s.%s.rpm' % (n,v,r,binarch)
-            if debugrpm not in self.needed['debug']:
-                self.needed['debug'].append(debugrpm)
+            if debugrpm not in self.needed[pkg.repoid]['debug']:
+                self.needed[pkg.repoid]['debug'].append(debugrpm)
                 print ' +', debugrpm
 
     def resolveRequires(self,pkg):
@@ -240,15 +242,22 @@
         return False
     missingdict[targetarch].setdefault('rpms',[])
     missingdict[targetarch].setdefault('debug',[])
-    
+
+    dotesting = dist.startswith('testing/')
+    testdist = dist
+    if dotesting:
+        dist = dist.replace('testing/','')
+
     rs = RepoSupport.RepoSupport(cfg)
     conf = rs.GenerateConfig([dist])
 
     repoids = []
     srcarch = rpmUtils.arch.getBaseArch( rpmUtils.arch.multilibArches[targetarch][0] )
-    # Only look at basearch repo.
     a = srcarch
-    for r in rs.ReleaseRepoList(dist):
+    repolist = rs.ReleaseRepoList(dist)
+    if dotesting:
+        repolist += rs.TestRepoList(dist)
+    for r in repolist:
         if r.find(cfg.project) < 0:  # only look at our project's repos
             continue
         repoids.append(rs.RepoId(r,dist,a))
@@ -256,7 +265,7 @@
 
     # Only look at multicompat packages.
     my = Resolver(arch = srcarch, config = conf,
-                  pushcfg=cfg, dist=dist, targetarch=targetarch)
+                  pushcfg=cfg, dist=testdist, targetarch=targetarch)
     os.remove(conf)
     for repo in my.repos.repos.values():
         if repo.id not in repoids:
@@ -278,7 +287,7 @@
     Utils.fix_mdcache_access(cfg.rundir,cfg.cachedir)
 
     ts = rpmUtils.transaction.initReadOnlyTransaction()
-    compatrepodir = os.path.join(cfg.treedir,dist,srcarch)
+    compatrepodir = os.path.join(cfg.treedir,testdist,srcarch)
     for f in missingdict[targetarch]['rpms']:
         print f
         fpath = os.path.join(compatrepodir,f)
@@ -287,19 +296,41 @@
 
     changed = False
     print 'Installing needed packages for %s:' % targetarch
-    for f in my.needed['rpms']+missingdict[targetarch]['rpms']:
-        srcfile = os.path.join(cfg.treedir,dist,srcarch,f)
-        destfile = os.path.join(cfg.treedir,dist,targetarch,f)
+
+    def addrpm(f,src,dest):
+        srcfile = os.path.join(src,f)
+        destfile = os.path.join(dest,f)
+        if not os.path.exists(srcfile):
+            print 'WARNING: missing', srcfile
+            return False
         if not os.path.exists(destfile):  # silent extra-check
+            print 'Adding:', destfile
             Utils.install_link_or_copy(srcfile,destfile)
+            return True
+        else:
+            return False
+
+    destreporoot = os.path.join(cfg.treedir,testdist,targetarch)
+    srcreporoot = os.path.join(cfg.treedir,testdist,srcarch)
+    for f in missingdict[targetarch]['rpms']:
+        if addrpm(f,srcreporoot,destreporoot):
             changed = True
-    for f in my.needed['debug']:
-        srcfile = os.path.join(cfg.treedir,dist,srcarch,'debug',f)
-        destfile = os.path.join(cfg.treedir,dist,targetarch,'debug',f)
-        if os.path.exists(srcfile):
-            if not os.path.exists(destfile):  # silent extra-check
-                Utils.install_link_or_copy(srcfile,destfile)
+    
+    for repoid in my.needed.keys():
+        if repoid.find('testing')<0:
+            # Make available new multi-lib deps from non-testing repo.
+            srcreporoot = os.path.join(cfg.treedir,dist,srcarch)
+        else:
+            srcreporoot = os.path.join(cfg.treedir,testdist,srcarch)
+        for f in my.needed[repoid]['rpms']:
+            if addrpm(f,srcreporoot,destreporoot):
+                changed = True
+        destdebugreporoot = os.path.join(destreporoot,'debug')
+        srcdebugreporoot = os.path.join(srcreporoot,'debug')
+        for f in my.needed[repoid]['debug']:
+            if addrpm(f,srcdebugreporoot,destdebugreporoot):
                 changed = True
+
     print 'done.'
         
     return changed




More information about the fedora-extras-commits mailing list