On Tue, Oct 18, 2016 at 4:03 PM, Anand J <anand.induk...@gmail.com> wrote:

> Added script to check duplicate #include entries. This check will scan
> and print the files in which duplicate #include entries are present.
>
> Script might output false positive entries as well. Such entries should
> not be removed. So if it finds any duplicate entries script will
> terminate with an exit status 1. Then each and every file should be
> checked manually and corrected if necessary.
>
> In order to enable the check use --check-duphead option with
> script/clean-includes.
>
> Signed-off-by: Anand J <anand.induk...@gmail.com>
> ---
>  scripts/clean-includes | 50 ++++++++++++++++++++++++++++++
> +++++++-------------
>  1 file changed, 37 insertions(+), 13 deletions(-)
>
> diff --git a/scripts/clean-includes b/scripts/clean-includes
> index 4412a55..76dd0e4 100755
> --- a/scripts/clean-includes
> +++ b/scripts/clean-includes
> @@ -14,15 +14,18 @@
>  # the top-level directory.
>
>  # Usage:
> -#   clean-includes [--git subjectprefix] file ...
> +#   clean-includes [--git subjectprefix] [--check-duphead] file ...
>  # or
> -#   clean-includes [--git subjectprefix] --all
> +#   clean-includes [--git subjectprefix] [--check-duphead] --all
>  #
>  # If the --git subjectprefix option is given, then after making
>  # the changes to the files this script will create a git commit
>  # with the subject line "subjectprefix: Clean up includes"
>  # and a boilerplate commit message.
>  #
> +# If --check-duphead option is used, then check for duplicate
> +# header files will be enabled.
> +#
>  # Using --all will cause clean-includes to run on the whole source
>  # tree (excluding certain directories which are known not to need
>  # handling).
> @@ -45,23 +48,36 @@
>
>
>  GIT=no
> +DUPHEAD=no
>
>  # Extended regular expression defining files to ignore when using --all
>  XDIRREGEX='^(tests/tcg|tests/multiboot|pc-bios|disas/libvixl)'
>
> -if [ $# -ne 0 ] && [ "$1" = "--git" ]; then
> -    if [ $# -eq 1 ]; then
> -        echo "--git option requires an argument"
> -        exit 1
> -    fi
> -    GITSUBJ="$2"
> -    GIT=yes
> -    shift
> -    shift
> -fi
> +while true
> +do
> +    case $1 in
> +    "--git")
> +         if [ $# -eq 1 ]; then
> +             echo "--git option requires an argument"
> +             exit 1
> +         fi
> +         GITSUBJ="$2"
> +         GIT=yes
> +         shift
> +         shift
> +         ;;
> +    "--check-duphead")
> +        DUPHEAD=yes
> +        shift
> +        ;;
> +    *)
> +        break
> +        ;;
> +   esac
> +done
>
>  if [ $# -eq 0 ]; then
> -    echo "Usage: clean-includes [--git subjectprefix] [--all | foo.c ...]"
> +    echo "Usage: clean-includes [--git subjectprefix] [--check-duphead]
> [--all | foo.c ...]"
>      echo "(modifies the files in place)"
>      exit 1
>  fi
> @@ -154,6 +170,14 @@ for f in "$@"; do
>
>  done
>
> +if [ "$DUPHEAD" = "yes" ]; then
> +    grep "^#include" $@ | sort | uniq -c | awk '{if ($1 > 1) print $0}'
> +    if [ $? -eq 0 ]; then
> +        echo "Found duplicate header file includes. Please check the
> above files manually."
> +        exit 1
> +    fi
> +fi
> +
>  if [ "$GIT" = "yes" ]; then
>      git add -- "$@"
>      git commit --signoff -F - <<EOF
> --
> 2.7.4
>
>

Reply via email to