| Brad Bishop | d7bf8c1 | 2018-02-25 22:55:05 -0500 | [diff] [blame] | 1 | #!/bin/bash | 
 | 2 | # ex:ts=4:sw=4:sts=4:et | 
 | 3 | # -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- | 
 | 4 | # | 
 | 5 | # patchtest: Run patchtest on commits starting at master | 
 | 6 | # | 
 | 7 | # Copyright (c) 2017, Intel Corporation. | 
 | 8 | # All rights reserved. | 
 | 9 | # | 
 | 10 | # This program is free software; you can redistribute it and/or modify | 
 | 11 | # it under the terms of the GNU General Public License as published by | 
 | 12 | # the Free Software Foundation; either version 2 of the License, or | 
 | 13 | # (at your option) any later version. | 
 | 14 | # | 
 | 15 | # This program is distributed in the hope that it will be useful, | 
 | 16 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | 
 | 17 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
 | 18 | # GNU General Public License for more details. | 
 | 19 | # | 
 | 20 | # You should have received a copy of the GNU General Public License | 
 | 21 | # along with this program; if not, write to the Free Software | 
 | 22 | # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | 
 | 23 | # | 
 | 24 | set -o errexit | 
 | 25 |  | 
 | 26 | # Default values | 
 | 27 | pokydir='' | 
 | 28 |  | 
 | 29 | usage() { | 
 | 30 | CMD=$(basename $0) | 
 | 31 | cat <<EOM | 
 | 32 | Usage: $CMD [-h] [-p pokydir] | 
 | 33 |   -p pokydir  Defaults to current directory | 
 | 34 | EOM | 
 | 35 | >&2 | 
 | 36 |     exit 1 | 
 | 37 | } | 
 | 38 |  | 
 | 39 | function clone() { | 
 | 40 |     local REPOREMOTE=$1 | 
 | 41 |     local REPODIR=$2 | 
 | 42 |     if [ ! -d $REPODIR ]; then | 
 | 43 | 	git clone $REPOREMOTE $REPODIR --quiet | 
 | 44 |     else | 
 | 45 | 	( cd $REPODIR; git pull --quiet ) | 
 | 46 |     fi | 
 | 47 | } | 
 | 48 |  | 
 | 49 | while getopts ":p:h" opt; do | 
 | 50 |     case $opt in | 
 | 51 | 	p) | 
 | 52 | 	    pokydir=$OPTARG | 
 | 53 | 	    ;; | 
 | 54 | 	h) | 
 | 55 | 	    usage | 
 | 56 | 	    ;; | 
 | 57 | 	\?) | 
 | 58 | 	    echo "Invalid option: -$OPTARG" >&2 | 
 | 59 | 	    usage | 
 | 60 | 	    ;; | 
 | 61 | 	:) | 
 | 62 | 	    echo "Option -$OPTARG requires an argument." >&2 | 
 | 63 | 	    usage | 
 | 64 | 	    ;; | 
 | 65 |     esac | 
 | 66 | done | 
 | 67 | shift $((OPTIND-1)) | 
 | 68 |  | 
 | 69 | CDIR="$PWD" | 
 | 70 |  | 
 | 71 | # default pokydir to current directory if user did not specify one | 
 | 72 | if [ -z "$pokydir" ]; then | 
 | 73 |     pokydir="$CDIR" | 
 | 74 | fi | 
 | 75 |  | 
 | 76 | PTENV="$PWD/patchtest" | 
 | 77 | PT="$PTENV/patchtest" | 
 | 78 | PTOE="$PTENV/patchtest-oe" | 
 | 79 |  | 
 | 80 | if ! which virtualenv > /dev/null; then | 
 | 81 |     echo "Install virtualenv before proceeding" | 
 | 82 |     exit 1; | 
 | 83 | fi | 
 | 84 |  | 
 | 85 | # activate the virtual env | 
 | 86 | virtualenv $PTENV --quiet | 
 | 87 | source $PTENV/bin/activate | 
 | 88 |  | 
 | 89 | cd $PTENV | 
 | 90 |  | 
 | 91 | # clone or pull | 
 | 92 | clone git://git.yoctoproject.org/patchtest $PT | 
 | 93 | clone git://git.yoctoproject.org/patchtest-oe $PTOE | 
 | 94 |  | 
 | 95 | # install requirements | 
 | 96 | pip install -r $PT/requirements.txt --quiet | 
 | 97 | pip install -r $PTOE/requirements.txt --quiet | 
 | 98 |  | 
 | 99 | PATH="$PT:$PT/scripts:$PATH" | 
 | 100 |  | 
 | 101 | # loop through parent to HEAD and execute patchtest on each commit | 
 | 102 | for commit in $(git rev-list master..HEAD --reverse) | 
 | 103 | do | 
 | 104 |     shortlog="$(git log "$commit^1..$commit" --pretty='%h: %aN: %cd: %s')" | 
 | 105 |     log="$(git format-patch "$commit^1..$commit" --stdout | patchtest - -r $pokydir -s $PTOE/tests --base-commit $commit^1 --json 2>/dev/null | create-summary --fail --only-results)" | 
 | 106 |     if [ -z "$log" ]; then | 
 | 107 | 	shortlog="$shortlog: OK" | 
 | 108 |     else | 
 | 109 | 	shortlog="$shortlog: FAIL" | 
 | 110 |     fi | 
 | 111 |     echo "$shortlog" | 
 | 112 |     echo "$log" | sed -n -e '/Issue/p' -e '/Suggested fix/p' | 
 | 113 |     echo "" | 
 | 114 | done | 
 | 115 |  | 
 | 116 | deactivate | 
 | 117 |  | 
 | 118 | cd $CDIR |