style: Change include sorter to yield one line at a time
authorAndreas Sandberg <andreas.sandberg@arm.com>
Wed, 30 Mar 2016 14:30:05 +0000 (15:30 +0100)
committerAndreas Sandberg <andreas.sandberg@arm.com>
Wed, 30 Mar 2016 14:30:05 +0000 (15:30 +0100)
The include sorter class normally yields one string per line and
relies on the caller to merge lines into a block of text separated by
newlines. However, there are cases when this isn't true. This makes
diffing using Python's difflib hard. This changeset updates the
include sorter to never do this and always yield one line at a time.

Signed-off-by: Andreas Sandberg <andreas.sandberg@arm.com>
Reviewed-by: Curtis Dunham <curtis.dunham@arm.com>
Reviewed-by: Steve Reinhardt <steve.reinhardt@amd.com>
--HG--
extra : rebase_source : 154c9c7e1ebdd77e09fe5f28d0cfddc9e6c6b1eb

util/sort_includes.py

index 595a648a37f1972b4875477581f1ec96ee580ce4..334d9e29ea21ff1ca3f65065663a8f48dc32ef75 100644 (file)
@@ -204,17 +204,15 @@ class SortIncludes(object):
         return sorted(set(includes))
 
     def dump_includes(self):
-        blocks = []
-        # Create a list of blocks in the prescribed include
-        # order. Each entry in the list is a multi-line string with
-        # multiple includes.
+        includes = []
         for types in self.block_order:
-            block = "\n".join(self.dump_blocks(types))
-            if block:
-                blocks.append(block)
+            block = self.dump_blocks(types)
+            if includes and block:
+                includes.append("")
+            includes += block
 
         self.reset()
-        return "\n\n".join(blocks)
+        return includes
 
     def __call__(self, lines, filename, language):
         self.reset()
@@ -263,7 +261,8 @@ class SortIncludes(object):
 
                 # Output pending includes, a new line between, and the
                 # current l.
-                yield self.dump_includes()
+                for include in self.dump_includes():
+                    yield include
                 yield ''
                 yield line
             else:
@@ -272,9 +271,8 @@ class SortIncludes(object):
 
         # We've reached EOF, so dump any pending includes
         if processing_includes:
-            yield self.dump_includes()
-
-
+            for include in self.dump_includes():
+                yield include
 
 # default language types to try to apply our sorting rules to
 default_languages = frozenset(('C', 'C++', 'isa', 'python', 'scons', 'swig'))