twister: enhance support for board@revision as platform name

This adds an extra layer to match the revision part where this
needs to be of permitted patterns as described in.
cmake/modules/extensions.cmake. Without this, the matching
may produce undesirable results. For example, if there is
a file named qemu_x86_tiny_1.conf, the testplan will create
a board name qemu_x86@tiny.1 (which is definitely not correct).

Signed-off-by: Daniel Leung <daniel.leung@intel.com>
This commit is contained in:
Daniel Leung 2022-08-09 10:48:14 -07:00 committed by Carles Cufí
commit 835680f0e7

View file

@ -371,16 +371,27 @@ class TestPlan:
if not "@" in platform.name: if not "@" in platform.name:
tmp_dir = os.listdir(os.path.dirname(file)) tmp_dir = os.listdir(os.path.dirname(file))
for item in tmp_dir: for item in tmp_dir:
result = re.match(f"{platform.name}_(?P<revision>.*)\\.conf", item) # Need to make sure the revision matches
if result: # the permitted patterns as described in
revision = result.group("revision") # cmake/modules/extensions.cmake.
yaml_file = f"{platform.name}_{revision}.yaml" revision_patterns = ["[A-Z]",
if yaml_file not in tmp_dir: "[0-9]+",
platform_revision = copy.deepcopy(platform) "(0|[1-9][0-9]*)(_[0-9]+)*(_[0-9]+)*"]
revision = revision.replace("_", ".")
platform_revision.name = f"{platform.name}@{revision}" for pattern in revision_patterns:
platform_revision.default = False result = re.match(f"{platform.name}_(?P<revision>{pattern})\\.conf", item)
self.platforms.append(platform_revision) if result:
revision = result.group("revision")
yaml_file = f"{platform.name}_{revision}.yaml"
if yaml_file not in tmp_dir:
platform_revision = copy.deepcopy(platform)
revision = revision.replace("_", ".")
platform_revision.name = f"{platform.name}@{revision}"
platform_revision.default = False
self.platforms.append(platform_revision)
break
except RuntimeError as e: except RuntimeError as e:
logger.error("E: %s: can't load: %s" % (file, e)) logger.error("E: %s: can't load: %s" % (file, e))