|
@@ -0,0 +1,118 @@
|
|
|
+#!/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 <<EOM
|
|
|
+Usage: $CMD [-h] [-p pokydir]
|
|
|
+ -p pokydir Defaults to current directory
|
|
|
+EOM
|
|
|
+>&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
|