]> xenbits.xensource.com Git - people/aperard/xen-unstable.git/commitdiff
xen/misra: diff-report.py: Fix UnifiedFormatParser change line registration
authorLuca Fancellu <luca.fancellu@arm.com>
Thu, 20 Jul 2023 08:03:20 +0000 (10:03 +0200)
committerJan Beulich <jbeulich@suse.com>
Thu, 20 Jul 2023 08:03:20 +0000 (10:03 +0200)
Fix the line number on the registration of a 'remove' change type when
consecutive 'remove' changes are registered.

Currently the algorithm registers consecutive 'remove' changes at the same
line it encounter the first one, 'add' changes type are not affected by the
bug.

Fixes: 1d7c45f895b6 ("xen/misra: diff-report.py: add report patching feature")
Signed-off-by: Luca Fancellu <luca.fancellu@arm.com>
Acked-by: Stefano Stabellini <sstabellini@kernel.org>
xen/scripts/xen_analysis/diff_tool/unified_format_parser.py

index 8b3fbc318df76fc7e8f1c46a72ec82934c92cfb9..6c506caeafce059b061f7180d595a0918d136e26 100644 (file)
@@ -144,6 +144,7 @@ class UnifiedFormatParser(object):
         file_linenum = 0
         hunk_a_linemax = 0
         hunk_b_linemax = 0
+        consecutive_remove = 0
         diff_elem = None
         parse_state = ParserState.FIND_DIFF_HEADER
         ChangeMode = ChangeSet.ChangeMode
@@ -210,14 +211,18 @@ class UnifiedFormatParser(object):
                 if (hunk_b_linemax > 0) and line.startswith("+"):
                     diff_elem.add_change(file_linenum, ChangeType.ADD)
                     hunk_b_linemax -= 1
+                    consecutive_remove = 0
                 elif (hunk_a_linemax > 0) and line.startswith("-"):
-                    diff_elem.add_change(file_linenum, ChangeType.REMOVE)
+                    diff_elem.add_change(file_linenum + consecutive_remove,
+                                         ChangeType.REMOVE)
                     hunk_a_linemax -= 1
                     file_linenum -= 1
+                    consecutive_remove += 1
                 elif ((hunk_a_linemax + hunk_b_linemax) > 0) and \
                         line.startswith(" "):
                     hunk_a_linemax -= 1 if (hunk_a_linemax > 0) else 0
                     hunk_b_linemax -= 1 if (hunk_b_linemax > 0) else 0
+                    consecutive_remove = 0
 
                 if (hunk_a_linemax + hunk_b_linemax) <= 0:
                     parse_state = ParserState.FIND_HUNK_OR_DIFF_HEADER