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

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

#!/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 2 
        fi
        exit 0
fi
时间: 2024-10-10 23:21:59

SVN中对repo中的某一目录设置钩子的相关文章

SVN使用,VS中使用SVN

以前一直用VSS,今天开始用SVN,需要把VS项目添加到SVN中. 1.下载SVN客户端(自己下载,见附件)http://tortoisesvn.net/downloads.html官网直接下载 2.由于VS项目不能直接使用SNV,需要下载一个插件 下载地址:http://ankhsvn.open.collab.net/ 安装好ankhsvn后,可以在VS2010中的文件中看到一个subversion的选项, 把解决方案关联到SVN对应的地址上. 选择一个项目,文件-->Subversion->

修改 CentOS 中的 repo

修改 CentOS 中的 repo 原因 由于安装 odoo 10 太慢,因为服务器是国外的. 修改 进入 repo 文件夹 cd /etc/yum.repos.d/ ls 可以看到所有的源. 原文地址:https://www.cnblogs.com/F4NNIU/p/9763782.html

windows和linux中搭建python集成开发环境IDE——如何设置多个python环境

本系列分为两篇: 1.[转]windows和linux中搭建python集成开发环境IDE 2.[转]linux和windows下安装python集成开发环境及其python包 3.windows和linux中搭建python集成开发环境IDE——如何设置多个python环境 Install Python packages on Ubuntu 14.04 from chris' sandbox In this post I will document my setup of Python 2.7

MATLAB检查指定路径中的子文件夹中的文件名中是否带有空格

测试文件夹为: clear;close all;clc; %% %程序实现的功能 %检查指定路径中的子文件夹中的文件名中是否带有空格,并去掉文件名中的空格 %% %程序中用到的之前不清楚的函数如下 %1)strfind(a,b):即找a中是否有b,如果a中有b,则输出b的位置序号.没有输出空数组 %2)isempty(a):判断数组是否为空 %3)strrep(a,b,c):就是把a中所有出现的b换为c %4)movefile(a,b):a移动为b,如C:\test1.jpg移动为C\test2

django中settings.py中变量的全局引用

在settings.py中添加自定义变量,可以通过setting.(点)变量名的方式访问,如: from django.conf import settings site_name = settings.SITE_NAME site_desc = settings.SITE_DESC 但是,如果遇到了一些频繁访问的变量,如:邮箱,网站标题,网站的描述,这样访问就很不方便,解决方法: 1.首先在settings.py中添加对应的变量: #网站信息 SITE_NAME="hupeng的个人博客&qu

在intellij IDEA中为web应用创建图片虚拟目录(详细截图)

在intellij IDEA中为web应用创建图片虚拟目录(详细截图) 在intellij IDEA中为web应用创建图片虚拟目录详细截图 工程配置和环境 操作步骤 在非IDE环境下配置虚拟目录 本文主要展示如何在intellij IDEA中为web应用添加虚拟目录映射,并附上步骤截图 工程配置和环境 我使用的版本为 tomcat 8.0.30 intellij 15.0.2 jdk 1.8.0_25 已经部署好了一个web应用,并且已经在IDEA中添加好了tomcat容器,现在想为这个web应

数据库中一个表中如何设置两个主键

其实做法很简单. 在规定中数据库的唯一性中, 一张表中最多一个主键. 如果想设置两个主键,那么只有在联合的表中或者是讲两个字段联合起来, 例如 表student(sno, sname, age) 表course(cno, sname, grade) 主键具有唯一性,一张表最多一个主键, 但是可以将2个字段联合起来设置为主键. 1.选中表- 2.设计表- 3.选中字段(多个按住ctr) 4.右键设置为主键. 5.哦了,再去刷新一下.如果之前输入的数据会报错(很正常),是因为主键已经变了.只需要把数

asp.net中一般处理程序中添加session

asp.net中使用一般处理程序(.ashx)添加session,利用context.session["xxx"] = value的方式把值保存到session:运行的时候会出现该对象尚未引用. 解决办法:1,在一般处理程序的类后面添加IRequiresSessionState.例如public class xxx : IHttpHandler, IRequiresSessionState. 2,引入session所使用的类库,using System.Web.SessionState

先序+中序和中序+后序建树

思路:先序的第一个元素和后序的最后一个元素是当前子树的根,然后遍历中序序列,找到左右子树的分界线,递归建左子树和右子树. class Solution { public: /*由于是oj,这里假设给的序列是合法的,正常情况是需要判断不合法情况的 */ TreeNode *buildTree(vector<int> &inorder, vector<int> &postorder,int instart,int inend,int poststart,int post