#!/bin/sh
set -ev

sudo add-apt-repository -y 'ppa:ubuntu-toolchain-r/test'
sudo add-apt-repository -y 'ppa:beineri/opt-qt562-trusty'
sudo add-apt-repository -y 'deb http://apt.llvm.org/precise/ llvm-toolchain-precise-3.8 main'
wget -O - http://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
sudo apt-get update -qq 
sudo apt-get install --allow-unauthenticated -y -qq libx11-dev mesa-common-dev libgl1-mesa-dev qt56base qt56svg qt56x11extras libxcb-keysyms1-dev gdb clang-format-3.8 g++-6

# 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 | 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 CONTRIBUTING.md.   ***";
  echo "*** Thanks!                                     ***";
  echo "***                                             ***";
  echo "*** Commit messages:                            ***";
  echo;
  git log --oneline | tail -n +2 | 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;
  )
