From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by dpdk.org (Postfix) with ESMTP id 4D3AD2B96 for ; Tue, 6 Dec 2016 07:34:50 +0100 (CET) Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga101.fm.intel.com with ESMTP; 05 Dec 2016 22:34:49 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.33,751,1477983600"; d="png'150?scan'150,208,217,150";a="909121201" Received: from fmsmsx106.amr.corp.intel.com ([10.18.124.204]) by orsmga003.jf.intel.com with ESMTP; 05 Dec 2016 22:34:49 -0800 Received: from shsmsx152.ccr.corp.intel.com (10.239.6.52) by FMSMSX106.amr.corp.intel.com (10.18.124.204) with Microsoft SMTP Server (TLS) id 14.3.248.2; Mon, 5 Dec 2016 22:34:48 -0800 Received: from shsmsx101.ccr.corp.intel.com ([169.254.1.239]) by SHSMSX152.ccr.corp.intel.com ([169.254.6.218]) with mapi id 14.03.0248.002; Tue, 6 Dec 2016 14:34:47 +0800 From: "Wei, FangfangX" To: Thomas Monjalon CC: "ci@dpdk.org" , "Xu, Qian Q" , "Liu, Yong" Thread-Topic: [dpdk-ci] [PATCH v4 7/7] tests: add checkpatch Thread-Index: AQHSTvs6nSM4jn92akWd6gn3UCZF/6D6ch+A Date: Tue, 6 Dec 2016 06:34:45 +0000 Message-ID: <067B569323FEB248B5CB480E1954F4346BE93510@SHSMSX101.ccr.corp.intel.com> References: <1480599892-14190-1-git-send-email-thomas.monjalon@6wind.com> <1480944373-10233-1-git-send-email-thomas.monjalon@6wind.com> <1480944373-10233-8-git-send-email-thomas.monjalon@6wind.com> In-Reply-To: <1480944373-10233-8-git-send-email-thomas.monjalon@6wind.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiNWI5OTlkMTYtNDYyYy00M2I2LWI4Y2ItZTI2ZTY4M2ZiYzEyIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX0lDIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE1LjkuNi42IiwiVHJ1c3RlZExhYmVsSGFzaCI6InI4T0NSUWNWRFwvbm4wOVoxTEd4cmEyZExzbEphR090WnpSSjlHXC9NMSt3dz0ifQ== x-ctpclassification: CTP_IC x-originating-ip: [10.239.127.40] Content-Type: multipart/related; boundary="_004_067B569323FEB248B5CB480E1954F4346BE93510SHSMSX101ccrcor_"; type="multipart/alternative" MIME-Version: 1.0 Subject: Re: [dpdk-ci] [PATCH v4 7/7] tests: add checkpatch X-BeenThere: ci@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK CI discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 06 Dec 2016 06:34:52 -0000 --_004_067B569323FEB248B5CB480E1954F4346BE93510SHSMSX101ccrcor_ Content-Type: multipart/alternative; boundary="_000_067B569323FEB248B5CB480E1954F4346BE93510SHSMSX101ccrcor_" --_000_067B569323FEB248B5CB480E1954F4346BE93510SHSMSX101ccrcor_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Hi Thomas, Here are some questiones about your scripts: 1. With the script "send-patch-report.sh", Can I send my perpatch build res= ults to patchwork as checkpatch result in patchwork? Such as, generate the GUI as blow: [cid:image001.png@01D24FCC.01E4A4D0] 2. Must I create /etc/dpdk/ci.config before using your scripts? Because when I run it, it prompted following error message: /root/dpdk-cii/tools/load-ci-config.sh: line 5: /etc/dpdk/ci.config: No = such file or directory /root/dpdk-cii/tools/load-ci-config.sh: line 6: /etc/dpdk/ci.config: No = such file or directory 3. Some confuse about the parameters in "send-patch-report.sh": options: -t title subject of the patch email -f from sender of the patch email -m msgid id of the patch email -p listid mailing list publishing the patch -l label title of the test -s status one of these test results: SUCCESS, WARNING, FA= ILURE -d desc few words to better describe the status For example, about patch http://www.dpdk.org/dev/patchwork/patch/17673/ -t title subject of the patch email Is it "[dpdk-dev,2/8] drivers/common/dpaa2: Sample descriptors for NXP D= PAA2 SEC operations."? -f from sender of the patch email Is it the author who send the patch? In patch 17673, is it akhil.goyal@n= xp.com? -m msgid id of the patch email Is it the message-id of this patch? In patch 17673, is it 20161205125540= .6419-3-akhil.goyal@nxp.com? -p listid mailing list publishing the patch Is it the receiver about this patch? In patch 17673, is it dev@dpdk.org<= mailto:dev@dpdk.org>? I try to send my result with script "send-patch-report.sh" with below comma= nd, but nothing happened. echo "$report" | /root/dpdk-cii/tools/send-patch-report.sh -t "[dpdk-dev,2/= 8] drivers/common/dpaa2: Sample descriptors for NXP DPAA2 SEC operations." = -f "akhil.goyal@nxp.com" -m "20161205125540.6419-3-akhil.goyal@nxp.com" -p = "dev@dpdk.org" -l "Intel Per-patch compilation check" -s "SUCCESS" -d "Comp= ilation OK" Best Regards Fangfang -----Original Message----- From: ci [mailto:ci-bounces@dpdk.org] On Behalf Of Thomas Monjalon Sent: Monday, December 5, 2016 9:26 PM To: ci@dpdk.org Subject: [dpdk-ci] [PATCH v4 7/7] tests: add checkpatch This is the first test in this repository. It runs on dpdk.org and use checkpatch.pl of Linux. Note that the patch is not applied on a git tree for this basic test. Signed-off-by: Thomas Monjalon > --- tests/checkpatch.sh | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++= +++ 1 file changed, 70 insertions(+) create mode 100755 tests/checkpatch.sh diff --git a/tests/checkpatch.sh b/tests/checkpatch.sh new file mode 100755= index 0000000..319da1e --- /dev/null +++ b/tests/checkpatch.sh @@ -0,0 +1,70 @@ +#! /bin/sh -e + +# BSD LICENSE +# +# Copyright 2016 6WIND S.A. +# +# Redistribution and use in source and binary forms, with or without # +modification, are permitted provided that the following conditions # +are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of 6WIND S.A. nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR # +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT # +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT # +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +print_usage () { + cat <<- END_OF_HELP + usage: $(basename $0) dpdk_dir < email + + Check email-formatted patch from stdin. + This test runs checkpatch.pl of Linux via a script in dpdk_dir. + END_OF_HELP +} + +while getopts h arg ; do + case $arg in + h ) print_usage ; exit 0 ;; + ? ) print_usage >&2 ; exit 1 ;; + esac +done +shift $(($OPTIND - 1)) +toolsdir=3D$(dirname $(readlink -m $0))/../tools +dpdkdir=3D$1 + +email=3D/tmp/$(basename $0 sh)$$ +$toolsdir/filter-patch-email.sh >$email trap "rm -f $email" INT EXIT + +eval $($toolsdir/parse-email.sh $email) # normal exit if no valid patch +in the email [ -n "$subject" -a -n "$from" ] || exit 0 + +failed=3Dfalse +report=3D$($dpdkdir/scripts/checkpatches.sh -q $email) || failed=3Dtrue +report=3D$(echo "$report" | sed '1,/^###/d') + +label=3D'checkpatch' +$failed && status=3D'WARNING' || status=3D'SUCCESS' +$failed && desc=3D'coding style issues' || desc=3D'coding style OK' + +echo "$report" | $toolsdir/send-patch-report.sh \ + -t "$subject" -f "$from" -m "$msgid" -p "$listid" \ + -l "$label" -s "$status" -d "$desc" -- 2.7.0 --_000_067B569323FEB248B5CB480E1954F4346BE93510SHSMSX101ccrcor_ Content-Type: text/html; charset="us-ascii" Content-Transfer-Encoding: quoted-printable

Hi Thomas,

 

Here are some questiones about your scripts:=

1. With the script "send-patch-report.sh&quo= t;, Can I send my perpatch build results to patchwork as checkpatch result = in patchwork?

Such as, generate the GUI as blow:

2. Must I create /etc/dpdk/ci.config before using= your scripts?

   Because when I run it, it prompted f= ollowing error message:

   /root/dpdk-cii/tools/load-ci-config.= sh: line 5: /etc/dpdk/ci.config: No such file or directory

   /root/dpdk-cii/tools/load-ci-config.= sh: line 6: /etc/dpdk/ci.config: No such file or directory

 

3. Some confuse about the parameters in "sen= d-patch-report.sh":

         =   options:

        &= nbsp;       -t title    subjec= t of the patch email

        &= nbsp;       -f from     s= ender of the patch email

        &= nbsp;       -m msgid    id of = the patch email

        &= nbsp;       -p listid   mailing lis= t publishing the patch

        &= nbsp;       -l label    title = of the test

        &= nbsp;       -s status   one of thes= e test results: SUCCESS, WARNING, FAILURE

        &= nbsp;       -d desc     f= ew words to better describe the status

 

For example, about patch http://www.dpdk.org/dev/patchwork/patch/17673/

-t title    subject of the patch e= mail

   Is it “[dpdk-dev,2/8] drivers/= common/dpaa2: Sample descriptors for NXP DPAA2 SEC operations.”?=

-f from     sender of the pat= ch email

   Is it the author who send the patch?= In patch 17673, is it akhil.goyal@nxp.com?<= /p>

-m msgid    id of the patch email<= o:p>

   Is it the message-id of this patch? = In patch 17673, is it 20161205125540= .6419-3-akhil.goyal@nxp.com?

-p listid   mailing list publishing the= patch

   Is it the receiver about this patch?= In patch 17673, is it dev@dpdk.org?

 

I try to send my result with script “send-p= atch-report.sh” with below command, but nothing happened.<= /p>

echo "$report" | /root/dpdk-cii/tools/s= end-patch-report.sh -t "[dpdk-dev,2/8] drivers/common/dpaa2: Sample de= scriptors for NXP DPAA2 SEC operations." -f "akhil.goyal@nxp.com&= quot; -m "20161205125540.6419-3-akhil.goyal@nxp.com" -p "dev= @dpdk.org" -l "Intel Per-patch compilation check" -s "SUCCESS" -d= "Compilation OK"

 

 

Best Regards

Fangfang

 

 =

-----Original= Message-----
From: ci [mailto:ci-bounces@dpdk.org] On Behalf Of Thomas Monjalon
Sent: Monday, December 5, 2016 9:26 PM
To: ci@dpdk.org
Subject: [dpdk-ci] [PATCH v4 7/7] tests: add checkpatch

 

This is the first test in this repository.

It runs on dpdk.org and use checkpatch.pl of Linu= x.

 

Note that the patch is not applied on a git tree = for this basic test.

 

Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>

---

tests/checkpatch.sh | 70 +++++= ;+++++++++++++++= ;+++++++++++++++= ;+++++++++++++++= ;+++

1 file changed, 70 insertions(+)

create mode 100755 tests/checkpatch.sh=

 

diff --git a/tests/checkpatch.sh b/tests/checkpat= ch.sh new file mode 100755 index 0000000..319da1e

--- /dev/null

+++ b/tests/checkpatch.sh<= /p>

@@ -0,0 +1,70 @@

+#! /bin/sh -e

+

+# BSD LICENSE

+#

+# Copyright 2016 6WIND S.A.

+#

+# Redistribution and use in source and binar= y forms, with or without #

+modification, are permitted provided that th= e following conditions #

+are met:

+#

+#   * Redistributions of source co= de must retain the above copyright

+#     notice, this list = of conditions and the following disclaimer.

+#   * Redistributions in binary fo= rm must reproduce the above copyright

+#     notice, this list = of conditions and the following disclaimer in

+#     the documentation = and/or other materials provided with the

+#     distribution.=

+#   * Neither the name of 6WIND S.= A. nor the names of its

+#     contributors may b= e used to endorse or promote products derived

+#     from this software= without specific prior written permission.

+#

+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT= HOLDERS AND CONTRIBUTORS #

+"AS IS" AND ANY EXPRESS OR IMPLIED= WARRANTIES, INCLUDING, BUT NOT #

+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHA= NTABILITY AND FITNESS FOR #

+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO E= VENT SHALL THE COPYRIGHT #

+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRE= CT, INDIRECT, INCIDENTAL, #

+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES= (INCLUDING, BUT NOT #

+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS = OR SERVICES; LOSS OF USE, #

+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) = HOWEVER CAUSED AND ON ANY #

+THEORY OF LIABILITY, WHETHER IN CONTRACT, ST= RICT LIABILITY, OR TORT #

+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING = IN ANY WAY OUT OF THE USE #

+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POS= SIBILITY OF SUCH DAMAGE.

+

+print_usage () {

+    cat <<- END_OF_HELP=

+    usage: $(basename $0) dpd= k_dir < email

+

+    Check email-formatted pat= ch from stdin.

+    This test runs checkpatch= .pl of Linux via a script in dpdk_dir.

+    END_OF_HELP

+}

+

+while getopts h arg ; do

+    case $arg in

+       &n= bsp;  h ) print_usage ; exit 0 ;;

+       &n= bsp;  ? ) print_usage >&2 ; exit 1 ;;

+    esac

+done

+shift $(($OPTIND - 1))

+toolsdir=3D$(dirname $(readlink -m $0))/../t= ools

+dpdkdir=3D$1

+

+email=3D/tmp/$(basename $0 sh)$$<= /p>

+$toolsdir/filter-patch-email.sh >$email t= rap "rm -f $email" INT EXIT

+

+eval $($toolsdir/parse-email.sh $email) # no= rmal exit if no valid patch

+in the email [ -n "$subject" -a -n= "$from" ] || exit 0

+

+failed=3Dfalse

+report=3D$($dpdkdir/scripts/checkpatches.sh = -q $email) || failed=3Dtrue

+report=3D$(echo "$report" | sed '1= ,/^###/d')

+

+label=3D'checkpatch'

+$failed && status=3D'WARNING' || sta= tus=3D'SUCCESS'

+$failed && desc=3D'coding style issu= es' || desc=3D'coding style OK'

+

+echo "$report" | $toolsdir/send-pa= tch-report.sh \

+    -t "$subject" -= f "$from" -m "$msgid" -p "$listid" \

+    -l "$label" -s = "$status" -d "$desc"

--

2.7.0

 

--_000_067B569323FEB248B5CB480E1954F4346BE93510SHSMSX101ccrcor_-- --_004_067B569323FEB248B5CB480E1954F4346BE93510SHSMSX101ccrcor_ Content-Type: image/png; name="image001.png" Content-Description: image001.png Content-Disposition: inline; filename="image001.png"; size=7765; creation-date="Tue, 06 Dec 2016 06:34:45 GMT"; modification-date="Tue, 06 Dec 2016 06:34:45 GMT" Content-ID: Content-Transfer-Encoding: base64 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 awAAAABJRU5ErkJggg== --_004_067B569323FEB248B5CB480E1954F4346BE93510SHSMSX101ccrcor_--