[PATCH i-g-t 04/10] scripts/xls_to_doc.py: detect field removal

Mauro Carvalho Chehab mauro.chehab at linux.intel.com
Thu Mar 14 10:29:13 UTC 2024


From: Mauro Carvalho Chehab <mchehab at kernel.org>

Eventually, a field may have been removed. Add support for
detecting it at the write logic.

Signed-off-by: Mauro Carvalho Chehab <mchehab at kernel.org>
---
 scripts/xls_to_doc.py | 36 ++++++++++++++++++++++--------------
 1 file changed, 22 insertions(+), 14 deletions(-)

diff --git a/scripts/xls_to_doc.py b/scripts/xls_to_doc.py
index 5e79a725c1d3..a090dcffe98e 100755
--- a/scripts/xls_to_doc.py
+++ b/scripts/xls_to_doc.py
@@ -37,6 +37,8 @@ class FillTests(TestList):
         # Read current documentation
         TestList.__init__(self, config_path)
 
+        self.orig_doc = self.doc.copy()
+
         self.testname_regex = re.compile(r'^\s*(igt@[^\n\@]+)\@?(\S*)\s*')
         self.key_has_wildcard = re.compile(r'\%?arg\[(\d+)\]')
         self.field_re = re.compile(r"(" + '|'.join(self.field_list.keys()) + r'):\s*(.*)', re.I)
@@ -202,7 +204,8 @@ class FillTests(TestList):
 
                     content[i] = ""
 
-        content.insert(i, f' * {field}: {value}\n')
+        if value != "":
+            content.insert(i, f' * {field}: {value}\n')
 
     def parse_spreadsheet(self, fname, sheets=None):
         """
@@ -265,6 +268,8 @@ class FillTests(TestList):
 
             test_nr = self.tests[testname]["Test"]
 
+            doc_content = self.orig_doc[test_nr]
+
             for subtest, subtest_content in sorted(self.tests[testname]["subtests"].items()):
                 if "line" not in subtest_content:
                     print(f"Warning: didn't find where {subtest} is documented.")
@@ -280,26 +285,29 @@ class FillTests(TestList):
                         print(f"Warning: test {testname}, subtest {subtest} is not documented.")
                     continue
 
-                doc_content = self.doc[test_nr]["subtest"][subtest_nr]
+                doc_content = self.orig_doc[test_nr]["subtest"][subtest_nr]
 
-                # Handling wildcards is not easy. Let's just skip those
-                for field, value in sorted(subtest_content.items()):
-                    if field in ['line', 'subtest_nr']:
+                fields = set(subtest_content.keys()) | set(doc_content.keys())
+
+                for field in sorted(fields):
+                    if field not in self.props:
                         continue
 
                     if args.ignore_lists:
                         if field in self.ignore_fields:
                             continue
 
-                    doc_value = doc_content.get(field)
-                    if doc_value:
-                        if self.key_has_wildcard.search(doc_value):
-                            print(f"Warning: {subtest} field {field} has wildcards. Skipping it.")
-                            continue
-                        if doc_value == value:
-                            if self.verbose > 1:
-                                print(f"{testname}@{subtest} field {field}: Value unchanged: {value}. Ignoring it")
-                            continue
+                    value = subtest_content.get(field, "")
+                    doc_value = doc_content.get(field, "")
+
+                    # Handling wildcards is not easy. Let's just skip those
+                    if self.key_has_wildcard.search(doc_value):
+                        print(f"Warning: {subtest} field {field} has wildcards. Skipping it.")
+                        continue
+                    if doc_value == value:
+                        if self.verbose > 1:
+                            print(f"{testname}@{subtest} field {field}: Value unchanged: {value}. Ignoring it")
+                        continue
 
                     if self.verbose > 0:
                         print(f"Update {testname}@{subtest} field {field} on line {line}:")
-- 
2.43.2



More information about the igt-dev mailing list