• 浅谈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

     1 #!/bin/sh
     2 REPOS="$1"
     3 TXN="$2"
     4 
     5 LOGMSG=`svnlook log -t "$TXN" "$REPOS"|wc -c`
     6 if [ $LOGMSG -lt 10 ]; then
     7     echo $LOGMSG 1>&2
     8     echo -e "
    Log message is too short" 1>&2
     9     exit 1
    10 fi
    11 # All checks passed, so allow the commit.
    12 exit 0

    2.用户提交完之后更新服务器上面相应的目录

    在hooks目录下新增post-commit,并增加可执行权限:

    1 REPOS="$1"
    2 REV="$2"
    3 PROJECT="/root/projects/hello"
    4 PASSWD="/root/projects/save/svn_admin"
    5 
    6 svn update -q $PROJECT --non-interactive --username admin --password `cat $PASSWD`

    注意:保存后一定要把文件权限增加可执行权限,不然用户会出现错误。

    另外,由于安全原因,Subversion版本库在一个空环境中执行钩子脚本—就是没有任何环境变量,甚至没有$PATH或%PATH%。由于这个原因,许多管理员会感到很困惑,它们的钩子脚本手工运行时正常,可在Subversion中却不能运行。要注意,必须在你的钩子中设置好环境变量或为你的程序指定好绝对路径

  • 相关阅读:
    .Net Core3.0 WebApi 项目框架搭建 十二:创建项目模板上传到Nuget
    .Net Core3.0 WebApi 项目框架搭建 十一:基于Log4j的全局异常处理
    .Net Core3.0 WebApi 项目框架搭建 十:使用AutoMapper实现模型映射
    .Net Core3.0 WebApi 项目框架搭建 九:使用Nginx实现跨域
    .Net Core3.0 WebApi 项目框架搭建 八:使用Redis做数据缓存
    .Net Core3.0 WebApi 项目框架搭建 七:AutoFac
    .Net Core3.0 WebApi 项目框架搭建 六: Sqlsugar+异步泛型仓储
    Abp领域事件(EventBus)源码解析
    Redis发布订阅模式-3
    Redis发布订阅模式-2
  • 原文地址:https://www.cnblogs.com/harrymore/p/8574134.html
Copyright © 2020-2023  润新知