[U-Boot] [PATCH v3] moveconfig: add a second pass for empty #if/#endif blocks

Masahiro Yamada yamada.masahiro at socionext.com
Wed Jan 30 08:55:53 UTC 2019


On Wed, Jan 30, 2019 at 4:23 PM Chris Packham <judge.packham at gmail.com> wrote:
>
> 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.
>
> Signed-off-by: Chris Packham <judge.packham at gmail.com>
> ---
> This was previously submitted as
> http://patchwork.ozlabs.org/patch/924901/ there still seems to be cases
> of #if/#endif left over from Kconfig migrations so perhaps this is still
> needed/wanted.
>
> 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().


This seems useful to find leftover code
regardless of the CONFIG options you are moving.

One drawback is, it may fold unrelated cleanups.

Maybe, it would be useful to add a separate option to turn on this feature,
or make it into a separate tool.




> Changes in v3:
> - drop rfc
>
> Changes in v2:
> - use re.compile
>
>  tools/moveconfig.py | 27 +++++++++++++++++++++++++--
>  1 file changed, 25 insertions(+), 2 deletions(-)
>
> diff --git a/tools/moveconfig.py b/tools/moveconfig.py
> index caa81ac2ed77..1a214c560546 100755
> --- a/tools/moveconfig.py
> +++ b/tools/moveconfig.py
> @@ -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 = re.compile(r'^\s*#\s*if.*$\n^\s*#\s*endif.*$\n*', flags=re.M)
> +    with open(header_path) as f:
> +        data = f.read()
> +
> +    new_data = pattern.sub('\n', data)
> +
> +    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.
> --
> 2.20.1
>
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> https://lists.denx.de/listinfo/u-boot



-- 
Best Regards
Masahiro Yamada


More information about the U-Boot mailing list