Commit d66253e4 authored by Anand J's avatar Anand J Committed by Michael Tokarev
Browse files

scripts/clean-includes: added duplicate #include check



Enhance the clean-includes script to optionally check for duplicate #include
entries.

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-dup-head option with
scripts/clean-includes.

Reviewed-by: default avatarThomas Huth <thuth@redhat.com>
Signed-off-by: default avatarAnand J <anand.indukala@gmail.com>
Signed-off-by: default avatarMichael Tokarev <mjt@tls.msk.ru>
parent bdbcb547
Loading
Loading
Loading
Loading
+42 −14
Original line number Diff line number Diff line
@@ -14,15 +14,18 @@
# the top-level directory.

# Usage:
#   clean-includes [--git subjectprefix] file ...
#   clean-includes [--git subjectprefix] [--check-dup-head] file ...
# or
#   clean-includes [--git subjectprefix] --all
#   clean-includes [--git subjectprefix] [--check-dup-head] --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-dup-head is specified, additionally check for duplicate
# header includes.
#
# Using --all will cause clean-includes to run on the whole source
# tree (excluding certain directories which are known not to need
# handling).
@@ -45,11 +48,15 @@


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
while true
do
    case $1 in
    "--git")
         if [ $# -eq 1 ]; then
             echo "--git option requires an argument"
             exit 1
@@ -58,10 +65,23 @@ if [ $# -ne 0 ] && [ "$1" = "--git" ]; then
         GIT=yes
         shift
         shift
fi
         ;;
    "--check-dup-head")
        DUPHEAD=yes
        shift
        ;;
    "--")
        shift
        break
        ;;
    *)
        break
        ;;
   esac
done

if [ $# -eq 0 ]; then
    echo "Usage: clean-includes [--git subjectprefix] [--all | foo.c ...]"
    echo "Usage: clean-includes [--git subjectprefix] [--check-dup-head] [--all | foo.c ...]"
    echo "(modifies the files in place)"
    exit 1
fi
@@ -91,7 +111,6 @@ cat >"$COCCIFILE" <<EOT
)
EOT


for f in "$@"; do
  case "$f" in
    *.inc.c)
@@ -154,6 +173,15 @@ for f in "$@"; do

done

if [ "$DUPHEAD" = "yes" ]; then
    egrep "^[[:space:]]*#[[:space:]]*include" "$@" | tr -d '[:blank:]' \
        | 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