commit 309b476ffea7f55b61450e23047bfa93f60ffb0f
Author: Julien 'Lta' BALLET <lta@fb.com>
Date:   Fri Mar 6 11:02:16 2015 -0800

Add a plugin that calls command (from the host) on the produced rpms.

As it has been developped to auto-sign package after build the plugin
name is sign. It's disabled by default, but its default configuration
is to call rpmsign

diff --git a/Makefile.am b/Makefile.am
index 597906d..84ca35e 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -57,7 +57,8 @@ plugins_PYTHON = \
     py/mockbuild/plugins/yum_cache.py \
     py/mockbuild/plugins/selinux.py   \
     py/mockbuild/plugins/mount.py \
-    py/mockbuild/plugins/lvm_root.py
+    py/mockbuild/plugins/lvm_root.py \
+    py/mockbuild/plugins/sign.py
 
 mockbuilddir = $(pythondir)/mockbuild
 mockbuild_PYTHON = \
diff --git a/etc/mock/site-defaults.cfg b/etc/mock/site-defaults.cfg
index bbdfedc..275869c 100644
--- a/etc/mock/site-defaults.cfg
+++ b/etc/mock/site-defaults.cfg
@@ -146,6 +146,13 @@
 # config_opts['plugin_conf']['compress_logs_opts'] = {}
 ### Command used to compress logs - e.g. "/usr/bin/xz -9"
 # config_opts['plugin_conf']['compress_logs_opts']['command'] = ""
+#
+# Configuration options for the sign plugin:
+# config_opts['plugin_conf']['sign_enable'] = False
+# config_opts['plugin_conf']['sign_opts']['cmd'] = 'rpmsign'
+# The options to pass to the signing command. %(rpms)s will be expanded to
+# the rpms in the results folder
+# config_opts['plugin_conf']['sign_opts']['opts'] = '--addsign %(rpms)s'
 
 #############################################################################
 #
diff --git a/mock.spec.in b/mock.spec.in
index 6a7bdca..5f182c2 100644
--- a/mock.spec.in
+++ b/mock.spec.in
@@ -61,7 +61,7 @@ Requires: python-requests
 Requires: python >= 2.6
 BuildRequires: python-devel
 %endif
-
+Suggests: rpm-sign
 
 %description
 Mock takes an SRPM and builds it in a chroot.
@@ -95,7 +95,7 @@ of the buildroot.
 %prep
 %setup -q
 %if 0%{?rhel} == 6
-sed -i "s|^USE_NSPAWN = True|USE_NSPAWN = False|" py/mockbuild/util.py 
+sed -i "s|^USE_NSPAWN = True|USE_NSPAWN = False|" py/mockbuild/util.py
 %endif
 %if %{use_python3}
 sed -i 's/AM_PATH_PYTHON/AM_PATH_PYTHON([3])/' configure.ac
diff --git a/py/mockbuild/plugin.py b/py/mockbuild/plugin.py
index 435e0f5..be74a87 100644
--- a/py/mockbuild/plugin.py
+++ b/py/mockbuild/plugin.py
@@ -24,6 +24,7 @@ class Plugins(object):
                 self.plugin_conf[key]['cache_topdir'] = buildroot.cache_topdir
                 self.plugin_conf[key]['cachedir'] = buildroot.cachedir
                 self.plugin_conf[key]['root'] = buildroot.shared_root_name
+                self.plugin_conf[key]['resultdir'] = buildroot.resultdir
 
         self.state.start("init plugins")
         # Import plugins  (simplified copy of what yum does). Can add yum
diff --git a/py/mockbuild/plugins/sign.py b/py/mockbuild/plugins/sign.py
new file mode 100644
index 0000000..ea5d48d
--- /dev/null
+++ b/py/mockbuild/plugins/sign.py
@@ -0,0 +1,38 @@
+# vim:expandtab:autoindent:tabstop=4:shiftwidth=4:filetype=python:textwidth=0:
+# License: GPL2 or later see COPYING
+# Written by Julien BALLET <lta@fb.com>
+# Copyright (C) 2014 Facebook
+
+# python library imports
+from mockbuild.trace_decorator import traceLog, getLog
+from mockbuild.util import do
+import glob
+
+requires_api_version = "1.1"
+
+# plugin entry point
+@traceLog()
+def init(plugins, conf, buildroot):
+    Sign(plugins, conf, buildroot)
+
+
+class Sign(object):
+    """Automatically sign package after build"""
+
+    @traceLog()
+    def __init__(self, plugins, conf, buildroot):
+        self.plugins = plugins
+        self.conf = conf
+        self.buildroot = buildroot
+        self.plugins.add_hook('postbuild', self.sign_results)
+
+        getLog().info(conf)
+        getLog().info("enabled package signing")
+
+    def sign_results(self):
+        rpms = glob.glob('%s/*.rpm' % self.buildroot.resultdir)
+        if rpms:
+            getLog().info("Signing %s", ', '.join(rpms))
+            opts = self.conf['opts'] % {'rpms': ' '.join(rpms)}
+            cmd = "{0} {1}".format(self.conf['cmd'], opts)
+            do(cmd, pty=True, printOutput=True, shell=True)
diff --git a/py/mockbuild/util.py b/py/mockbuild/util.py
index 33bc617..a6271c6 100644
--- a/py/mockbuild/util.py
+++ b/py/mockbuild/util.py
@@ -72,7 +72,7 @@ personality_defs = {
 
 PLUGIN_LIST = ['tmpfs', 'root_cache', 'yum_cache', 'bind_mount',
                'ccache', 'selinux', 'package_state', 'chroot_scan',
-               'lvm_root', 'compress_logs']
+               'lvm_root', 'compress_logs', 'sign']
 
 # This is set to False on EL6 in build time
 USE_NSPAWN = False
@@ -685,6 +685,11 @@ def setup_default_config_opts(unprivUid, version, pkgpythondir):
                 "\\bcore(\\.\\d+)?$",
                 "\\.log$",
                 ]},
+            'sign_enable': False,
+            'sign_opts': {
+                'cmd' : 'rpmsign',
+                'opts' : '--addsign %(rpms)s',
+                },
             }
 
     config_opts['environment'] = {
