#!/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
