blob: 219d891f32d180db431f4ec73ddb41b3affa0424 [file] [log] [blame] [edit]
#!/bin/bash
usage() {
if [ -n "$1" ]; then
echo "$1" > /dev/stderr;
fi
echo "Usage: $0 -y <yapf_exec> -p lint_program<> [-l|-c|-f]" > /dev/stderr
exit 1
}
run() {
eval $1
res=$?
if [[ $res != 0 ]]; then
echo $2 > /dev/stderr
fi
return $res
}
lint_file() {
cmd=$1
file=$2
run "$cmd $file" "lint failed on $file"
return $?
}
check_file() {
cmd=$1
file=$2
run "$cmd -d $file > /dev/null" "yapf needs to reformat $file"
return $?
}
format_file() {
cmd=$1
file=$2
run "$cmd -i $file" "yapf failed to format $file"
return $?
}
do_check=0
do_format=0
do_lint=0
yapf_exec=yapf
lint_exec=pyflakes
while getopts "lcfy:p:" opt; do
case $opt in
c)
do_check=1;
;;
f)
do_format=1;
;;
y)
yapf_exec=$OPTARG
;;
p)
lint_exec=$OPTARG
;;
l)
do_lint=1;
;;
*)
usage
;;
esac
done
shift $((OPTIND - 1))
if [ -n "$*" ]; then
usage "leftover args: '$*'"
fi
if (( do_check + do_format + do_lint != 1 )); then
usage "Provide exactly one option"
fi
ret=0
# using git will only check and format files in the git index. This avoids
# formatting temporary files and files in submodules
TOP_DIR=`git rev-parse --show-toplevel`
for file in $(git ls-tree --full-tree --name-only -r HEAD | grep "\.py$"); do
if [ $do_check != 0 ]; then
check_file $yapf_exec $TOP_DIR/$file;
res=$?
elif [ $do_format != 0 ]; then
format_file "$yapf_exec" $TOP_DIR/$file;
res=$?
elif [ $do_lint != 0 ]; then
lint_file "$lint_exec" $TOP_DIR/$file;
res=$?
fi;
if [[ $res != 0 ]]; then
((ret++))
fi
done
exit $ret