You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
1.7 KiB
71 lines
1.7 KiB
#!/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
|
|
|