[yum-commits] yum-builddep.py

Panu Matilainen pmatilai at osuosl.org
Wed Nov 24 16:50:11 UTC 2010


 yum-builddep.py |   59 +++++++++++++++++++++++++++++++++++++++-----------------
 1 file changed, 42 insertions(+), 17 deletions(-)

New commits:
commit 2bdf12714589e8bbeddc2a4782a84ef100045318
Author: Panu Matilainen <pmatilai at redhat.com>
Date:   Wed Nov 24 18:46:52 2010 +0200

    Teach yum-builddep to install buildrequires parsed directly from spec
    - Split the actual install part out of get_build_deps() to avoid
      code duplication
    - If rpm-python supports it, accept spec files as arguments and
      grab buildrequires directly out of the parsed spec

diff --git a/yum-builddep.py b/yum-builddep.py
index 657707b..02db3b0 100755
--- a/yum-builddep.py
+++ b/yum-builddep.py
@@ -136,6 +136,24 @@ class YumBuildDep(YumUtilBase):
                     print "Could not setup repo %s: %s" % (r.id, e)
                     sys.exit(1)
 
+    def install_deps(self, deplist):
+        for dep in deplist:
+            self.logger.debug(' REQ:  %s' % dep)                
+            if dep.startswith("rpmlib("): 
+                continue
+            instreq = self.returnInstalledPackagesByDep(dep)
+            if instreq:
+                self.logger.info(' --> Already installed : %s'  % instreq[0])                    
+                continue
+            try:
+                pkg = self.returnPackageByDep(dep)
+                self.logger.info(' --> %s' % pkg)
+                self.install(pkg)
+                
+            except yum.Errors.YumBaseError, e:
+                self.logger.error("Error: %s" % e)
+                sys.exit(1)
+
     # go through each of the pkgs, figure out what they are/where they are 
     # if they are not a local package then run
         # Setup source repos
@@ -146,7 +164,14 @@ class YumBuildDep(YumUtilBase):
     
     def get_build_deps(self,opts):
         srcnames = []
+        specnames = []
         srpms = []
+        specworks = False
+
+        # See if we can use spec files for buildrequires
+        if hasattr(rpm, 'spec') and hasattr(rpm.spec, 'sourceHeader'):
+            specworks = True
+
         for arg in self.cmds:
             if arg.endswith('.src.rpm'):
                 try:
@@ -157,6 +182,8 @@ class YumBuildDep(YumUtilBase):
                     raise
             elif arg.endswith('.src'):
                 srcnames.append(arg)
+            elif specworks and arg.endswith('.spec'):
+                specnames.append(arg)
             else:
                 srcnames.append(arg)
 
@@ -183,24 +210,22 @@ class YumBuildDep(YumUtilBase):
 
         for srpm in toActOn:
             self.logger.info('Getting requirements for %s' % srpm)
-            for dep in srpm.requiresList():
-                self.logger.debug(' REQ:  %s' % dep)                
-                if dep.startswith("rpmlib("): 
-                    continue
-                instreq = self.returnInstalledPackagesByDep(dep)
-                if instreq:
-                    self.logger.info(' --> Already installed : %s'  % instreq[0])                    
-                    continue
-                try:
-                    pkg = self.returnPackageByDep(dep)
-                    self.logger.info(' --> %s' % pkg)
-                    self.install(pkg)
-                    
-                except yum.Errors.YumBaseError, e:
-                    self.logger.error("Error: %s" % e)
-                    sys.exit(1)
-    
+            self.install_deps(srpm.requiresList())
     
+        for name in specnames:
+            try:
+                spec = rpm.spec(name)
+            except ValueError:
+                self.logger.error("Bad spec: %s" % name)
+                continue
+
+            buildreqs = []
+            for d in rpm.ds(spec.sourceHeader, 'requires'):
+                buildreqs.append(d.DNEVR()[2:])
+                
+            self.logger.info('Getting requirements for %s' % name)
+            self.install_deps(buildreqs)
+            
 if __name__ == '__main__':
     setup_locale()
     util = YumBuildDep()


More information about the Yum-commits mailing list