SVN中对repo中的某一目录设置钩子

简介:

因为一些原因,手头上的SVN已经有好几个repo,但是因为历史遗留问题,前端的SVN路径是在某个仓库下,前两天突然提出审核的需求(而且还不能对整个repo仓库实施该审核要求),之前的工作经验中都是对repo添加钩子,第一次要对repo中的目录添加钩子。找了一些资料看了下,自己也尝试去测试,最后找到了对应的解决方法,这里Mark一下。

环境:

        svn repo: svn://192.168.1.221/chuangyue

        web前端svn路径:svn://192.168.1.221/chuangyue/web

需求:

         1、提交到web前端SVN上的代码需要添加备注;

         2、备注要不少于8个字符;

         3、备注需要符合一定的格式,如:**** 修改 **** reviewid=1234

隐含要求:

         只有提交到chuangyue这个仓库的web目录的代码才需要添加备注,并符合以上要求,但是提交到chuangyue的其他路径没有该限制。

这里,补充一下相关的命令,svnlook changed和svnlook dirs-changed.

svnlook dirs-changed: 打印修改过的目录,比如web/pictures/

语法:svnlook dirs-changed REPOS_PATH

描述:打印那些自身发生修改(编辑属性等)或者子目录及子目录中的文件发生修改的目录。

选项:

         --revision (-r) REV

         --transaction (-t) TXN

示例:

         $ svnlook dirs-changed -r 40 /var/svn/repos
         trunk/vendors/deli/

svnlook changed:打印修改过的路径,比如web/pictures/test.jpg

描述:打印那些在特定版本或者事物发生修改的路径,连同“svn update-style”状态码在前两列展示。

‘A ’:添加到repo中的项目

‘D ’:从repo中删除的项目

‘U ’:文件内容被修改

‘_U’:项目属性被修改

‘UU’:文件内容和属性均被修改

注意:返回的结果中,文件和目录能够被区分,因为目录的尾部有一个“/”符号。

选项:

         --copy-info
         --revision (-r) REV
         --transaction (-t) TXN

示例:

         $ svnlook changed -r 39 /var/svn/repos
         A   trunk/vendors/deli/
         A   trunk/vendors/deli/chips.txt
         A   trunk/vendors/deli/sandwich.txt
         A   trunk/vendors/deli/pickle.txt
         U   trunk/vendors/baker/bagel.txt
         _U  trunk/vendors/baker/croissant.txt
         UU  trunk/vendors/baker/pretzel.txt
         D   trunk/vendors/baker/baguette.txt

关于以上命令的详细信息,可参阅如下链接:

http://svnbook.red-bean.com/en/1.5/svn.ref.svnlook.c.dirs-changed.html

http://svnbook.red-bean.com/en/1.5/svn.ref.svnlook.c.changed.html

最后,实现需求的钩子内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/bin/bash
#
###########################################
#说明:                                   #
#    1、修改web目录必须输入评论才能提交   #
#    2、评论不得少于8个字节               #
#    3、评论格式为: xxxx reviewid=1234   #
# Author: Zhaojinghui                     #
# Created Time: 2017-04-25 18:11:44       #
###########################################
REPOS= "$1"
TXN= "$2"
SVNLOOK= /usr/bin/svnlook
SPath= "web/"
FOUND=$($SVNLOOK  dirs -changed  "$REPOS"  -t  "$TXN"  grep  -E  "^$SPath" )
# 判断提交修改是否包含SPath目录
if  [[  "$FOUND"  ==  ""  ]]
    then
         exit  0
    else
         # 获取提交代码时输入的评论内容
         LogMsg=`$SVNLOOK log -t  "$TXN"  "$REPOS"  | grep  "[a-zA-Z0-9]" `
         LogMsgNum=`$SVNLOOK log -t  "$TXN"  "$REPOS"  | grep  "[a-zA-Z0-9]" | wc  -c`
         # 判断提交评论是否大于8个字节
         if  "$LogMsgNum"  -lt 8 ]; then
            echo  -e  "Log message cann't be empty! You must input more than 8 chars as commit!"  1>&2
            exit  1
         else 
            # 判断评论格式是否符合要求
            echo  $LogMsg | grep  ".*reviewid=[0-9]\{1,5\}*"  /dev/null
            [ $? - ne  0 ] &&  echo  "Invalid log message format,it should be: xxx reviewid=[num]."  1>&2  &&  exit 
         fi
         exit  0
fi


本文转自 jerry1111111 51CTO博客,原文链接:http://blog.51cto.com/jerry12356/1922029,如需转载请自行联系原作者
相关文章
IDEA SVN提交设置忽略文件
IDEA SVN提交设置忽略文件
238 0
|
数据安全/隐私保护 Windows
如何在windows上安装部署设置SVN服务器
如何在windows上安装部署设置SVN服务器
|
缓存 Python
SVN过滤设置
SVN过滤设置
237 0
idea集成svn、安装目录、无svn.exe、(有图具有说服力)
idea集成svn、安装目录、无svn.exe、(有图具有说服力)
259 0
idea集成svn、安装目录、无svn.exe、(有图具有说服力)
|
Shell 测试技术 Python
Python 一键commit文件、目录到SVN服务器
Python 一键commit文件、目录到SVN服务器
292 0
tar打包时忽略svn目录
tar打包时忽略svn目录
142 0
如何将指定文件或文件夹直接提交到svn指定目录?
如何将指定文件或文件夹直接提交到svn指定目录?
819 0
|
开发工具 Android开发
Android Studio常用设置、快捷键(win+mac)及关联SVN
Android Studio常用设置、快捷键(win+mac)及关联SVN
192 0
Android Studio常用设置、快捷键(win+mac)及关联SVN
|
数据安全/隐私保护
【SVN】关于SVN创建多个版本库共用权限和密码并且设置钩子同步web目录
【SVN】关于SVN创建多个版本库共用权限和密码并且设置钩子同步web目录
162 0
【SVN】关于SVN创建多个版本库共用权限和密码并且设置钩子同步web目录
|
缓存 Apache 数据库
SVN无法CO检出web目录
SVN无法CO检出web目录
125 0
SVN无法CO检出web目录