180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#!/bin/sh
280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#
380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru# Copyright 2012 Intel Inc.
480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#
580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru# Use of this source code is governed by a BSD-style license that can be
680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru# found in the LICENSE file.
780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#
880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru# This script builds and runs GM in current workspace with another Skia
980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru# revision user specifies, and then compares their results. This script is
1080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru# useful when developers want to know whether their changes would cause any
1180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru# regression.
1280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#
1380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru# As the name of this script tells, it only works for git repository. :)
1480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#
1580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru# Usage:
1680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#   Put this script into where your PATH can find it.
1780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#   And then invoke:
1880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#       $ git skia-verify [sha1-to-compare-default-is-HEAD^]
1980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#   It would delete {before,after,diff} directory under the current directory,
2080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#   so be warned!
2180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#   After it's done, check out diff/index.html for the possible differences.
2280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
2380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
2480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querufunction say() {
2580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    # set color to yellow
2680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    tput setaf 3
2780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    echo $1
2880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    tput sgr0
2980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}
3080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
3180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querufunction warn() {
3280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    # set color to red
3380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    tput setaf 1
3480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    echo $1
3580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    tput sgr0
3680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}
3780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
3880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruREVISION="HEAD^"
3980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
4080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruif [[ $# -eq 1 ]];
4180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruthen
4280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    REVISION="$1"
4380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querufi
4480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
4580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querutput clear
4680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
4780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querusay "Checking sanity..."
4880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querugit diff --exit-code > /dev/null
4980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruif [[ $? -ne 0 ]];
5080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruthen
5180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    warn "You have uncommitted changes!"
5280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    exit 1
5380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querufi
5480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querugit diff --cached --exit-code > /dev/null
5580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruif [[ $? -ne 0 ]];
5680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruthen
5780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    warn "You have uncommitted changes!"
5880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    exit 1
5980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querufi
6080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
6180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querusay "Preparing Directories..."
6280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querurm -rf {before,after,diff}
6380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querumkdir {before,after,diff}
6480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
6580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruPREVIOUS_BRANCH=`git branch --no-color | grep "^*" | awk '{ print $2}'`
6680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
6780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querusay "Running GM for current revision..."
6880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru./gyp_skia
6980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querumake BUILDTYPE=Release -j10
7080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruif [[ $? -ne 0 ]];
7180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruthen
7280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    warn "Failed to compile!"
7380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    exit 1
7480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querufi
7580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru./out/Release/gm -w after
7680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
7780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querusay "Running GM for revision $REVISION..."
7880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru# we run the test in a detached branch
7980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querugit checkout --detach "$REVISION"
8080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru./gyp_skia
8180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querumake BUILDTYPE=Release -j10
8280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruif [[ $? -ne 0 ]];
8380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruthen
8480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    warn "Failed to compile!"
8580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    say "Back to original revision..."
8680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    git checkout "$PREVIOUS_BRANCH"
8780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    exit 1
8880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querufi
8980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru./out/Release/gm -w before
9080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
9180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querusay "Back to original revision..."
9280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querugit checkout "$PREVIOUS_BRANCH"
9380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
9480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querusay "Comparing..."
9580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru./out/Release/skdiff before after diff
96