2020-04-02 19:10:02 -04:00
|
|
|
#!/usr/bin/env bash
|
2018-05-28 14:01:43 -04:00
|
|
|
# This script finds executable files in the repository, excluding some directories,
|
|
|
|
# then prints the list of all files which are not in executable-list.txt.
|
|
|
|
# Returns with error if this list is non-empty.
|
2019-04-17 03:33:36 -04:00
|
|
|
# Also checks if executable-list.txt is sorted and has no duplicates.
|
|
|
|
|
|
|
|
set -o errexit # Exit if command failed.
|
|
|
|
set -o pipefail # Exit if pipe failed.
|
|
|
|
set -o nounset # Exit if variable not set.
|
|
|
|
|
2018-05-28 14:01:43 -04:00
|
|
|
|
|
|
|
cd $IDF_PATH
|
|
|
|
|
2019-04-17 03:33:36 -04:00
|
|
|
in_list=tools/ci/executable-list.txt
|
2018-05-28 14:01:43 -04:00
|
|
|
tmp_list=$(mktemp)
|
|
|
|
out_list=$(mktemp)
|
|
|
|
|
|
|
|
# build exclude pattern like '-o -path ./components/component/submodule' for each submodule
|
|
|
|
submodule_excludes=$(git config --file .gitmodules --get-regexp path | awk '{ print "-o -path ./" $2 }')
|
|
|
|
|
|
|
|
# figure out which flag to use when searching for executable files
|
|
|
|
if [ "$(uname -s)" == "Darwin" ]; then
|
|
|
|
perm_flag="-perm +111"
|
|
|
|
else
|
|
|
|
perm_flag="-executable"
|
|
|
|
fi
|
|
|
|
|
|
|
|
find . -type d \( \
|
|
|
|
-path ./.git \
|
|
|
|
-o -name build \
|
|
|
|
-o -name builds \
|
|
|
|
$submodule_excludes \
|
|
|
|
\) -prune -o -type f $perm_flag -print \
|
|
|
|
| sed "s|^\./||" > $tmp_list
|
|
|
|
|
|
|
|
# this looks for lines present in tmp_list but not in executable-list.txt
|
2019-04-17 03:33:36 -04:00
|
|
|
comm -13 <(cat $in_list | sed -n "/^#/!p" | sort) <(sort $tmp_list) > $out_list
|
2018-05-28 14:01:43 -04:00
|
|
|
|
|
|
|
ret=0
|
|
|
|
if [ -s $out_list ]; then
|
|
|
|
ret=1
|
|
|
|
echo "Error: the following file(s) have executable flag set:"
|
|
|
|
echo ""
|
|
|
|
cat $out_list
|
|
|
|
echo ""
|
|
|
|
echo "If any files need to be executable (usually, scripts), add them to tools/ci/executable-list.txt"
|
|
|
|
echo "Make the rest of the files non-executable using 'chmod -x <filename>'."
|
|
|
|
echo "On Windows, use 'git update-index --chmod=-x filename' instead."
|
|
|
|
echo ""
|
|
|
|
fi
|
|
|
|
|
2019-04-17 03:33:36 -04:00
|
|
|
if ! diff <(cat $in_list | sed -n "/^#/!p" | sort | uniq) $in_list; then
|
|
|
|
echo "$in_list is not sorted or has duplicate entries"
|
|
|
|
ret=2
|
|
|
|
fi
|
|
|
|
|
|
|
|
for filename in $(cat $in_list | sed -n "/^#/!p"); do
|
|
|
|
if [ ! -f "$filename" ]; then
|
|
|
|
echo "Warning: file '$filename' is present in '$in_list', but does not exist"
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
2018-05-28 14:01:43 -04:00
|
|
|
rm $tmp_list
|
|
|
|
rm $out_list
|
|
|
|
|
|
|
|
exit $ret
|