SVN-钩子

  先说说钩子是干什么的吧,,简单的说,svn钩子就是在提交svn时前后所要触发的事件,于是我们可以用钩子做一些提交时的限制,及提交后的操作。最常用的一般有两个,pre-commit,post-commit。下面分别简单说下概念。

一、钩子概述

1)start-commit — 开始提交的通知

描述
start-commit 在开始事务之前执行。通常用来确定用户是否有提交权限。
如果 start-commit 钩子程序返回非零值,提交就会在创建事务之前停止,stderr 的任何输出都会返回到客户端。

输入参数
传递给你钩子程序的命令行参数,按照顺序是:

1.版本库路径
2.认证过的尝试提交的用户名
3.Colon-separated list of capabilities that a client passes to the server, including depth, mergeinfo, and log-revprops


2)pre-commit — 在提交结束之前提醒。

描述
pre-commit 钩子在事务创建新版本之前运行。通常这个钩子是用来保护因为内容或位置(例如,你要求所有到一个特定分支的提交必须包括一个 bug 追踪的 ticket 号,或者是要求日志信息不为空)而不允许的提交。
如果 pre-commit 钩子返回非零值,提交会终止,提交事务被删除,所有 stderr 的输出会返回到客户端。 

输入参数
传递给你钩子程序的命令行参数,按照顺序是:

1.版本库路径
2.提交事务的名称

 

3)post-commit — 成功提交的通知。

描述
post-commit 钩子在事务完成,创建新版本后执行。大多数人用这个钩子来发送关于提交的描述性电子邮件,或者用来提醒其它工具(例如问题跟踪),发生了提交动作。一些配置也使用这个钩子触发版本库的备份进程。

如果 post-commit 钩子返回非零值,提交不会终止,因为它已经完成。然后,所有 stderr 的输出都会返回到客户端,让诊断钩子的失败更容易。

输入参数
传递给你钩子程序的命令行参数,按照顺序是:

1.版本库路径
2.提交创建的修订版本号

 

二、pre-commit钩子举例说明

1、此脚本会在提交前对事件进行检查

[root@CentOS_11 test]# cat /svndata/test/hooks/pre-commit
#!/bin/sh

REPOS="$1"
TXN="$2"
export LANG=en_US.UTF-8                                                           ; export LC_CTYPE=en_US.UTF-8 #设置本地字符集编码
MAX_SIZE=5242880000
FILTER='\.()$'
SVNLOOK=/usr/bin/svnlook
AUTHORS='(tao|wang)'

LOGMSG=`$SVNLOOK log -t "$TXN" "$REPOS" |wc -c`                     ;  判断输入log的最小字符,小于10个不让提交
if [ $LOGMSG -lt 10 ];then
echo -e "log message can't be empty or less 9 chars as commit!" >&2
exit 1
fi
SVNUSER=`$SVNLOOK author -t "$TXN" "$REPOS"`                        ;  限制提交用户,不是脚本定义的用户不让提交,不过基本svn权限配置文件就够了。
if echo $SVNUSER |/bin/grep -vEq $AUTHORS ;then
echo -e "Sorry you no be author" >&2
exit 1
fi

#定义过滤出当前提交的所以文件内容

File=$($SVNLOOK changed -t $TXN $REPOS|cut -d " " -f 4-)            ;  限制提交文件的类型

 

#对当前提交的所有文件进行循环

echo "$File" |while read f;do

#如果文件被过滤出来就则匹配,输出不允许提交。

if echo $f |tr A-Z a-z|grep -Eq $FILTER;then

echo "File $f is not allow $FILTER file" >&2
exit 1
fi
FilesSize=`$SVNLOOK cat -t "$TXN" "$REPOS" "$f" |wc -c`              ; 限制单个文件提交的大小
if [ "$FilesSize" -gt "$MAX_SIZE" ];then
echo "File $f is too large(must <=$MAX_SIZE)B" >&2
exit 1
fi
done

======================

提示:将以上脚本放到版本库的hooks下,并给执行权限,将提交时如果有符合以上限制,将限制提交。这里就不作测试,可自行测试,很简单。

======================

 

二、post-commit钩子举例说明

post-commit是在提交后进行的操作事件,用这个我们可以实现两个SVN服务器的时时同步,保持版本库的最新,或一些其他的方案,这里我只提供时时同步脚本。

环境:两台SVN服务器,版本库全部相同。并且两台配置SSH无密钥登陆。

说明:这里只在一台SVN上操作,另一台操作完全一样。

脚本原理:

1)先通过ssh远程执行无端SVN服务器中svn版本库的版本号和当前SVN服务器SVN版本库的版本号做对比。

2)对比完后,当前的SVN版本库最新大于远端SVN版本号,并通过svnadmin做增量备份。

3)备份完再通过ssh传到远端SVN服务器上,将增量备份进行还原操作

下面的脚本只是简单的实现,并未做完善,大家可以自己写更好的脚本实现,这里只是说明一个思路而已。

[root@CentOS_11 test]# cat /svndata/test/hooks/post-commit
#!/bin/sh
REPOS="$1"
REV="$2"
SVNLOOK=/usr/bin/svnlook
R_ID=`/usr/bin/ssh root@192.168.1.12 "$SVNLOOK youngest /svndata/test/"`
L_ID=`$SVNLOOK youngest $REPOS`
[ "$R_ID" -eq "$L_ID" ] && {
echo "The ID is neweast!!" >>/root/a.log
}
[ "$R_ID" -gt "$L_ID" ] && {
echo "Warning The R_ID is Biger than L_ID" >>/root/a.log
}
[ "$R_ID" -lt "$L_ID" ] && {

R_ID_1=$((${R_ID}+1))
sleep 1
/usr/bin/svnadmin dump --incremental -r ${R_ID_1}:${L_ID} /svndata/test >/root/svn_inter_bak/test_${R_ID_1}:${L_ID}
[ $? -ne 0 ] && {
echo "bakcup test dump failed" >>/root/a.log
}||{
echo "test dump is OK" >>$LOGS/a.log
sleep 1
}
/usr/bin/scp /root/svn_inter_bak/test_${R_ID_1}:${L_ID} root@192.168.1.12:/root/svn_inter_dir/
[ $? -eq 0 ] && {
# /usr/bin/ssh root@192.168.1.12 "/bin/sh /root/svn_inter_restore.sh"
ssh root@192.168.1.12 "/usr/bin/svnadmin load /svndata/test < /root/svn_inter_dir/*"
ssh root@192.168.1.12 "/bin/rm -f /root/svn_inter_dir/*"
}||{
echo "warning..scp remote is failed" >>/root/a.log
}
}

================================================= 

 

转载于:https://www.cnblogs.com/wangbaigui/p/4411059.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/375168.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据库---T-SQL语句(一)

一、T-SQL语句 1.创建表:create table Name(Code varchar(50),) 主键&#xff1a;primary key 自增长&#xff1a;auto_increment 外键关系&#xff1a;references 非空&#xff1a;not null 2.删除表&#xff1a;drop table family 3.创建数据库&#xff1a;creat database…

或操作指令OR

逻辑”或”操作指令OR(逻辑加法) 000011101111 在给定的逻辑变量中&#xff0c;A或B只要有一个为1&#xff0c;其逻辑加的结果为1&#xff1b;两者都为1则逻辑加为1。 MOV AL,01100011BOR AL,10000000B ;按位根据加法表进行运算;结果AL 11100011B另一种说法是用1将相应位设为1M…

Java学习笔记---继承和super的用法

自从换了个视频教学,感觉比原来那个好多了,就是学校网速太渣,好多视频看一会卡半天,只能先看看已经下载的了. 不过也好,虽然不能从开始开始重新开,但是已经看过一次,在看一次也是好的,就当巩固学习了. 继承的关键字:extends 格式如下: class 子类名 extends父类名{ ... } 例如 …

html适配Anroid手机

本文全然是翻译与总结谷歌官方的教程&#xff0c;已确保文档的正确性。 免得大家被五花八门的其它的资料弄混了&#xff0c;也没有系统行的学习。 一、设置窗体尺寸和适配屏幕分辨率 谷歌官方文档提到两个大的方面。 1.Viewport视图窗体 这个是html中设置的。主要是设置高度和宽…

算术运算与逻辑运算

逻辑运算又称布尔运算,取值只有两个真或假,二进制数1和0在逻辑上可以代表真与假,是与否 算术运算...小学就开始学的了 两者的区别在与逻辑运算是按位进行的,位与位之间没有进位或借位.逻辑加法(OR)OR OPRD1,OPRD2 ;OPRD1<--OPRD1 OPRD2 算术加法(ADD)ADD OPRD1,OPRD2 ;O…

Webpack 入门指迷--转载(题叶)

最近看到这个东西&#xff0c;一头雾水。看了一些资料了解了Webpack概念&#xff0c;大体是webpack 是一个模块绑定器&#xff0c;主要目的是在浏览器上绑定 JavaScript 文件。 看到题叶写的一篇介绍&#xff0c;写的很好&#xff0c;转载连接http://segmentfault.com/a/119000…

非操作指令NOT

否操作指令NOT(又称逻辑非运算)01 ;非0等于110 ;非1等于0NOT OPRD ;该指令把操作数OPRD取反然后送回OPRDmov ah,11111111B ;FFHnot ah ;执行后AH0Hmov ah,11110000B ;F0Hnot ah ;执行后AH00001111B 0FH

jquery的动画学习--jquery权威指南

前面的fadeIn和fadeOut还有fadeTo以及sildeToggle还有sildeUp\sildeDown还有toggle还有show、hide等都经常用&#xff0c;就不再手写了&#xff0c;需要注意的是fadeTo的合理应用&#xff0c;可以规定opactiy的具体数值&#xff0c;另外各个效果的回调函数可以多用用。$("…

防止Button按钮重复点击

背景&#xff1a;在测试中&#xff0c;测试MM总喜欢连续重复点击Button&#xff0c;如果click事件的处理业务&#xff0c;稍微有些耗时&#xff0c;或者设备反应比较慢时&#xff0c;就会响应2遍处理&#xff0c;导致错误的现象出现。 前提&#xff1a;click事件的处理业务&…

8086交换指令XCHG

XCHG OPRD1,OPRD2;实现OPRD1与OPRD2之间数据交换;OPRD1,OPRD2同时是字节或字操作数, MOV AX,1 MOV BX,2 XCHG AX,BX ;执行后AX2,BX1

[傅里叶变换及其应用学习笔记] 二十四. 级联,脉冲响应

我们上节课学习了 在离散有限维空间中&#xff0c;任何线性系统都是通过矩阵间的相乘得到的在连续无限维空间中&#xff0c;任何线性系统都是通过对核函数的积分得到的脉冲响应&#xff08;impulse response&#xff09; 级联线性系统&#xff08;Cascading linear system&…

WPF如何实现TreeView节点重命名

我们经常看到一些软件比如酷狗音乐&#xff0c;在对列表右键进行重命名的时候&#xff0c;当前列表会泛白并且进入可编辑状态&#xff0c;当我们更改完成后就会并进入非编辑状态&#xff0c;这些具体是怎么实现的呢&#xff1f;下面的方法也许会提供一些思路&#xff0c;下面的…

8086地址传送指令LEA

LEA REG,OPRD ;操作数OPRD必须是一个存储器操作数 LEA AX,IDATA ;把IDATA的偏移地址传送到AX寄存器中DATA SEGMENTIDATA DW 1,2,3,4 DATA ENDS CODE SEGEMNT BEG:MOV AX,OFFSET IDATA ;AXIDATA的偏移地址LEA AX,IDATA ;AXIDATA的偏移地址LEA AX,DS:[IDATA] ;把ds:[IDA…

Shell --- 批量修改文件后缀脚本

for f in *.$1; dofilenamebasename $fmv $f "${filename%.*}".$2; done; Usage:&#xff1a; rename suffix rename_suffix eg: rename dat txt > ls > a.dat > rename dat txt > ls > a.txt 转载于:https://www.cnblogs.com/RookieCoder/p/5140265.…

8086标志操作指令

标号传送指令LAHF 把FLAG低八位送入AH。不影响FLAG的任何位LAHF ;把CF,PF,AF,ZF,SF送入AH的相应位即0,2,4,6,7位SAHF 把AH送入FLAG低八位。根据AH中的内容FLAG的低八位受到影响,高位不受影响MOV AH,11111111B SAHF ;(执行后CF,PF,AF,ZF,SF等于1)PUSHF 把FLAG压入栈中。不影…

最大子序列和

一、遍历所有可能情况 (1234...N)所有可能子序列如下&#xff1a; 1&#xff1b;12&#xff1b;123...... 2&#xff1b;23&#xff1b;234...... ...... N 共N趟&#xff0c;没趟可能的情况由N&#xff0c;N-1...&#xff0c;1依次递减。 时间复杂度O(N3)的算法&#xff1a; i…

!--注释--和%--注释--%有什么区别

转载&#xff1a;版权所有&#xff1a;基础软件。作者邮箱&#xff1a;s.j.l.studiohotmail.com&#xff0c;sun.j.l.studiogmail.com。本文首发于 http://www.cnblogs.com/FoundationSoft。文章转载请保持此版权信息并注明出处。 使用ASP.NET编辑页面时&#xff0c;有两种注释…

团队开发——用户需求调研报告

用户需求调研报告 项目名称&#xff1a; 躲避小球 项目编号&#xff1a;001 调研主题&#xff1a; 用户需求 访谈时间&#xff1a;2015.4.10 调研地点&#xff1a; 石家庄铁道大学图书馆 访谈部门&#xff1a; 三个人行 参与人员&#xff1a; 林彦汝 1. 访谈目的 1、让用…

8086地址传送指令LDS,LES

LDS REG,OPRE;REG是一个16位寄存器,OPRD是一个存储器操作数,为双字项,高16位送入DS,低16位送入REG LDS BX,[SI](ds:si取得存储器中32位(双字),高16位作为段值送入DS中,低十六位送入指定的BX寄存器中)data segmentidata dd 12345678H data ends code segment assume cs:code,ds:…

设计模式(十五):解释器模式

一、定义 在设定环境中&#xff0c;定义一种规则或者语法&#xff0c;通过解释器来解释规则或者语法的含义. 二、实例&#xff1a;将 二十一 —> 21 2.1 设定我们的环境 Context public class Context{public string Input { get; set; }public int Output { get; se…