• 20200909svn钩子脚本


    这里主要是为了在代码提交时进行一些代码规范校验。现在很多时候都会采用eslint等工具进行辅助开发的代码规范,这里不再细说;而一般的svnhook又是服务端的脚本,即svn仓库管理来进行设置的,对于没有这些权限的人来说不太友好。其具体原理和实现与接下来要说的客户端脚本基本一致,主要使用的是svnlook工具,有兴趣的可以搜索一下,你会发现,搜索结果百分之120都是服务端的钩子脚本。所以我把客户端的脚本进行一下分享。

    1.关联钩子

    在svn目录右键,选择svn->设置,在HookScripts进行配置。比如我这里配置的就是pre-commithook,选择好要进行校验的目录,然后要执行的脚本,比如我这里写的是python "xxx/hook/pre-commit.py",就是在提交代码前执行这个python脚本。当然,一般都是使用bat脚本,但是我对bat不熟,所以直接使用python了,不过也可以在bat中调用python:

    2.执行脚本

     1 rem set PYTHON="C:/Users/lijiawei/AppData/Local/Programs/Python/Python38/python.exe"
     2 set REPOS=%1
     3 set TXN=%2
     4 set MESSAGEFILE=%3
     5 set CWD=%4
     6 set PY_CHECK="E:/NGTOSV2_1/wuhan_version/hook/synchk.py"
     7 
     8 python %PY_CHECK% %REPOS% %TXN% %MESSAGEFILE% %CWD%
     9 
    10 if errorlevel 1 exit 1
    11 exit 0

    可以看到我们接收到4个参数,依次是path文件列表、 depth、 messagefile提交的message文件、 cwd当前文件路径

    3.python脚本

     1 import sys
     2 
     3 def err(msg):
     4     sys.stderr.write(msg+'
    ')
     5 
     6 svnRepos = sys.argv[1]#提交文件列表
     7 #svnMessageFile = sys.argv[3]
     8 #sys.stderr.write(sys.argv[0]+'
    '+sys.argv[1]+'
    '+sys.argv[2]+'
    '+sys.argv[3]+'
    '+sys.argv[4]+'
    ')参数依次为脚本路径、文件列表文件、depth、提交的message文件、提交文件的路径
     9 errMsgTable = []
    10 
    11 with open(svnRepos) as submitFiles:
    12   for submitFile in submitFiles:
    13     submitFile = submitFile.replace('
    ', '')#去掉文件列表缓存文件中的换行
    14     fp = open(submitFile, 'r', encoding='utf-8')
    15     frontLine = ''
    16     lNum = 0
    17     for line in fp.readlines():#逐行读取
    18       lNum += 1
    19       line = line.strip().replace(' ','')
    20       if (',]' in line) or (',}' in line):
    21         errMsgTable.append([submitFile, lNum, 'Illegal Comma'])
    22       if len(frontLine) > 0 and len(line) > 0:
    23         if (frontLine[-1] == ',') and (line[0] == ']' or line[0] == '}'):
    24           errMsgTable.append([submitFile, lNum, 'Illegal Comma'])
    25       if len(line) > 0:
    26         frontLine = line
    27     fp.close()
    28 
    29 # errMsgTable.append(['', '', 'test'])
    30 if errMsgTable:
    31     err('===================== error begin ========================================')
    32     for msgArr in errMsgTable:
    33         err('File:%s   line:%s    msg :%s' % (msgArr[0], msgArr[1], msgArr[2]))
    34     err('===================== error end ==========================================')
    35     sys.exit(1)
    36 else:
    37     sys.exit(0)

    python中主要校验了非法的逗号,对于不规范的代码进行提示,如果没有不规范的,则返回0,代码提交成功。

    4.svnlook

    1.svnlook changed
    打印修改路径
    2.svnlook cat
    打印修改内容

  • 相关阅读:
    微信读书分享组队群
    骚操作!利用百度首页换肤的图片上传 API 做图床
    application/json和application/x-www-form-urlencoded使用选择
    通过类名或者jar名查询所在jar包
    sql中with as测试实例
    BeanUtils.copyProperties的简单示例
    jquery.validate.js的简单示例
    springboot restful接口服务异常处理
    怎样判断某个窗口是否打开
    怎样理解window.name
  • 原文地址:https://www.cnblogs.com/ljwsyt/p/13638960.html
Copyright © 2020-2023  润新知