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+'\n')
 5 
 6 svnRepos = sys.argv[1]#提交文件列表
 7 #svnMessageFile = sys.argv[3]
 8 #sys.stderr.write(sys.argv[0]+'\n'+sys.argv[1]+'\n'+sys.argv[2]+'\n'+sys.argv[3]+'\n'+sys.argv[4]+'\n')参数依次为脚本路径、文件列表文件、depth、提交的message文件、提交文件的路径
 9 errMsgTable = []
10 
11 with open(svnRepos) as submitFiles:
12   for submitFile in submitFiles:
13     submitFile = submitFile.replace('\n', '')#去掉文件列表缓存文件中的换行
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
打印修改内容

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值