Blob Blame History Raw
diff --git a/module_build_service/builder/KojiModuleBuilder.py b/module_build_service/builder/KojiModuleBuilder.py
index c64f16c..ec4f989 100644
--- a/module_build_service/builder/KojiModuleBuilder.py
+++ b/module_build_service/builder/KojiModuleBuilder.py
@@ -389,6 +389,8 @@ chmod 644 %buildroot/%_sysconfdir/rpm/macros.zz-modules
     def buildroot_connect(self, groups):
         log.info("%r connecting buildroot." % self)
 
+        build_tag = self.koji_session.getTag(self.tag_name + "-build")
+
         # Create or update individual tags
         # the main tag needs arches so pungi can dump it
         self.module_tag = self._koji_create_tag(
@@ -398,6 +400,11 @@ chmod 644 %buildroot/%_sysconfdir/rpm/macros.zz-modules
 
         self._koji_whitelist_packages(self.components)
 
+        if not build_tag:
+            xmd = self.mmd.get_xmd()
+            if "mbs_options" in xmd.keys() and "blocked_packages" in xmd["mbs_options"].keys():
+                self._koji_block_packages(xmd["mbs_options"]["blocked_packages"])
+
         @module_build_service.utils.retry(wait_on=SysCallError, interval=5)
         def add_groups():
             return self._koji_add_groups_to_tag(
@@ -436,6 +443,14 @@ chmod 644 %buildroot/%_sysconfdir/rpm/macros.zz-modules
         log.info("%r adding artifacts %r" % (self, artifacts))
         build_tag = self._get_tag(self.module_build_tag)['id']
 
+        xmd = self.mmd.get_xmd()
+        if "mbs_options" in xmd.keys() and "blocked_packages" in xmd["mbs_options"].keys():
+            packages = [kobo.rpmlib.parse_nvr(nvr)["name"] for nvr in artifacts]
+            packages = [package for package in packages
+                        if package in xmd["mbs_options"]["blocked_packages"]]
+            if packages:
+                self._koji_unblock_packages(packages)
+
         tagged_nvrs = self._get_tagged_nvrs(self.module_build_tag['name'])
 
         self.koji_session.multicall = True
@@ -836,6 +851,22 @@ chmod 644 %buildroot/%_sysconfdir/rpm/macros.zz-modules
                 self.koji_session.packageListAdd(tag['name'], package, self.owner)
         self.koji_session.multiCall(strict=True)
 
+    def _koji_block_packages(self, packages):
+        """
+        Blocks the `packages` for the module_build_tag.
+        """
+        log.info("Blocking packages in tag %s: %r", self.module_build_tag["name"], packages)
+        args = [[self.module_build_tag["name"], package] for package in packages]
+        koji_multicall_map(self.koji_session, self.koji_session.packageListBlock, args)
+
+    def _koji_unblock_packages(self, packages):
+        """
+        Unblocks the `packages` for the module_build_tag.
+        """
+        log.info("Unblocking packages in tag %s: %r", self.module_build_tag["name"], packages)
+        args = [[self.module_build_tag["name"], package] for package in packages]
+        koji_multicall_map(self.koji_session, self.koji_session.packageListUnblock, args)
+
     @module_build_service.utils.validate_koji_tag(['build_tag', 'dest_tag'])
     def _koji_add_target(self, name, build_tag, dest_tag):
         """