xref: /OK3568_Linux_fs/yocto/poky/scripts/contrib/patchtest.sh (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1#!/bin/bash
2#
3# patchtest: Run patchtest on commits starting at master
4#
5# Copyright (c) 2017, Intel Corporation.
6#
7# SPDX-License-Identifier: GPL-2.0-or-later
8#
9
10set -o errexit
11
12# Default values
13pokydir=''
14
15usage() {
16CMD=$(basename $0)
17cat <<EOM
18Usage: $CMD [-h] [-p pokydir]
19  -p pokydir  Defaults to current directory
20EOM
21>&2
22    exit 1
23}
24
25function clone() {
26    local REPOREMOTE=$1
27    local REPODIR=$2
28    if [ ! -d $REPODIR ]; then
29	git clone $REPOREMOTE $REPODIR --quiet
30    else
31	( cd $REPODIR; git pull --quiet )
32    fi
33}
34
35while getopts ":p:h" opt; do
36    case $opt in
37	p)
38	    pokydir=$OPTARG
39	    ;;
40	h)
41	    usage
42	    ;;
43	\?)
44	    echo "Invalid option: -$OPTARG" >&2
45	    usage
46	    ;;
47	:)
48	    echo "Option -$OPTARG requires an argument." >&2
49	    usage
50	    ;;
51    esac
52done
53shift $((OPTIND-1))
54
55CDIR="$PWD"
56
57# default pokydir to current directory if user did not specify one
58if [ -z "$pokydir" ]; then
59    pokydir="$CDIR"
60fi
61
62PTENV="$PWD/patchtest"
63PT="$PTENV/patchtest"
64PTOE="$PTENV/patchtest-oe"
65
66if ! which virtualenv > /dev/null; then
67    echo "Install virtualenv before proceeding"
68    exit 1;
69fi
70
71# activate the virtual env
72virtualenv $PTENV --quiet
73source $PTENV/bin/activate
74
75cd $PTENV
76
77# clone or pull
78clone git://git.yoctoproject.org/patchtest $PT
79clone git://git.yoctoproject.org/patchtest-oe $PTOE
80
81# install requirements
82pip install -r $PT/requirements.txt --quiet
83pip install -r $PTOE/requirements.txt --quiet
84
85PATH="$PT:$PT/scripts:$PATH"
86
87# loop through parent to HEAD and execute patchtest on each commit
88for commit in $(git rev-list master..HEAD --reverse)
89do
90    shortlog="$(git log "$commit^1..$commit" --pretty='%h: %aN: %cd: %s')"
91    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)"
92    if [ -z "$log" ]; then
93	shortlog="$shortlog: OK"
94    else
95	shortlog="$shortlog: FAIL"
96    fi
97    echo "$shortlog"
98    echo "$log" | sed -n -e '/Issue/p' -e '/Suggested fix/p'
99    echo ""
100done
101
102deactivate
103
104cd $CDIR
105