citadel/poky/scripts/contrib/patchtest.sh

119 lines
2.8 KiB
Bash
Raw Normal View History

#!/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