[CentOS-devel] [PATCH 2/4] Customize the srpm method, this lets us accommodate the CentOS directory structure

Sat Jul 5 04:48:58 UTC 2014
Brian Stinson <bstinson at ksu.edu>

The vanilla rpkg instance dumps all the sources in the toplevel of the
package checkout (everything is flat). CentOS uses the
SOURCES,SPECS,SRPMS directory structure.
---
 src/centpkg/__init__.py |   34 +++++++++++++++++++++++++++++++---
 1 files changed, 31 insertions(+), 3 deletions(-)

diff --git a/src/centpkg/__init__.py b/src/centpkg/__init__.py
index 7eff083..e6f4e45 100644
--- a/src/centpkg/__init__.py
+++ b/src/centpkg/__init__.py
@@ -142,6 +142,37 @@ class Commands(pyrpkg.Commands):
 
         return
 
+    def srpm(self, hashtype=None):
+        """Create an srpm using hashtype from content in the module
+
+        Requires sources already downloaded.
+        """
+
+        # This line is what changed for centpkg, in Fedora the directory
+        # structure is flat, in CentOS we use the proper SRPMS/ directory for
+        # our source RPMs 
+        self.srpmname = os.path.join(self.path, 'SRPMS',
+                            "{0}-{1}-{2}.src.rpm".format(self.module_name,
+                                                  self.ver, self.rel))
+        # See if we need to build the srpm
+        if os.path.exists(self.srpmname):
+            self.log.debug('Srpm found, rewriting it.')
+
+        cmd = ['rpmbuild']
+        cmd.extend(self.rpmdefines)
+        if self.quiet:
+            cmd.append('--quiet')
+        # Figure out which hashtype to use, if not provided one
+        if not hashtype:
+            # Try to determine the dist
+            hashtype = self._guess_hashtype()
+        # This may need to get updated if we ever change our checksum default
+        if not hashtype == 'sha256':
+            cmd.extend(["--define '_source_filedigest_algorithm %s'" % hashtype,
+                    "--define '_binary_filedigest_algorithm %s'" % hashtype])
+        cmd.extend(['--nodeps', '-bs', os.path.join(self.path, self.spec)])
+        self._run_command(cmd, shell=True)
+
     # These are the commands defined in the base pyrpkg.Commands class
     # and have not been implemented here, yet
 
@@ -199,9 +230,6 @@ class Commands(pyrpkg.Commands):
     def prep(self, *args, **kwargs):
         raise NotImplementedError("This command is not yet implemented in centpkg")
 
-    def srpm(self, *args, **kwargs):
-        raise NotImplementedError("This command is not yet implemented in centpkg")
-
     def unused_patches(self, *args, **kwargs):
         raise NotImplementedError("This command is not yet implemented in centpkg")
 
-- 
1.7.1