From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id A6C79A00C5; Tue, 19 Jul 2022 14:01:43 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 4FD1740A8B; Tue, 19 Jul 2022 14:01:43 +0200 (CEST) Received: from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com [67.231.156.173]) by mails.dpdk.org (Postfix) with ESMTP id 4861A40A8A for ; Tue, 19 Jul 2022 14:01:42 +0200 (CEST) Received: from pps.filterd (m0045851.ppops.net [127.0.0.1]) by mx0b-0016f401.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 26J9c8YL016104; Tue, 19 Jul 2022 05:01:41 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=pfpt0220; bh=CpvrFq5aIio4tcvv6/jpXXeiCKD6ELNw1280kurs0ck=; b=XsV+RVG6Vtz/um34I50kQQFS51kV7hAqKN/S7bfzyw8CksdDjbcnYXmNUkuoy0+DP/Xj 5neLY0yAVen63o6xHAEDxU1neKaC/Z6czPivoWc69UZkLbDMR3V6dWvT6RTVMSuL0dwm jqd6I7kxWeQv4bYY5zxHzweBNFt+lCtQLhPie+FEeXMu2Mhzl23CBz5k2G+5rwR4JxT/ ah5PA9/hkS71bsQNuLef9ZJiycS0wwyoyPsL9y7mc5wmwD7mOUMiXZ2goNLv2hl9o91J D5kAkHKWYEmYTtQxFOSVLtmnuk/pbFI8/Eoi5LleqCjLl9tBeDueNVtTIEpq4G6jWK0+ 2Q== Received: from dc5-exch01.marvell.com ([199.233.59.181]) by mx0b-0016f401.pphosted.com (PPS) with ESMTPS id 3hbvumtbd1-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Tue, 19 Jul 2022 05:01:41 -0700 Received: from DC5-EXCH02.marvell.com (10.69.176.39) by DC5-EXCH01.marvell.com (10.69.176.38) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Tue, 19 Jul 2022 05:01:39 -0700 Received: from maili.marvell.com (10.69.176.80) by DC5-EXCH02.marvell.com (10.69.176.39) with Microsoft SMTP Server id 15.0.1497.18 via Frontend Transport; Tue, 19 Jul 2022 05:01:39 -0700 Received: from localhost.localdomain (unknown [10.28.34.39]) by maili.marvell.com (Postfix) with ESMTP id 91C063F7050; Tue, 19 Jul 2022 05:01:37 -0700 (PDT) From: To: CC: , , Subject: [PATCH v3] devtools: ensure proper tag sequence Date: Tue, 19 Jul 2022 14:01:23 +0200 Message-ID: <20220719120123.3786204-1-jpalider@marvell.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220613222143.1436424-1-jpalider@marvell.com> References: <20220613222143.1436424-1-jpalider@marvell.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-Proofpoint-GUID: pASVaDozOchUEL9mxjQft4pN9ZSpGBqH X-Proofpoint-ORIG-GUID: pASVaDozOchUEL9mxjQft4pN9ZSpGBqH X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-07-18_22,2022-07-19_01,2022-06-22_01 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org From: Jakub Palider This change to log checking procedure ensures that certain tags are in proper order. The order of tags is as follows: * Coverity issue * Bugzilla ID * Fixes * Cc * * Suggested-by * Reported-by + Signed-off-by * Acked-by * Reviewed-by * Tested-by where: * => 0 or more than one instance possible + => more than once instance possible In order to satisfy the above requirements an extra check is performed for obligatory tags. v3: * restored some tags under check * defined chronological order after Signed-off v2: * narrowed down the tags under check Signed-off-by: Jakub Palider --- devtools/check-git-log.sh | 56 +++++++++++++++++++++++++++++ doc/guides/contributing/patches.rst | 28 +++++++++++++++ 2 files changed, 84 insertions(+) diff --git a/devtools/check-git-log.sh b/devtools/check-git-log.sh index 23c6a7d9bb..9b98207f3a 100755 --- a/devtools/check-git-log.sh +++ b/devtools/check-git-log.sh @@ -54,6 +54,7 @@ fixes=$(git log --format='%h %s' --reverse $range | grep -i ': *fix' | cut -d' ' stablefixes=$($selfdir/git-log-fixes.sh $range | sed '/(N\/A)$/d' | cut -d' ' -f2) tags=$(git log --format='%b' --reverse $range | grep -i -e 'by *:' -e 'fix.*:') bytag='\(Reported\|Suggested\|Signed-off\|Acked\|Reviewed\|Tested\)-by:' +exttag='Coverity issue:\|Bugzilla ID:\|Fixes:\|Cc:' failure=false @@ -203,6 +204,61 @@ done) [ -z "$bad" ] || { printf "Is it candidate for Cc: stable@dpdk.org backport?\n$bad\n"\ && failure=true;} +# check tag sequence +bad=$(for commit in $commits; do + body=$(git log --format='%b' -1 $commit) + echo "$body" |\ + grep -o -e "$exttag\|^[[:blank:]]*$\|$bytag" | \ + # retrieve tags only + cut -f1 -d":" |\ + # it is okay to have several tags of the same type but for processing + # we need to squash them + uniq |\ + # make sure the tags are in the proper order as presented in SEQ + awk -v cmt="$commit" 'BEGIN{ + SEQ[0] = "Coverity issue"; + SEQ[1] = "Bugzilla ID"; + SEQ[2] = "Fixes"; + SEQ[3] = "Cc"; + SEQ[4] = "^$"; + SEQ[5] = "Suggested-by"; + SEQ[6] = "Reported-by"; + SEQ[7] = "Signed-off-by"; + SEQ[8] = "Acked-by"; + SEQ[9] = "Reviewed-by"; + SEQ[10] = "Tested-by"; + latest = 0; + chronological = 0; + } + { + for (seq = 0; seq < length(SEQ); seq++) { + if (chronological == 1) + continue; + if (match($0, SEQ[seq])) { + if (seq < latest) { + print "\tCommit " cmt " (" $0 ":)"; + break; + } else { + latest = seq; + } + } + } + if (match($0, "Signed-off-by")) + chronological = 1; + }' +done) +[ -z "$bad" ] || { printf "Wrong tag order: \n$bad\n"\ + && failure=true;} + +# check required tag +bad=$(for commit in $commits; do + body=$(git log --format='%b' -1 $commit) + echo $body | grep -q "Signed-off-by:" \ + || echo "\tCommit" $commit "(Signed-off-by:)" + done) +[ -z "$bad" ] || { printf "Missing obligatory tag: \n$bad\n"\ + && failure=true;} + total=$(echo "$commits" | wc -l) if $failure ; then printf "\nInvalid patch(es) found - checked $total patch" diff --git a/doc/guides/contributing/patches.rst b/doc/guides/contributing/patches.rst index bebcaf3925..996089f2eb 100644 --- a/doc/guides/contributing/patches.rst +++ b/doc/guides/contributing/patches.rst @@ -360,6 +360,34 @@ Where ``NNNNN`` is patchwork ID for patch or series:: --- Depends-on: series-10000 ("Title of the series") +Tag order +~~~~~~~~~ + +There is a pattern indicating how certain tags should relate to each other. + +Example of proper tag sequence:: + + Coverity issue: + Bugzilla ID: + Fixes: + Cc: + + Suggested-by: + Reported-by: + Signed-off-by: + Acked-by: + Reviewed-by: + Tested-by: + +Between first and second tag section there is and empty line. + +While ``Signed-off-by:`` is an obligatory tag and must exists in each commit, +all other tags are optional. Any tag, as long as it is in proper location +to other adjacent tags (if present), may occur multiple times. + +Other tags after the first occurrence of ``Signed-off-by:`` shall be laid out in +a chronological order. + Creating Patches ---------------- -- 2.25.1