119 lines
2.8 KiB
Bash
Executable File
119 lines
2.8 KiB
Bash
Executable File
#!/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
|