首页 > 代码库 > SVN提交强制写入注释及相关扩展阅读

SVN提交强制写入注释及相关扩展阅读

假设SVN已经搭建成功,版本库根目录为/opt/svn/repos

找到版本库下面./hook/目录,一共9个文件,简单介绍一下


文件说明
1pre-commit.tmpl提交之前被执行
2pre-lock.tmpl版本库锁定之前被执行
3pre-revprop-change.tmpl版本库增删改之前被执行
4pre-unlock.tmpl版本库解除锁定之前被执行
5post-commit.tmpl提交之后被执行
6post-lock.tmpl版本库锁定之后被执行
7post-revprop-change.tmpl版本库增删改之后被执行
8post-unlock.tmpl版本库解除锁定之后被执行
9start-commit.tmpl提交之前被执行

其中start-commit和pre-commit的区别在于:

start-commit在提交事务发生之前执行,通常用于判断用户是否拥有提交权限.

pre-commit在提交事务执行完之前执行,通常用于保护版本库的内容或者文件位置.


本文只涉及提交注释的控制,只针对pre-commit进行说明,其他的脚本将不在本文进行说明

原pre-commit.tmpl文件中起作用的部分

REPOS="$1"
TXN="$2"
SVNLOOK=/usr/bin/svnlook
$SVNLOOK log -t "$TXN" "$REPOS" |    grep "[a-zA-Z0-9]" > /dev/null || exit 1

该脚本接受2个参数

REPOS="$1" /opt/svn/repos  表示svn仓库的绝对路径值

TXN="$2"    表示最新的一个版本的事务ID,不是版本号


注:如果想按照版本号进行查看执行一下命令

svnlook log -r $ID /opt/svn/repos/

svnlook在这里的作用是打印本次提交的注释(svnlook log)并且查找其中的字母和数字(grep "[a-zA-Z0-9]"),但是不进行输出(> /dev/null),如果执行失败进行异常退出(exit 1)


接下来,我们对这个钩子进行改造,改造部分的脚本如下:

SVNLOOK=/usr/bin/svnlook
# anothor way
# LOGMSG=`$SVNLOOK log -t "$TXN" "$REPOS" | wc -c`
LOGMSG=$($SVNLOOK log -t "$TXN" "$REPOS" | wc -c)
if [ "$LOGMSG" -lt 10 ]; then
echo -e "\n 提交文件时必须添加注释,提交中止." 1>&2
exit 1
fi

其中LOGMSG为注释的长度

这里去掉了查找(grep)条件,接受中文注释,如果需要对注释进行过滤再计算长度可以将查找添加回来

LOGMSG=$($SVNLOOK log -t "$TXN" "$REPOS" | grep "[a-zA-Z0-9]" | wc -c)

wc命令: -c 统计字节数 -l 统计行数 -w 统计字数(一个单词算一个字)

判断: -eq 等于 -gt 大于 -lt 小于

echo 错误提示重定向到stderr (0:stdin 1:stdout 2:stderr)


保存钩子后需要给文件赋予执行权限 chmod 755 pre-commit.tmpl

本文出自 “沙罗双树园” 博客,请务必保留此出处http://ohmmx.blog.51cto.com/12884864/1923700

SVN提交强制写入注释及相关扩展阅读