From patchwork Fri Nov 6 13:48:52 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ferruh Yigit X-Patchwork-Id: 8766 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id C06277F1C; Fri, 6 Nov 2015 14:49:01 +0100 (CET) Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by dpdk.org (Postfix) with ESMTP id 8D5AC5A64 for ; Fri, 6 Nov 2015 14:48:59 +0100 (CET) Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga101.jf.intel.com with ESMTP; 06 Nov 2015 05:48:58 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.20,252,1444719600"; d="scan'208";a="813394592" Received: from irvmail001.ir.intel.com ([163.33.26.43]) by orsmga001.jf.intel.com with ESMTP; 06 Nov 2015 05:48:57 -0800 Received: from sivswdev02.ir.intel.com (sivswdev02.ir.intel.com [10.237.217.46]) by irvmail001.ir.intel.com (8.14.3/8.13.6/MailSET/Hub) with ESMTP id tA6DmuTY022191; Fri, 6 Nov 2015 13:48:56 GMT Received: from sivswdev02.ir.intel.com (localhost [127.0.0.1]) by sivswdev02.ir.intel.com with ESMTP id tA6DmuH7017918; Fri, 6 Nov 2015 13:48:56 GMT Received: (from fyigit@localhost) by sivswdev02.ir.intel.com with id tA6DmuLC017914; Fri, 6 Nov 2015 13:48:56 GMT From: Ferruh Yigit To: dev@dpdk.org Date: Fri, 6 Nov 2015 13:48:52 +0000 Message-Id: <1446817732-17873-2-git-send-email-ferruh.yigit@intel.com> X-Mailer: git-send-email 1.7.4.1 In-Reply-To: <1446817732-17873-1-git-send-email-ferruh.yigit@intel.com> References: <1446160974-31675-1-git-send-email-ferruh.yigit@intel.com> <1446817732-17873-1-git-send-email-ferruh.yigit@intel.com> Subject: [dpdk-dev] [PATCH] scripts: add git hook scripts for checkpatch and auto doc generation X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" These scripts are to automate some common tasks, scripts needs to be deployed to specific folder to become active. Scripts: post-commit: Triggers after commit complete, re-generates api and guides html documents. "RTE_DOC_OUT" environment variable configures document output folder. Same script can be used on server side with name "post-update", so documentation can auto updated after each push to server. post-merge: Same script as "post-commit", but triggered after git pull pre-commit: Does a checkpatch check before commit started. If script finds any error it will print warnings and fails. If checkpatch fails commit also fails. This guaranties every commit pass checkpatch. Default script is /scripts/checkpatch.pl but this can be changed by RTE_CHECKPATCH environment variable. Also a default list of checkpatch ignore items defined, new ones can be added by IGNORE environment variable. This script can bypassed by commit "--no-verify" argument. Deployment: To make scripts active they need to be in /.git/hooks folder. Alternatively "deploy.sh" script can be used, it simply copies all scripts into proper folder. Script names are significant and shouldn't changed. Signed-off-by: Ferruh Yigit --- scripts/git-hooks/deploy.sh | 19 +++++++++++++++++++ scripts/git-hooks/post-commit | 10 ++++++++++ scripts/git-hooks/post-merge | 10 ++++++++++ scripts/git-hooks/pre-commit | 44 +++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 83 insertions(+) create mode 100755 scripts/git-hooks/deploy.sh create mode 100755 scripts/git-hooks/post-commit create mode 100755 scripts/git-hooks/post-merge create mode 100755 scripts/git-hooks/pre-commit diff --git a/scripts/git-hooks/deploy.sh b/scripts/git-hooks/deploy.sh new file mode 100755 index 0000000..0aa7ffb --- /dev/null +++ b/scripts/git-hooks/deploy.sh @@ -0,0 +1,19 @@ + +NAME=$(basename $0) + +if [ ! -f ${NAME} ]; then + echo "Please run script from folder where script is" + exit 1 +fi + +FILES=$(ls | grep -v ${NAME}) + +TARGET_FOLDER="../../.git/hooks" + +if [ ! -d ${TARGET_FOLDER} ]; then + exit 2 +fi + +for f in ${FILES}; do + cp -i ${f} ${TARGET_FOLDER}/ +done; diff --git a/scripts/git-hooks/post-commit b/scripts/git-hooks/post-commit new file mode 100755 index 0000000..2a76f96 --- /dev/null +++ b/scripts/git-hooks/post-commit @@ -0,0 +1,10 @@ +# +# Create docs after each commit +# + +if [ -n "$RTE_DOC_OUT" ]; then + OUT_CMD="O=${RTE_DOC_OUT}" +fi + +make ${OUT_CMD} doc-guides-html 2>&1 > /dev/null +make ${OUT_CMD} doc-api-html 2>&1 > /dev/null diff --git a/scripts/git-hooks/post-merge b/scripts/git-hooks/post-merge new file mode 100755 index 0000000..2a76f96 --- /dev/null +++ b/scripts/git-hooks/post-merge @@ -0,0 +1,10 @@ +# +# Create docs after each commit +# + +if [ -n "$RTE_DOC_OUT" ]; then + OUT_CMD="O=${RTE_DOC_OUT}" +fi + +make ${OUT_CMD} doc-guides-html 2>&1 > /dev/null +make ${OUT_CMD} doc-api-html 2>&1 > /dev/null diff --git a/scripts/git-hooks/pre-commit b/scripts/git-hooks/pre-commit new file mode 100755 index 0000000..102be73 --- /dev/null +++ b/scripts/git-hooks/pre-commit @@ -0,0 +1,44 @@ +# +# Check patch with checkpatch script before commit +# +# If checkpatch fails, commit fails +# +# Sample command line can be like: +# IGNORE="LINUX_VERSION_CODE,VOLATILE" RTE_CHACKPATCH=/linux/scripts/checkpatch.pl git commit +# + +if [ -z "$RTE_CHECKPATCH" ]; then + RTE_CHECKPATCH=$PWD/scripts/checkpatch.pl +fi + +if [ ! -x ${RTE_CHECKPATCH} ]; then + if [ -f ${RTE_CHECKPATCH} ]; then + echo "checkpatch script is not executable: ${RTE_CHECKPATCH}" + else + echo "checkpatch script not found: ${RTE_CHECKPATCH}" + fi + exit 2 +fi + +IGNORE_DEFAULT="LINUX_VERSION_CODE,\ +FILE_PATH_CHANGES,\ +VOLATILE,\ +PREFER_PACKED,\ +PREFER_ALIGNED,\ +PREFER_PRINTF,\ +PREFER_KERNEL_TYPES,\ +SPLIT_STRING,\ +LINE_SPACING,\ +PARENTHESIS_ALIGNMENT,\ +NETWORKING_BLOCK_COMMENT_STYLE,\ +NEW_TYPEDEFS,\ +COMPLEX_MACRO,\ +COMPARISON_TO_NULL" + +IGNORE_CMD="--ignore ${IGNORE_DEFAULT}" + +if [ -n "$IGNORE" ]; then + IGNORE_CMD="${IGNORE_CMD},${IGNORE}" +fi + +exec git diff --cached | $RTE_CHECKPATCH ${IGNORE_CMD} --no-tree -q -