summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xscripts/contrib/patchtest.sh118
1 files changed, 118 insertions, 0 deletions
diff --git a/scripts/contrib/patchtest.sh b/scripts/contrib/patchtest.sh
new file mode 100755
index 0000000000..7fe566666e
--- /dev/null
+++ b/scripts/contrib/patchtest.sh
@@ -0,0 +1,118 @@
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#
24set -o errexit
25
26# Default values
27pokydir=''
28
29usage() {
30CMD=$(basename $0)
31cat <<EOM
32Usage: $CMD [-h] [-p pokydir]
33 -p pokydir Defaults to current directory
34EOM
35>&2
36 exit 1
37}
38
39function 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
49while 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
66done
67shift $((OPTIND-1))
68
69CDIR="$PWD"
70
71# default pokydir to current directory if user did not specify one
72if [ -z "$pokydir" ]; then
73 pokydir="$CDIR"
74fi
75
76PTENV="$PWD/patchtest"
77PT="$PTENV/patchtest"
78PTOE="$PTENV/patchtest-oe"
79
80if ! which virtualenv > /dev/null; then
81 echo "Install virtualenv before proceeding"
82 exit 1;
83fi
84
85# activate the virtual env
86virtualenv $PTENV --quiet
87source $PTENV/bin/activate
88
89cd $PTENV
90
91# clone or pull
92clone git://git.yoctoproject.org/patchtest $PT
93clone git://git.yoctoproject.org/patchtest-oe $PTOE
94
95# install requirements
96pip install -r $PT/requirements.txt --quiet
97pip install -r $PTOE/requirements.txt --quiet
98
99PATH="$PT:$PT/scripts:$PATH"
100
101# loop through parent to HEAD and execute patchtest on each commit
102for commit in $(git rev-list master..HEAD --reverse)
103do
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 ""
114done
115
116deactivate
117
118cd $CDIR