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