sdk-hwV1.3/lichee/rtos-hal/tools/pre-commit

65 lines
1.8 KiB
Plaintext
Raw Normal View History

2024-05-07 10:09:20 +00:00
#!/bin/sh
#删除注释的函数
function del_comment_file()
{
#delete the comment line begin with '//comment'
sed -i '/^[ \t]*\/\//d' $1 #i选项表示直接对文件而不是副本操作
#delete the commnet line end with '//comment'
sed -i 's/\/\/[^\"]*//' $1
#delete the comment only occupied one line '/* commnet */'
sed -i 's/\/\*.*\*\// /' $1
#delete the comment that occupied many lines '/*comment
# *comment
# */
sed -i '/^[ \t]*\/\*/,/.*\*\//d' $1
}
#有需要时需要修改keyword.dat文件的路径
keywordpath=.git/hooks/keyword.dat
#逐个检查即将commit的文件
for FILE in `git diff --name-only --cached`; do
# 只对.c和.h文件进行检查
dirfile=$(dirname $FILE)
if [[ $FILE != *".c"*] && [$FILE != *".h"* ]] ; then
continue
fi
#忽略来自include/osal文件夹里面的文件
if [ $dirfile == include/osal ] ; then
continue
fi
#将文件暂存至同目录的副本tem.c中
cp ${FILE} ${dirfile}/tem.c
temcpath=${dirfile}/tem.c
#删除副本tem.c中的注释
del_comment_file ${temcpath}
#逐行检查所给关键词列表文件按keyword.dat中是否出现在即将commit的文件中
for line in $(sed '/^#.*\|^$/d' ${keywordpath}); do
#按特定字符串查找文本
grep "\<${line}\>" ${temcpath} 2>&1 >/dev/null
if [ $? -eq 0 ]; then
# 输出报错信息
echo -e "\033[31m${FILE}文件中包含了关键字${line}请重新修改后再提交\033[0m"
#删除创建的副本
rm -f ${dirfile}/tem.c
exit 1
fi
done
#删除创建的副本
rm -f ${dirfile}/tem.c
done
exit