script: add new check rules in merge_pre_check.pl script [1/1]

PD#174488

Problem:
some new rules should be added to the check scripts

Solution:
call the git_msg_check.sh script directly

Verify:
p212

Change-Id: I67c6515038ca2817236e63b4c9f4239583a20613
Signed-off-by: Jianxiong Pan <jianxiong.pan@amlogic.com>
This commit is contained in:
Jianxiong Pan
2018-10-15 16:14:49 +08:00
committed by Jianxin Pan
parent a9f42ab19f
commit 57728014ee
2 changed files with 277 additions and 0 deletions

272
scripts/amlogic/git_msg_check.sh Executable file
View File

@@ -0,0 +1,272 @@
#!/bin/bash
#
# git msg checker
#
# author: xiaobo.gu@amlogic.com
#
# 2018.04.20: init version
# 2018.04.30: proj list and some detail update
# 2018.10.11: BL parser use same one as all other gits, seperate BUGZILLA/JIRA parser
#
#
#
# variables
declare -i IS_BOOTLOADER_GIT=0
declare -i MSG_LENGTH_LIMIT=80
declare -i MSG_CHECK_RESULT=0
declare CHECK_COMMIT_ID=""
declare CHECK_PROJECT=""
declare CHECK_LOG_FILE=""
declare CHECK_PATCH=""
# add all pre check git repository here
declare -a BOOTLOADER_GIT=("bootrom/ap" \
"bootrom/sp" \
"bootrom/scp" \
"bootloader/spl" \
"firmware/scp" \
"ARM-software/arm-trusted-firmware" \
"OP-TEE/optee_os" \
"uboot" \
"rtos/freertos")
# msg format: module: [submodule:] content\n\nPD#XXXXXX\nProblem:\nXXX\nSolution:\nXXX\nVerify:\nXXX\nChange-Id: XXXX\nSigned-off-by: XXXX
MSG_PARSER_BUGZILLA='^.*: .* \[[1-9]\/[1-9]\].^$.^PD# ?[1-9][0-9]{4,8}$.^$.^Problem:.^.*$.^$.^Solution:$.^.*$.^$.^Verify:$.^.*$.^$.^Change-Id: .*$.^Signed-off-by: .*$'
MSG_PARSER_JIRA='^.*: .* \[[1-9]\/[1-9]\].^$.^PD# ?[A-Z]{1,8}-[0-9]{1,7}$.^$.^Problem:.^.*$.^$.^Solution:$.^.*$.^$.^Verify:$.^.*$.^$.^Change-Id: .*$.^Signed-off-by: .*$'
PARA_PARSER_COMMIT='^commit=.*$'
PARA_PARSER_LOGFILE='^logfile=.*$'
PARA_PARSER_PATCH='^patch=.*$'
PARA_PARSER_PROJ='^proj=.*$'
MSG_REPORT=""
MSG_LINE_CHECK=""
declare GIT_MSG_FORMAT_LINK="http://wiki-china.amlogic.com/Platform/Bootloader/Bootloader_commit_message_format"
declare GIT_MSG_DEMO=\
" \n\
module: sub-module: subject [n/m]\n\
\n\
PD#XXXXXX\n\
\n\
Problem:\n\
1. xxxxx\n\
2. xxxxx\n\
\n\
Solution:\n\
1. xxxxx\n\
2. xxxxx\n\
\n\
Verify:\n\
1. xxxxx\n\
2. xxxxx\n\
\n\
Change-ID: xxxxx\n\
Signed-off-by: xxxxx\n\
\n\
"
function gen_log() {
# $1: log file name
if [[ 0 -eq ${MSG_CHECK_RESULT} ]]; then
cat << EOF > $1
{"message": "This is an automated message.\n${MSG_REPORT}", "labels": {"Verified": 1}, "notify": "NONE"}
EOF
else
cat << EOF > $1
{"message": "This is an automated message.\n${MSG_REPORT}", "labels": {"Verified": -1}, "notify": "OWNER"}
EOF
fi
}
function report() {
echo -e "MSG_REPORT: \n"
echo -e ${MSG_REPORT}
if [[ "" != ${CHECK_LOG_FILE} ]]; then
gen_log ${CHECK_LOG_FILE}
fi
}
function check_length() {
# $1: line_msg, $2: line_num
local line_msg=$1
local length=${#line_msg}
local -i line_num=$2
line_num=$((line_num + 1))
if [[ $length -gt ${MSG_LENGTH_LIMIT} ]]; then
MSG_LINE_CHECK=${MSG_LINE_CHECK}" Line $line_num($length) check FAILED!\n"
MSG_CHECK_RESULT=$((MSG_CHECK_RESULT + 1))
# else
# MSG_REPORT=${MSG_REPORT}"Line $line_num check PASS!\n"
fi
}
function bootloader_git_check() {
# $1: git proj
local project=$1
IS_BOOTLOADER_GIT=0
for loop in ${!BOOTLOADER_GIT[@]}; do
if [ "$project" == "${BOOTLOADER_GIT[${loop}]}" ]; then
IS_BOOTLOADER_GIT=1
break
fi
done
if [ 1 -eq $IS_BOOTLOADER_GIT ]; then
echo "this is a bootloader git repository"
else
echo "this is not a bootloader git repository"
fi
}
function check_commit_msg() {
#echo "check git msg"
#echo $MSG
#echo ""
MSG_REPORT=" \n \nGIT MSG checker\n"
MSG_REPORT=${MSG_REPORT}" \n1. Check commit message length(max ${MSG_LENGTH_LIMIT} char each line): "
# convert to lines
IFS=$'\n' readarray -t MSG_LINES <<< "$MSG"
for line_num in ${!MSG_LINES[@]}; do
# process line by line
# line1, title
echo "MSG_LINES$line_num, len: ${#MSG_LINES[$line_num]}: ${MSG_LINES[$line_num]}"
check_length "${MSG_LINES[$line_num]}" $line_num
done
if [[ 0 -eq ${MSG_CHECK_RESULT} ]]; then
MSG_REPORT=${MSG_REPORT}"PASS!\n"
else
MSG_REPORT=${MSG_REPORT}"FAILED!\n"
MSG_REPORT=${MSG_REPORT}${MSG_LINE_CHECK}
fi
MSG_REPORT=${MSG_REPORT}" \n2. Check commit message format: "
# check whole git msg
if [[ $MSG =~ $MSG_PARSER_BUGZILLA ]]; then
echo "GIT MSG check match (bugzilla)"
MSG_REPORT=${MSG_REPORT}"PASS!\n"
elif [[ $MSG =~ $MSG_PARSER_JIRA ]]; then
echo "GIT MSG check match (jira)"
MSG_REPORT=${MSG_REPORT}"PASS!\n"
else
echo "GIT MSG check unmatch"
MSG_REPORT=${MSG_REPORT}"FAILED!\n"
#MSG_REPORT=${MSG_REPORT}" Please follow this format:\n"
#MSG_REPORT=${MSG_REPORT}${GIT_MSG_DEMO}
MSG_REPORT=${MSG_REPORT}" Please review:\n "${GIT_MSG_FORMAT_LINK}
MSG_CHECK_RESULT=$((MSG_CHECK_RESULT + 1))
fi
}
function get_commit_msg() {
if [[ "" != ${GERRIT_PROJECT} ]]; then
# get git log from patch file
MSG=`cat ${CHECK_PATCH}`
#MSG=${MSG#*[PATCH] %%---*} # get info before "---" = git msg
MSG=${MSG#*\[PATCH\] }
MSG=${MSG%%---*}
else
# get git log from local git (for test)
MSG=`git cat-file commit "${CHECK_COMMIT_ID}" | sed '1,/^$/d'`
fi
echo -e $MSG
}
function usage() {
cat << EOF
Usage:
$(basename $0) --help
$(basename $0) [commit=XXX] [logfile=YYY] [proj=ZZZ] [patch=NNN]
1. commit=XXX: specify local commit id. use HEAD~0 by default
2. logfile=YYY: specify log file, for jenkins use
3. proj=ZZZ: specify git repository name, for jenkins use
4. patch=NNN: check specified patch file(generated by git format-patch)
EOF
exit 1
}
function parser() {
for arg in "$@" ; do
echo "arg: ${arg}"
if [[ ${arg} =~ ${PARA_PARSER_COMMIT} ]]; then
# found commit=xx para
echo "commit match"
CHECK_COMMIT_ID=${arg#*=}
elif [[ ${arg} =~ ${PARA_PARSER_LOGFILE} ]]; then
echo "logfile match"
CHECK_LOG_FILE=${arg#*=}
elif [[ ${arg} =~ ${PARA_PARSER_PATCH} ]]; then
echo "patch match"
CHECK_PATCH=${arg#*=}
elif [[ ${arg} =~ ${PARA_PARSER_PROJ} ]]; then
echo "proj match"
CHECK_PROJECT=${arg#*=}
elif [[ ${arg} == "--help" ]]; then
usage
fi
done
}
function postreview() {
# $1: change number
# $2: patch set number
# $3: ReviewInput JSON filename
local url=http://$CHECKPATCH_GERRIT_SERVER/a/changes/$1/revisions/$2/review
# --trace-ascii -
curl \
-f \
-s -S \
--digest \
--netrc \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
--data-binary @$3 \
"$url"
return $?
}
function main() {
CHECK_PROJECT=${GERRIT_PROJECT}
parser $@
# check commit id
if [[ "" == "${CHECK_COMMIT_ID}" ]]; then
CHECK_COMMIT_ID="HEAD~0"
fi
# check proj name
if [[ "" == "${CHECK_PROJECT}" ]]; then
# just for local test
CHECK_PROJECT=${BOOTLOADER_GIT[0]}
fi
echo "CHECK_PROJECT: ${CHECK_PROJECT}"
# check log file
if [[ "" == ${CHECK_LOG_FILE} ]]; then
CHECK_LOG_FILE="git_msg_check_log"
fi
if [ ! -f "${CHECK_LOG_FILE}" ]; then
touch ${CHECK_LOG_FILE}
fi
# bootloader_git_check "${CHECK_PROJECT}"
get_commit_msg
check_commit_msg
report
if [[ "" != ${CHECK_LOG_FILE} ]] && [[ "" != ${GERRIT_PROJECT} ]]; then
echo "Posting review."
cat ${CHECK_LOG_FILE}
if ! time postreview $GERRIT_CHANGE_NUMBER $GERRIT_PATCHSET_NUMBER ${CHECK_LOG_FILE}; then
exit 1;
fi
echo "Posted review."
fi
}
main $@

View File

@@ -256,6 +256,11 @@ get_kernel_version();
#Check meson_defconfig
check_defconfig();
if ($k_v >= 4)
{
system "./scripts/amlogic/git_msg_check.sh";
}
#Check commit message
check_commit_msg();