diff mbox series

[swat-tools] Add a parent build column and filter

Message ID 20250620-parent-build-filter-v1-1-4ddd7b3207c8@bootlin.com
State New
Headers show
Series [swat-tools] Add a parent build column and filter | expand

Commit Message

Antonin Godard June 20, 2025, 9:08 a.m. UTC
To be able to filter failures by parent build number, e.g. filter all
failures for a-full build number xyz, add a --parent-build-filter (-p)
option to swattool. The option can be passed multiple times and can be a
regular expression.

It is also displayed by default in show-pending-failures, after the
column "Build" as "Parent".

Signed-off-by: Antonin Godard <antonin.godard@bootlin.com>
---
 swattool/main.py      | 6 ++++++
 swattool/swatbuild.py | 4 +++-
 2 files changed, 9 insertions(+), 1 deletion(-)


---
base-commit: 8930d3e3f71dc3d2a33e8df5ade430deeeb7019b
change-id: 20250620-parent-build-filter-cd0c6ab8d86d

Best regards,
diff mbox series

Patch

diff --git a/swattool/main.py b/swattool/main.py
index a101340..7fe312d 100755
--- a/swattool/main.py
+++ b/swattool/main.py
@@ -73,6 +73,7 @@  def parse_filters(kwargs) -> dict[str, Any]:
         completed_before = kwargs['completed_before'].astimezone()
 
     filters = {'build': regex_filter(kwargs['build_filter']),
+               'parent_build_number': regex_filter(kwargs['parent_build_filter']),
                'test': regex_filter(kwargs['test_filter']),
                'ignore-test': regex_filter(kwargs['ignore_test_filter']),
                'status': statuses,
@@ -184,6 +185,8 @@  failures_list_options = [
                  help="Only show some tests"),
     click.option('--build-filter', '-b', multiple=True,
                  help="Only show some builds"),
+    click.option('--parent-build-filter', '-p', multiple=True,
+                 help="Only show some builds with parent build id"),
     click.option('--owner-filter', '-o', multiple=True,
                  help='Only show some owners ("none" for no owner)'),
     click.option('--ignore-test-filter', '-T', multiple=True,
@@ -223,6 +226,8 @@  def _format_pending_failures(builds: list[swatbuild.Build],
                              ) -> tuple[list[list[str]], list[str]]:
     # Generate a list of formatted builds on failures.
     def format_header(field):
+        if field == swatbuild.Field.PARENT_BUILD_NUMBER:
+            return "Parent"
         if field == swatbuild.Field.STATUS:
             return "Sts"
         return str(field)
@@ -284,6 +289,7 @@  def _show_failures(refresh: str, urlopens: set[str], limit: int,
 
     shown_fields_all = [
         swatbuild.Field.BUILD,
+        swatbuild.Field.PARENT_BUILD_NUMBER,
         swatbuild.Field.STATUS,
         swatbuild.Field.TEST,
         swatbuild.Field.OWNER,
diff --git a/swattool/swatbuild.py b/swattool/swatbuild.py
index 3d3c91c..4ccf32f 100644
--- a/swattool/swatbuild.py
+++ b/swattool/swatbuild.py
@@ -102,6 +102,7 @@  class Field(enum.StrEnum):
     USER_NOTES = 'Notes'
     USER_STATUS = 'New Triage'
     TRIAGE = 'Triage'
+    PARENT_BUILD_NUMBER = 'Parent Build Number'
 
 
 class Failure:
@@ -402,7 +403,8 @@  class Build:
         if not all(simple_match(field) for field in simple_filters):
             return False
 
-        regex_filters = [Field.BUILD, Field.OWNER, Field.TEST]
+        regex_filters = [Field.BUILD, Field.OWNER, Field.TEST,
+                         Field.PARENT_BUILD_NUMBER]
         if not all(regex_match(field) for field in regex_filters):
             return False