#!/bin/bash # ex:ts=4:sw=4:sts=4:et # -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- # # patchtest: Run patchtest on commits starting at master # # Copyright (c) 2017, Intel Corporation. # All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # set -o errexit # Default values pokydir='' usage() { CMD=$(basename $0) cat <&2 exit 1 } function clone() { local REPOREMOTE=$1 local REPODIR=$2 if [ ! -d $REPODIR ]; then git clone $REPOREMOTE $REPODIR --quiet else ( cd $REPODIR; git pull --quiet ) fi } while getopts ":p:h" opt; do case $opt in p) pokydir=$OPTARG ;; h) usage ;; \?) echo "Invalid option: -$OPTARG" >&2 usage ;; :) echo "Option -$OPTARG requires an argument." >&2 usage ;; esac done shift $((OPTIND-1)) CDIR="$PWD" # default pokydir to current directory if user did not specify one if [ -z "$pokydir" ]; then pokydir="$CDIR" fi PTENV="$PWD/patchtest" PT="$PTENV/patchtest" PTOE="$PTENV/patchtest-oe" if ! which virtualenv > /dev/null; then echo "Install virtualenv before proceeding" exit 1; fi # activate the virtual env virtualenv $PTENV --quiet source $PTENV/bin/activate cd $PTENV # clone or pull clone git://git.yoctoproject.org/patchtest $PT clone git://git.yoctoproject.org/patchtest-oe $PTOE # install requirements pip install -r $PT/requirements.txt --quiet pip install -r $PTOE/requirements.txt --quiet PATH="$PT:$PT/scripts:$PATH" # loop through parent to HEAD and execute patchtest on each commit for commit in $(git rev-list master..HEAD --reverse) do shortlog="$(git log "$commit^1..$commit" --pretty='%h: %aN: %cd: %s')" 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)" if [ -z "$log" ]; then shortlog="$shortlog: OK" else shortlog="$shortlog: FAIL" fi echo "$shortlog" echo "$log" | sed -n -e '/Issue/p' -e '/Suggested fix/p' echo "" done deactivate cd $CDIR