Skip to contentSkip to conversation

moveconfig: add a second pass for empty #if/#endif blocks

RFC PATCH New Chris Packham 2 participants 3 messages Jun 4, 2018 – Jun 5, 2018

lore
Share & tools
lore
#0 lore raw

RFC PATCH 1/1 moveconfig: add a second pass for empty #if/#endif blocks

Moveconfig already attempts to remove empty #if/#endif blocks when there is a matching CONFIG_ being moved. Add a second pass which covers files without a match.

---
I've plumbed this in as a second pass because ultimately we may want to make this a separate option. Also I couldn't figure out how to implement this without using re.M so I couldn't make it work in with the line by line parsing of cleanup_one_header().

 tools/moveconfig.py | 27 +++++++++++++++++++++++++--
 1 file changed, 25 insertions(+), 2 deletions(-)
tools/moveconfig.py +25 -2
index caa81ac2ed77..ff70925f9ee4 100755
@@ -545,6 +545,28 @@ def confirm(options, prompt):
 
     return True
 
+def cleanup_empty_blocks(header_path, options):
+    """Clean up empty conditional blocks
+
+    Arguments:
+      header_path: path to the cleaned file.
+      options: option flags.
+    """
+    pattern = r'^\s*#\s*if.*$\n^\s*#\s*endif.*$\n*'
+    with open(header_path) as f:
+        data = f.read()
+
+    new_data = re.sub(pattern, '\n', data, flags=re.M)
+
+    show_diff(data.splitlines(True), new_data.splitlines(True), header_path,
+              options.color)
+
+    if options.dry_run:
+        return
+
+    with open(header_path, 'w') as f:
+        f.write(new_data)
+
 def cleanup_one_header(header_path, patterns, options):
     """Clean regex-matched lines away from a file.
 
@@ -626,8 +648,9 @@ def cleanup_headers(configs, options):
                 continue
             for filename in filenames:
                 if not fnmatch.fnmatch(filename, '*~'):
-                    cleanup_one_header(os.path.join(dirpath, filename),
-                                       patterns, options)
+                    header_path = os.path.join(dirpath, filename)
+                    cleanup_one_header(header_path, patterns, options)
+                    cleanup_empty_blocks(header_path, options)
 
 def cleanup_one_extra_option(defconfig_path, configs, options):
     """Delete config defines in CONFIG_SYS_EXTRA_OPTIONS in one defconfig file.
Signature · 1 line
2.17.0
#1 lore raw

RFC PATCH 1/1 moveconfig: add a second pass for empty #if/#endif blocks

Quoted 7 lines · Chris Packham

Moveconfig already attempts to remove empty #if/#endif blocks when there
is a matching CONFIG_ being moved. Add a second pass which covers files
without a match.

+ pattern = r'^\s*#\s*if.*$\n^\s*#\s*endif.*$\n*'

Any reason not to use re.compile() ?

Quoted 4 lines
tools/moveconfig.py +4 -0
+    with open(header_path) as f:
+        data = f.read()
+
+    new_data = re.sub(pattern, '\n', data, flags=re.M)
Signature · 2 lines
Andy Shevchenko <[email protected]>
Intel Finland Oy
#2 lore raw

RFC PATCH 1/1 moveconfig: add a second pass for empty #if/#endif blocks

Quoted 11 lines · Andy Shevchenko
Quoted 7 lines · Chris Packham

Moveconfig already attempts to remove empty #if/#endif blocks when there
is a matching CONFIG_ being moved. Add a second pass which covers files
without a match.

+ pattern = r'^\s*#\s*if.*$\n^\s*#\s*endif.*$\n*'

Any reason not to use re.compile() ?

Laziness on my part. Will do in v2.

Quoted 8 lines

tools/moveconfig.py def confirm(options, prompt): · line 559

Quoted 4 lines
tools/moveconfig.py +4 -0
+    with open(header_path) as f:
+        data = f.read()
+
+    new_data = re.sub(pattern, '\n', data, flags=re.M)

--
Andy Shevchenko <[email protected]> Intel Finland Oy