Skip to content

Commit

Permalink
scripts/clean-includes: added duplicate #include check
Browse files Browse the repository at this point in the history
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: Thomas Huth <[email protected]>
Signed-off-by: Anand J <[email protected]>
Signed-off-by: Michael Tokarev <[email protected]>
  • Loading branch information
anandj91 authored and Michael Tokarev committed Oct 28, 2016
1 parent bdbcb54 commit d66253e
Showing 1 changed file with 42 additions and 14 deletions.
56 changes: 42 additions & 14 deletions scripts/clean-includes
Original file line number Diff line number Diff line change
Expand Up @@ -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).
Expand All @@ -45,23 +48,40 @@


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-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
Expand Down Expand Up @@ -91,7 +111,6 @@ cat >"$COCCIFILE" <<EOT
)
EOT


for f in "$@"; do
case "$f" in
*.inc.c)
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit d66253e

Please sign in to comment.