# Copyright 2014 Samsung Electronics Co., Ltd. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. #!/bin/bash GIT_STATUS_NOT_CLEAN_MSG="Git status of current directory is not clean" GIT_STATUS_CONSIDER_CLEAN_MSG="Consider removing all untracked files, locally commiting all changes and running $0 again" trap ctrl_c INT function ctrl_c() { git checkout master >&/dev/null exit 1 } clear if [ "`git status --porcelain 2>&1 | wc -l`" != "0" ] then echo -e "\n \e[1;90m$GIT_STATUS_NOT_CLEAN_MSG:\n" git status echo -e "\n\n $GIT_STATUS_CONSIDER_CLEAN_MSG.\e[0m\n" fi ok_to_push=1 current_branch=`git branch | grep "^* " | cut -d ' ' -f 2` if [ "$current_branch" != "master" ] then echo "Current branch is '$current_branch', not 'master'." exit 1 fi commits_to_push=`git log origin/master..master | grep "^commit [0-9a-f]*$" | awk 'BEGIN { s = ""; } { s = $2" "s; } END { print s; }'` echo $commits_to_push | grep "[^ ]" >& /dev/null status_code=$? if [ $status_code -ne 0 ] then echo "Nothing to push" exit 0 fi echo echo "===== Starting pre-push commit testing series =====" echo echo "Commits list: $commits_to_push" echo for commit_hash in $commits_to_push do git checkout $commit_hash >&/dev/null status_code=$? if [ $status_code -ne 0 ] then echo "git checkout $commit_hash failed" exit 1 fi echo " > Testing $commit_hash" echo -n " > " git log --pretty=format:"%H %s" | grep $commit_hash | grep -o " .*" echo make -s -j precommit 2>&1 status_code=$? if [ $status_code -ne 0 ] then echo "Pre-commit testing for '$commit_hash' failed" echo ok_to_push=0 break fi done git checkout master >&/dev/null echo echo "Pre-commit testing passed successfully. Starting performance and memory benchmarking" echo ./tools/test_stability.sh $((`echo $commits_to_push | wc -w` + 1)) echo echo "Performance and memory benchmarking completed" echo if [ $ok_to_push -eq 1 ] then if [ "`git status --porcelain 2>&1 | wc -l`" == "0" ] then echo "Pushing..." echo git push && echo -e "\n\e[0;32m Pushed successfully\e[0m\n" || echo -e "\n\e[1;33m Push failed\e[0m" exit 0 else echo -e "\e[1;33m $GIT_STATUS_NOT_CLEAN_MSG. $GIT_STATUS_CONSIDER_CLEAN_MSG.\e[0m\n" exit 1 fi else echo -e "\e[1;33mPre-commit testing not passed. Cancelling push.\e[0m" exit 1 fi