[PATCH i-g-t v3 8/8] scripts/igt_doc.py: use an ancillary function to simplify the code
Kamil Konieczny
kamil.konieczny at linux.intel.com
Fri Feb 9 13:21:15 UTC 2024
Hi Mauro,
On 2024-02-09 at 13:34:47 +0100, Mauro Carvalho Chehab wrote:
> From: Mauro Carvalho Chehab <mchehab at kernel.org>
>
> The code inside gen_intelci_testlist() is too complex, and currently
> buggy.
>
> Basically, if we have two testlists with driver name + name, like
> "Xe BAT" and "i915 BAT", the current logic picks just one
> (randomly), which produce different results on each run.
>
> Simplify the logic by moving the routine which fills the run_type
> set to a separate function, fixing the bug.
>
> Signed-off-by: Mauro Carvalho Chehab <mchehab at kernel.org>
Reviewed-by: Kamil Konieczny <kamil.konieczny at linux.intel.com>
> ---
> scripts/igt_doc.py | 72 ++++++++++++++++++++++++++++------------------
> 1 file changed, 44 insertions(+), 28 deletions(-)
>
> diff --git a/scripts/igt_doc.py b/scripts/igt_doc.py
> index 1b4f7eafd135..3a45371a27e7 100755
> --- a/scripts/igt_doc.py
> +++ b/scripts/igt_doc.py
> @@ -18,6 +18,40 @@ import sys
> from test_list import TestList
>
> class IgtTestList(TestList):
> + def __init__(self, *args, **kwargs):
> + self.split_regex = re.compile(r",\s*")
> +
> + super().__init__(*args, **kwargs)
> +
> + def _get_run_type_drivers(self, run_types):
> + """
> + Ancillary routine to return drivers and run type set from
> + a run type string.
> + """
> +
> + run_type_dict = {}
> + for run_type in set(self.split_regex.split(run_types)):
> + driver_set = set()
> + if not run_type:
> + run_type = "other"
> + else:
> + for driver in self.drivers:
> + result = re.sub(r"^" + driver + r"[\W_]*", "", run_type, re.IGNORECASE)
> + if result != run_type:
> + driver_set = set([driver])
> + run_type = result
> + break
> +
> + if not driver_set:
> + driver_set = set(self.drivers)
> +
> + if run_type in run_type_dict:
> + run_type_dict[run_type].update(driver_set)
> + else:
> + run_type_dict[run_type] = driver_set
> +
> + return run_type_dict
> +
> """
> This class implements testlist generation as expected by Intel CI.
> It does that by handling test lists split by "Run type" and
> @@ -50,7 +84,7 @@ class IgtTestList(TestList):
> - if "GPU excluded platform" exists, for each GPU listed on
> the list, it will block the test.
> """
> - def gen_intelci_testlist(self): #pylint: disable=R0912
> + def gen_intelci_testlist(self):
> """Return a list of gpu configs and testlists."""
>
> subtest_dict = self.expand_dictionary(True)
> @@ -58,48 +92,30 @@ class IgtTestList(TestList):
> # Create a tests_per_list dict
> gpu_set = set()
> tests_per_list = {}
> - split_regex = re.compile(r",\s*")
> +
> + for driver in set(self.drivers):
> + tests_per_list[driver] = {}
>
> for subname, subtest in subtest_dict.items():
> run_types = subtest.get("Run type", "other").lower()
> - drivers = set()
> - run_type_set = set()
> - for run_type in set(split_regex.split(run_types)):
>
> - for driver in self.drivers:
> - if run_type.startswith(driver):
> - run_type = re.sub(r"^" + driver + r"[\W_]*", "", run_type)
> - drivers = set([driver])
> - break
> + run_type_dict = self._get_run_type_drivers(run_types)
>
> - if not drivers:
> - drivers.update(self.drivers)
> -
> - if not run_type:
> - run_type = "other"
> -
> - run_type_set.add(run_type)
> -
> - if not drivers:
> - drivers = set(self.drivers)
> -
> - for driver in drivers:
> - if driver not in tests_per_list:
> - tests_per_list[driver] = {}
> -
> - for run_type in run_type_set:
> + for run_type, drivers in run_type_dict.items():
> + for driver in drivers:
> if run_type not in tests_per_list[driver]:
> tests_per_list[driver][run_type] = {}
> +
> if subname not in tests_per_list[driver][run_type]:
> tests_per_list[driver][run_type][subname] = {}
>
> if "GPU" in subtest:
> - for gpu in split_regex.split(subtest["GPU"]):
> + for gpu in self.split_regex.split(subtest["GPU"]):
> gpu_set.add(gpu)
> tests_per_list[driver][run_type][subname][gpu] = True
>
> if "GPU excluded platform" in subtest:
> - for gpu in split_regex.split(subtest["GPU excluded platform"]):
> + for gpu in self.split_regex.split(subtest["GPU excluded platform"]):
> gpu_set.add(gpu)
> tests_per_list[driver][run_type][subname][gpu] = False
>
> --
> 2.43.0
>
More information about the igt-dev
mailing list