830bf2a04f
The script was running on the current directory. If not in the DTS directory, it would re-format every Python files. A new positional argument is added to specify the directory to check. In most cases, the (new) default value should be enough. While updating argument handling, the usage is printed in case of wrong argument. The directory is also printed in headings, and a last heading is added for the summary part. Signed-off-by: Thomas Monjalon <thomas@monjalon.net> Reviewed-by: Owen Hilyard <ohilyard@iol.unh.edu> Reviewed-by: Juraj Linkeš <juraj.linkes@pantheon.tech> Tested-by: Juraj Linkeš <juraj.linkes@pantheon.tech>
100 lines
2.0 KiB
Bash
Executable File
100 lines
2.0 KiB
Bash
Executable File
#!/bin/sh
|
|
# SPDX-License-Identifier: BSD-3-Clause
|
|
# Copyright(c) 2022 University of New Hampshire
|
|
|
|
usage() {
|
|
echo "Usage: $(basename $0) [options] [directory]"
|
|
echo 'Options:'
|
|
# Get source code comments after getopts arguments and print them both
|
|
grep -E '[a-zA-Z]+\) +#' "$0" | tr -d '#'
|
|
}
|
|
|
|
format=true
|
|
lint=true
|
|
|
|
# Comments after args serve as documentation; must be present
|
|
while getopts "hfl" arg; do
|
|
case $arg in
|
|
h) # Display this message
|
|
echo 'Run formatting and linting programs for DTS.'
|
|
usage
|
|
exit 0
|
|
;;
|
|
f) # Don't run formatters
|
|
format=false
|
|
;;
|
|
l) # Don't run linter
|
|
lint=false
|
|
;;
|
|
?)
|
|
usage
|
|
exit 1
|
|
esac
|
|
done
|
|
shift $(($OPTIND - 1))
|
|
|
|
directory=$(realpath --relative-base=$(pwd) ${1:-$(dirname $0)/../dts})
|
|
cd $directory || exit 1
|
|
|
|
heading() {
|
|
echo $*
|
|
echo $* | sed 's/./-/g' # underline
|
|
}
|
|
|
|
errors=0
|
|
|
|
if $format; then
|
|
if command -v git > /dev/null; then
|
|
if git rev-parse --is-inside-work-tree >&-; then
|
|
heading "Formatting in $directory/"
|
|
if command -v black > /dev/null; then
|
|
echo "Formatting code with black:"
|
|
black .
|
|
else
|
|
echo "black is not installed, not formatting"
|
|
errors=$((errors + 1))
|
|
fi
|
|
if command -v isort > /dev/null; then
|
|
echo "Sorting imports with isort:"
|
|
isort .
|
|
else
|
|
echo "isort is not installed, not sorting imports"
|
|
errors=$((errors + 1))
|
|
fi
|
|
|
|
git update-index --refresh
|
|
retval=$?
|
|
if [ $retval -ne 0 ]; then
|
|
echo 'The "needs update" files have been reformatted.'
|
|
echo 'Please update your commit.'
|
|
fi
|
|
errors=$((errors + retval))
|
|
else
|
|
echo ".git directory not found, not formatting code"
|
|
errors=$((errors + 1))
|
|
fi
|
|
else
|
|
echo "git command not found, not formatting code"
|
|
errors=$((errors + 1))
|
|
fi
|
|
fi
|
|
|
|
if $lint; then
|
|
if $format; then
|
|
echo
|
|
fi
|
|
heading "Linting in $directory/"
|
|
if command -v pylama > /dev/null; then
|
|
pylama .
|
|
errors=$((errors + $?))
|
|
else
|
|
echo "pylama not found, unable to run linter"
|
|
errors=$((errors + 1))
|
|
fi
|
|
fi
|
|
|
|
echo
|
|
heading "Summary for $directory/"
|
|
echo "Found $errors errors"
|
|
exit $errors
|