71 lines
1.7 KiB
Bash
Executable file
71 lines
1.7 KiB
Bash
Executable file
#!/bin/bash
|
|
#
|
|
# Copyright (c) 2015 Google Inc.
|
|
#
|
|
# This is a pre-push hook that does the following before uploading a
|
|
# CL for review:
|
|
# 1) check that python sources have been formatted with pyformat.
|
|
# 2) allows the user to run the unit tests.
|
|
|
|
# This redirects stdin. Make sure to run after stdin has been read.
|
|
run_UnitTests() {
|
|
save_dir=$(pwd)
|
|
status=0
|
|
valid=0
|
|
|
|
# Make sure we can read the stdin from terminal
|
|
exec < /dev/tty
|
|
|
|
while [[ $valid -eq 0 ]] ; do
|
|
read -p "Run unit tests? [y/n] " choice
|
|
case "$choice" in
|
|
n|N ) valid=1 ;;
|
|
y|Y ) valid=1; cd crosperf; ./run_tests.sh; status=$? ;
|
|
cd $save_dir;;
|
|
* ) echo "Must choose y or n."
|
|
esac
|
|
done
|
|
if [[ $status -ne 0 ]]; then
|
|
exit $status
|
|
fi
|
|
}
|
|
|
|
run_PyFormat() {
|
|
pyformat="./bin/tc_pyformat"
|
|
range=$1
|
|
files=$(git show --pretty="format:" --name-only $range)
|
|
for f in $files; do
|
|
[[ $f == *.py ]] || continue
|
|
# File could have been removed as part of the commit.
|
|
[[ -e $f ]] || continue
|
|
diffs=$($pyformat -d $f)
|
|
if [[ $? -ne 0 ]]; then
|
|
echo "Error: $pyformat $f returned with error code $?"
|
|
exit 1
|
|
fi
|
|
if [[ -n "$diffs" ]]; then
|
|
echo -e "Error: $f is not formatted correctly. Run $pyformat -i $f\n"
|
|
echo -e "diffs:\n$diffs\n"
|
|
exit 2
|
|
fi
|
|
done
|
|
}
|
|
|
|
z40=0000000000000000000000000000000000000000
|
|
|
|
while IFS=' ' read local_ref local_sha remote_ref remote_sha; do
|
|
if [[ "$local_sha" != $z40 ]]; then
|
|
if [[ "$remote_sha" == $z40 ]]; then
|
|
# New branch, examine commit on top of branch.
|
|
range="$local_sha"
|
|
else
|
|
# Update to existing branch, examine new commits
|
|
range="$remote_sha..$local_sha"
|
|
fi
|
|
run_PyFormat $range
|
|
fi
|
|
done
|
|
|
|
run_UnitTests
|
|
|
|
exit 0
|