#!/bin/sh
set -ev

wget -O - http://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
sudo add-apt-repository -y 'deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-3.8 main'
sudo apt-get update -qq 
sudo apt-get install --allow-unauthenticated -y -qq libx11-dev mesa-common-dev libgl1-mesa-dev qtbase5-dev libqt5svg5-dev libqt5x11extras5-dev libxcb-keysyms1-dev gdb clang-format-3.8 clang++-3.8 g++-5

# check last 100 commits are all correctly sized. First line must be no
# longer than 72 characters, so it fits in git log and github history
# We don't check the first commit since in pull requests this is an invisible 'merge' commit.
if git log --oneline | tail -n +2 | head -n 100 | cut -d ' ' -f2- | grep -q '.\{73\}'; then
  echo "***************************************************";
  echo "*** Some of your commit messages summaries are  ***";
  echo "*** longer than 72 characters.                  ***";
  echo "*** Please shorten them so they fit <= 72 chars ***";
  echo "*** on the first line, with a longer summary in ***";
  echo "*** the body after a blank line.                ***";
  echo "*** For more information see                    ***";
  echo "*** docs/CONTRIBUTING.md.                       ***";
  echo "*** Thanks!                                     ***";
  echo "***                                             ***";
  echo "*** Commit messages:                            ***";
  echo;
  git log --oneline | tail -n +2 | head -n 100 | cut -d ' ' -f2- | grep '.\{73\}'
  echo;
  echo "***************************************************";
  exit 1;
fi

# check formatting matches clang-format-3.8. Since newer versions can have
# changes in formatting even without any rule changes, we have to fix on a
# single version.
. ./util/clang_format_all.sh

git clean -f

# Print any diff here, so the error message below is the last thing
git diff

git diff --quiet || (
  echo "***************************************************";
  echo "*** The code is not clean against clang-format  ***";
  echo "*** Please run clang-format-3.8 and fix the     ***";
  echo "*** differences then rebase/squash them into    ***";
  echo "*** the relevant commits. Do not add a commit   ***";
  echo "*** for just formatting fixes. Thanks!          ***";
  echo "***************************************************";
  exit 1;
  )
