#1641 init: Filter comps for modular variants with tags
Merged 2 years ago by lsedlar. Opened 2 years ago by lsedlar.
lsedlar/pungi comps-filtering  into  master

file modified
+9 -3
@@ -165,12 +165,18 @@ 

      run(cmd)

  

      comps = CompsWrapper(comps_file)

-     if variant.groups or variant.modules is not None or variant.type != "variant":

-         # Filter groups if the variant has some, or it's a modular variant, or

-         # is not a base variant.

+     # Filter groups if the variant has some, or it's a modular variant, or

+     # is not a base variant.

+     if (

+         variant.groups

+         or variant.modules is not None

+         or variant.modular_koji_tags is not None

+         or variant.type != "variant"

+     ):

          unmatched = comps.filter_groups(variant.groups)

          for grp in unmatched:

              compose.log_warning(UNMATCHED_GROUP_MSG % (variant.uid, arch, grp))

+ 

      contains_all = not variant.groups and not variant.environments

      if compose.conf["comps_filter_environments"] and not contains_all:

          # We only want to filter environments if it's enabled by configuration

file modified
+1
@@ -79,6 +79,7 @@ 

          self.variants = {}

          self.pkgsets = set()

          self.modules = None

+         self.modular_koji_tags = None

          self.name = name

          self.nsvc_to_pkgset = defaultdict(lambda: mock.Mock(rpms_by_arch={}))

  

file modified
+39
@@ -499,6 +499,45 @@ 

  

      @mock.patch("pungi.phases.init.run")

      @mock.patch("pungi.phases.init.CompsWrapper")

+     def test_run_filter_for_modular_koji_tags(self, CompsWrapper, run):

+         compose = DummyCompose(self.topdir, {})

+         variant = compose.variants["Server"]

+         variant.groups = []

+         variant.modular_koji_tags = ["f38-modular"]

+         comps = CompsWrapper.return_value

+         comps.filter_groups.return_value = []

+ 

+         init.write_variant_comps(compose, "x86_64", variant)

+ 

+         self.assertEqual(

+             run.mock_calls,

+             [

+                 mock.call(

+                     [

+                         "comps_filter",

+                         "--arch=x86_64",

+                         "--keep-empty-group=conflicts",

+                         "--keep-empty-group=conflicts-server",

+                         "--variant=Server",

+                         "--output=%s/work/x86_64/comps/comps-Server.x86_64.xml"

+                         % self.topdir,

+                         self.topdir + "/work/global/comps/comps-global.xml",

+                     ]

+                 )

+             ],

+         )

+         self.assertEqual(

+             CompsWrapper.call_args_list,

+             [mock.call(self.topdir + "/work/x86_64/comps/comps-Server.x86_64.xml")],

+         )

+         self.assertEqual(comps.filter_groups.call_args_list, [mock.call([])])

+         self.assertEqual(

+             comps.filter_environments.mock_calls, [mock.call(variant.environments)]

+         )

+         self.assertEqual(comps.write_comps.mock_calls, [mock.call()])

+ 

+     @mock.patch("pungi.phases.init.run")

+     @mock.patch("pungi.phases.init.CompsWrapper")

      def test_run_report_unmatched(self, CompsWrapper, run):

          compose = DummyCompose(self.topdir, {})

          variant = compose.variants["Server"]

Modular variants can either be specified by a list of modules, or by a list of Koji tags. In terms of comps preprocessing there should not be any difference between the two.

Looks good to me. :thumbsup:

Pull-Request has been merged by lsedlar

2 years ago