您好,欢迎来到华佗小知识。
搜索
您的当前位置:首页SVN提交代码时实现强制按固定格式填写Log的方法

SVN提交代码时实现强制按固定格式填写Log的方法

来源:华佗小知识
SVN提交代码时实现强制按固定格式填写Log的方法

SVN本身并不提供这种强制填写Log的功能,而是通过一系列的钩子程序(称为hook脚本),在提交之前(pre-commit)、提交过程中(start-commit)、提交之后(post-commit)调用预定的钩子程序来完成一些附加的功能。

本次我们要实现的是在提交到版本库之前检查用户是否已经按固定格式填写了Log,要使用pre-commit这个钩子程序。打开SVN的repository目录下的hook子目录,有一个“pre-commit.tmpl”文件。这个文件是一个模板文件,它告诉了我们如何实现提交前控制。内容如下:

# The pre-commit hook is invoked before a Subversion txn is # committed. Subversion runs this hook by invoking a program

# (script, executable, binary, etc.) named 'pre-commit' (for which # this file is a template), with the following ordered arguments: #

# [1]REPOS-PATH (the path to this repository)

# [2]TXN-NAME (the name of the txn about to be committed) #

# The default working directory for the invocation is undefined, so # the program should set one explicitly if it cares. #

# If the hook program exits with success, the txn is committed; but # if it exits with failure (non-zero), the txn is aborted, no commit # takes place, and STDERR is returned to the client. The hook

# program can use the 'svnlook' utility to help it examine the txn.

在一个提交事务执行之前,SVN会调用指定的hook脚本,并向该脚本传递了两个参数:REPOS-PATH(仓库路径)和TXN-NAME(本次事务的事务号)。可以在该脚本中进行一些检查(比如检查Log信息是否填写),如果满足条件则返回0;否则返回其它非0结果,进而提交失败。可以通过svnlook命令来检查是否已经写了Log。

目标:检查提交代码时是否按照以下格式填写了Log NGRBUG-xxx: yyy 或者 NGRDEV-xxx: (yyy) zzz

其中,xxx为JIRA编号,yyy为JIRA的标题,zzz为具体的提交说明。

下面分别就SVN服务器搭建在Windows上和Linux上两种情况下列出pre-commit脚本的内容。

1. SVN服务器搭建在Windows上

在hook目录下创建pre-commit.bat文件,内容如下:

setlocal set REPOS=%1 set TXN=%2 set /a MIN_LOG_LEN=1 svnlook log \"%REPOS%\" -t \"%TXN%\" | egrep \"NGRBUG-[0-9]{1,}: .{% MIN_LOG_LEN%,}\" || svnlook log \"%REPOS%\" -t \"%TXN%\"| egrep \"NGRDEV-[0-9]{1,}: \\(.{%MIN_LOG_LEN%,}\\) .{%MIN_LOG_LEN%,}\" if %errorlevel% gtr 0 goto err exit 0 :err echo 请按正确的格式填写Log!>&2 echo 格式:NGRBUG-xxx: xxx或者NGRDEV-xxx: (xxx) xxx。>&2 echo 注意:冒号后和小括号后有空格。>&2 exit 1 说明: 1)svnlook log \"%REPOS%\" -t \"%TXN%\"的返回值是用户填写的Log信息。

2)Windows下的finstr命令对正则表达式支持的不够好,这里在Windows中引入Linux的工具包,使用Linux正则表达式来验证Log信息字符串是否符合要求。 2. SVN服务器搭建在Linux上

在hooks目录下创建pre-commit文件,内容如下:

#!/bin/sh REPOS=$1 TXN=$2 MIN_LOG_LEN=1 SVNLOOK=/project/csvn/bin/svnlook $SVNLOOK log $REPOS -t $TXN | egrep \"NGRBUG-[0-9]{1,}: .{$MIN_LOG_LEN,}\" ||$SVNLOOK log $REPOS -t $TXN | egrep \"NGRDEV-[0-9]{1,}: \\(.{$MIN_LOG_LEN,}\\) .{$MIN_LOG_LEN,}\" if [ $? -eq 0 ]; then exit 0 else echo “请按正确的格式填写Log!”>&2 echo “格式:NGRBUG-xxx: xxx或者NGRDEV-xxx: (xxx) xxx。”>&2 echo “注意:冒号后和小括号后有空格。”>&2 exit 1 fi 说明: 1) SVNLOOK变量的取值根据svnlook命令的路径进行设定。 2)更改pre-commit的运行权限:chmod +x pre-commit。

3)目前发现中文的出错提示信息显示格式有点问题,可改为英文。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务