Hooks脚本

在服务器下的/srv/gitlab/data/git-data/repo../@hash/xxx.git/下创建custom_hooks文件夹,里面创建pre-recevie

  1. #!/bin/bash
  2. validate_ref()
  3. {
  4. # --- Arguments
  5. oldrev=$(git rev-parse $1)
  6. newrev=$(git rev-parse $2)
  7. refname="$3"
  8. commitList=`git rev-list $oldrev..$newrev`
  9. echo '****************'
  10. echo $commitList
  11. echo '****************'
  12. split=($commitList)
  13. rm -rf target.txt
  14. for s in ${split[@]}
  15. do
  16. #echo $s
  17. echo $s >>./target.txt
  18. msg=`git cat-file commit $s | sed '1,/^$/d'`
  19. echo $msg
  20. python3 pre-receive.py "$msg"
  21. if [ $? -eq 1 ]; then
  22. exit 1
  23. fi
  24. done
  25. #python3 scp.py
  26. #cp target.txt /home/gitlab/target.txt
  27. exit 0
  28. }
  29. if [ -n "$1" -a -n "$2" -a -n "$3" ]; then
  30. PAGER= validate_ref $2 $3 $1
  31. else
  32. while read oldrev newrev refname
  33. do
  34. validate_ref $oldrev $newrev $refname
  35. done
  36. fi

日志校验脚本

在.git目录下(也就是custom_hooks上层目录)创建pre-recevie.py,给予最高权限

  1. vi pre-recevie.py
  2. sudo chmod 777 pre-recevie.py

代码为:

  1. # !/usr/bin/env python3
  2. # _*_ coding:utf-8 _*_
  3. """
  4. @createTime : 2021/11/1 10:23
  5. @Author : waldeincheng
  6. """
  7. import os
  8. import re
  9. import sys
  10. # TODO
  11. # 第一步,截取出message信息,判断message符不符合规范,整体跟svn差不多
  12. # 第二步,静态代码检查,目前没有方案
  13. # 第三步,扫描注释符不符合要求,占代码量的多少
  14. # 截取提交message信息
  15. class PushCodeReview:
  16. def __init__(self):
  17. pass
  18. def log_verify(self):
  19. # print('********************argv*****************')
  20. #print(sys.argv[1])
  21. log = sys.argv[1]
  22. #print('*****************************************')
  23. #log = ['【问题描述】:test\n【提交类型】:BUG\n【对应版本】:ALL\n【问题单号】:Fix Bug #222\n【问题原因】:test\n【修改方案】:test\n【自测过程】:自测ok\n【是否必现】:否\n【发布说明】:否'][0]
  24. if re.search('【问题描述】:.+\n【提交类型】:.+\n【对应版本】:.*\n【问题单号】:.+\n【问题原因】:.+\n【修改方案】:.+\n【自测过程】:.+\n【是否必现】:.+\n【发布说明】:.+',log):
  25. result = log.split('\n')
  26. desc,submitType,platform,pro_id,reason,solved,test,isSeed,isPublish = result
  27. # 日志的详细信息处理
  28. # 提交类型
  29. if not re.fullmatch('BUG|LDOC|任务|需求修改|版本升级|代码整理|解决编译不过|阶段性提交|追加提交',submitType[7:]):
  30. print('提交类型错误\n')
  31. self.error_report()
  32. sys.exit(1)
  33. # 对应版本
  34. if not re.fullmatch('AT|Lua|ALL|CSDK',platform[7:]):
  35. print('对应版本错误\n')
  36. self.error_report()
  37. sys.exit(1)
  38. # 问题单号
  39. if not re.search('Finish|Start|Effort|Fix',pro_id[7:]):
  40. print('问题单号错误\n')
  41. self.error_report()
  42. sys.exit(1)
  43. # 是否必现
  44. if not re.fullmatch('是|否',isSeed[7:]):
  45. print('自测过程错误\n')
  46. self.error_report()
  47. sys.exit(1)
  48. # 发布说明
  49. if not re.fullmatch('是|否',isPublish[7:]):
  50. print('发布说明错误\n')
  51. self.error_report()
  52. sys.exit(1)
  53. else:
  54. print('提交格式错误,请检查格式')
  55. self.error_report()
  56. sys.exit(1)
  57. sys.exit(0)
  58. def error_report(self):
  59. print('正确格式为:')
  60. print("""
  61. 【问题描述】:问题描述,对外发布说明,非研发人员能看懂的内容
  62. 【提交类型】:BUG/任务/LDOC/需求修改/版本升级/代码整理/解决编译不过/阶段性提交/追加提交
  63. 【对应版本】:ALL/AT/Lua/CSDK
  64. 【问题单号】:Fix Bug #1 / Finish Task #1 Cost:10h
  65. 【问题原因】:问题出现的原因,如果是BUG 必须填写
  66. 【修改方案】:问题修改的方案,如果是BUG 必须填写
  67. 【自测过程】:自测的过程
  68. 【是否必现】:是/否
  69. 【发布说明】:是/否(是,会添加到发布说明)""")
  70. if __name__ == '__main__':
  71. demo = PushCodeReview()
  72. demo.log_verify()