浅谈svn的hook机制
一、什么是钩子
所谓svn的hook机制,就是用户在管理数据仓库的时候,当特定的事件发生时,相应的hook会被调用,hook 其实就相当于特定事件的处理函数。
当前 Subversion 提供了5种可以安装的 hook :
|
事件名 |
时机 |
与hook交互 |
一般用途 |
|
start-commit |
事务创建之前。 |
传给 hook 的 参数: - 参 数 1 , 代码库路径。 - 参 数 2 , 试图提交的用户名。 hook 的返回值:非 0 则 终止。 |
判断用户是否有权限进行提交 操作。 |
|
pre-commit |
事务完成,但未提交。 |
- 参 数 1 , 代码库路径。 - 参 数 2 , 事务名。 hook 的返回值:非 0 则 终止提交,操作回滚。 |
对提交内容进行检查。如要求 提交必须填写提交信息。 |
|
post-commit |
事务提交完毕,新的修订版被 创建。 |
传给 hook 的 参数: - 参 数 1 , 代码库路径。 - 参 数 2 , 刚创建的修订版号。 hook 的返回值被忽 略。 |
发送邮件通知,或备份代码 库。 |
|
pre-revprop-change |
修改修订版属性(如提交时提 供的信息 message )之前。 由于修订版属性一旦修改就会 永久的丢失,除非安装这个事件的 hook, subversion 的 客户端不允许远程修改修订版属性。 |
传给 hook 的 参数: - 参 数 1 , 代码库路径。 - 参 数 2 , 要修改的修订版号。 - 参 数 3 , 操作用户名。 - 要 修改的属性。 hook 的返回值:非 0 则 终止。 |
保存修订版属性的改变记录。 |
|
post-revprop-change |
修订版属性值被修改之后。 如果没有安装 pre-revprop-change的 hook , 这个事件的 hook 不会被执行。 |
传给 hook 的 参数: - 参 数 1 , 代码库路径。 - 参 数 2 , 要修改的修订版号。 - 参 数 3 , 操作用户名。 - 要 修改的属性。 hook 的返回值被忽 略。 |
发送邮件通知。 |
通常来说在当前仓库下面的hook目录,都会存在相应hook文件的模板,要让相应hook文件起作用,就必须复制当前模板并去掉后面的.tmpl,然后编写相应的逻辑。
二、hook实践
我们主要想实现两个hook功能:
- 用户提交代码的时候必须要写提交信息,而且长度必须大于10
- 用户提交完之后更新服务器上面相应的目录
1. 用户提交代码的时候必须要写提交信息,而且长度必须大于10
这个功能需要实现pre-commit:
#!/bin/sh
REPOS="$1"
TXN="$2" LOGMSG=`svnlook log -t "$TXN" "$REPOS"|wc -c`
if [ $LOGMSG -lt ]; then
echo $LOGMSG >&
echo -e "\nLog message is too short" >&
exit
fi
# All checks passed, so allow the commit.
exit
2.用户提交完之后更新服务器上面相应的目录
在hooks目录下新增post-commit,并增加可执行权限:
REPOS="$1"
REV="$2"
PROJECT="/root/projects/hello"
PASSWD="/root/projects/save/svn_admin" svn update -q $PROJECT --non-interactive --username admin --password `cat $PASSWD`
注意:保存后一定要把文件权限增加可执行权限,不然用户会出现错误。
另外,由于安全原因,Subversion版本库在一个空环境中执行钩子脚本—就是没有任何环境变量,甚至没有$PATH或%PATH%。由于这个原因,许多管理员会感到很困惑,它们的钩子脚本手工运行时正常,可在Subversion中却不能运行。要注意,必须在你的钩子中设置好环境变量或为你的程序指定好绝对路径。
浅谈svn的hook机制的更多相关文章
- 浅谈Java的反射机制和作用
浅谈Java的反射机制和作用 作者:Java大师 欢迎转载,转载请注明出处 很多刚学Java反射的同学可能对反射技术一头雾水,为什么要学习反射,学习反射有什么作用,不用反射,通过new也能创建用户对象 ...
- 浅谈:Redis持久化机制(一)RDB篇
浅谈:Redis持久化机制(一)RDB篇 众所周知,redis是一款性能极高,基于内存的键值对NoSql数据库,官方显示,它的读效率可达到11万次每秒,写效率能达到8万次每秒,因为它基于内存以及存 ...
- 浅谈:Redis持久化机制(二)AOF篇
浅谈:Redis持久化机制(二)AOF篇 上一篇我们提及到了redis的默认持久化方式RDB,是一种通过存储快照数据方式持久化的机制,它在宕机后会丢失掉最后一次更新RDB文件后的数据,这也是由于它 ...
- 浅谈C语言中断处理机制
一.中断机制 1.实现中断响应和中断返回 当CPU收到中断请求后,能根据具体情况决定是否响应中断,如果CPU没有更急.更重要的工作,则在执行完当前指令后响应这一中断请求.CPU中断响应过程如下:首先, ...
- 浅谈 ArrayList 及其扩容机制
浅谈ArrayList ArrayList类又称动态数组,同时实现了Collection和List接口,其内部数据结构由数组实现,因此可对容器内元素实现快速随机访问.但因为ArrayList中插入或删 ...
- 浅谈java垃圾回收机制
今天看thinking in java,里面很详细的谈到java垃圾回收器机制,看完后让我对这神秘的区域有一定的了解,特写一些小总结记录下来. 分两点来说. 第一点:Object.finalize() ...
- 浅谈Linux内存管理机制
经常遇到一些刚接触Linux的新手会问内存占用怎么那么多?在Linux中经常发现空闲内存很少,似乎所有的内存都被系统占用了,表面感觉是内存不够用了,其实不然.这是Linux内存管理的一个优秀特性,在这 ...
- 浅谈spring security 403机制
403就是access denied ,就是请求拒绝,因为权限不足 三种权限级别 一.无权限访问 <security:http security="none" pattern ...
- 从一次异常中浅谈Hibernate的flush机制
摘自http://www.niwozhi.net/demo_c70_i1482.html http://blog.itpub.net/1586/viewspace-829613/ 这是在一次事务提交时 ...
随机推荐
- 进程间通信IPC之--无名管道(pipe)和有名管道(fifo)(转)
进程间通信IPC之--无名管道(pipe)和有名管道(fifo) 2012-01-17 22:41:20 分类: C/C++ 每个进程各自有不同的用户地址空间,任何一个进 程的全局变量在另一个进程中 ...
- Java API 操作Redis
针对Redis的Java客户端有很多种,具体查看官网信息:https://redis.io/clients#java 本次测试使用Jedis API,Jedis使用方便,其api方法名称与redis命 ...
- webdriver常用API
本章涉及Selenium WebDriver的所有接口. Recommended Import Style 推荐的导入风格如下: from selenium import webdriver 然后,你 ...
- 2DAY初识python
一.变量 1 什么是变量之声明变量 #变量名=变量值 age=18 gender1='male' gender2='female' 2 为什么要有变量 变量作用:“变”=>变化,“量”=> ...
- php通过Mysqli和PDO连接mysql数据详解
前言 在实际开发中,关于数据库操作类,很少是自己去写,大多是通过一些框架去实现,突然自己去写,还是需要借阅手册之类,于是我觉得有必要去总结一下,php连接mysql的方法,php连接mysql,可以通 ...
- GOF23设计模式之外观模式(facade)
一.外观模式概述 外观模式也称为门面模式. 核心:为了系统提供统一的入口,封装子系统的复杂性,便于客户端调用. 二.外观模式场景导入与示例代码 场景:要想自己去注册一个公司,首先去工商局检测命名是否合 ...
- Vim编辑器基本操作学习(一)
最近在服务端编辑文件总不可避免要使用vim编辑器,下面就对学习到的常用命令进行总结,以便自己以后查看. 基本编辑命令 删除字符:x 删除一行:dd 删除换行符:J,同时将两行合并成一行 撤 ...
- 第十一章 Helm-kubernetes的包管理器(中)
11.5 chart详解 chart由一系列文件组成,这些文件描述了K8s部署应用时需要的资源,比如Servcie.Deployment.PersistentVolmeClaim.Secret.Con ...
- android:修改PagerTabStrip中的背景颜色,标题字体的样式、颜色和图标以及指示条的颜色
1.修改PagerTabStrip中的背景颜色 我们在布局中直接设置background属性即可: <android.support.v4.view.ViewPager android:id=& ...
- IIS Worker Process 遇到了一个问题,需要关闭
服务器为2003系统,平时都用的好好的,但是最近经常跳出了!IIS Worker Process 遇到问题关闭! 第二个对话框还有个请单击此处的连接 以下文件将包含在这个错误报告中:C:\DOCUME ...