zoukankan      html  css  js  c++  java
  • 【SVN】关于钩子的一些使用

    前一段时间,李总让我研究一下SVN钩子的使用,以前没接触过这方面东西,在这里记录一下。

    何为钩子?

    所谓SVN钩子就是一些与版本库事件发生时触发的程序,例如新修订版本的创建,或者是未版本化属性的修改。目前subversion提供了如下几种钩子:post-commit、post-lock、post-revprop-change、post-unlock、pre-commit、pre-lock、pre-revprop-change、pre-unlock、start-commit
    我们随便打开一个hooks目录,就可以看到:
    这里写图片描述

    利用钩子,实现限制上传文件的大小功能:

    在仓库hooks目录下,编辑pre-commit脚本文件,内容如下:

    #!/bin/bash
    REPOS="$1"     #仓库的路径
    TXN="$2"       #本次事务的一个事务号,如果提交成功则返回0,否则返回非0结果
    SVNLOOK=/usr/bin/svnlook   
    MAX_SIZE=512000     #限制上传文件的大小
    
    files=$($SVNLOOK changed -t $TXN $REPOS | awk '{print $2}')
    
    # check check 
    if [[ $files =~ "project_nuli" ]];then
    for f in $files
    do
        # check file size
        filesize=$($SVNLOOK cat -t $TXN $REPOS $f | wc -c)
        if [ $filesize -gt $MAX_SIZE ] ; then
            echo "File $f is too large (must <= $MAX_SIZE)" >> /dev/stderr
            exit 1
        fi
    done
    fi
    exit 0

    客户端提交大于500K文件会返回 File $f is too large (must <= $MAX_SIZE)

    利用钩子,实现限制上传文件的类型:

    在仓库hooks目录下,编辑pre-commit脚本文件,内容如下:

    #!/bin/bash
    REPOS="$1"     #仓库的路径
    TXN="$2"       #本次事务的一个事务号,如果提交成功则返回0,否则返回非0结果
    SVNLOOK=/usr/bin/svnlook 
    FILTER='.(zip|rar|o|ibj|tar|gz)$'    #限制扩展名
    
    files=$($SVNLOOK changed -t $TXN $REPOS |cut -d "" -f 4-)
    #echo "$files" >&2
    #echo "$r" >&2
    #exit 1
    
    rc=0
    echo "$files"|while read f;
    do
    #check file type
    if echo $f |tr A-Z a-z|grep -Eq $FILTER;
    then
            echo "File $f is not allow ($FILTER) file" >&2
            exit 1;
    fi
    done
    exit 0

    最后,等这段时间忙过去了,得去学学Shell脚本怎么写。

  • 相关阅读:
    十分钟开发一个调用Activity的PhoneGap插件
    Mac下MAMP初试体验
    探索Android中的Parcel机制(上)
    两个栈实现队列+两个队列实现栈----java
    php实现工厂模式
    Hibernate Criterion
    Android用户界面概览
    秒杀多线程第四篇 一个经典的多线程同步问题
    Java串口通信具体解释
    逗比之——程序猿装逼手冊1(0基础版)
  • 原文地址:https://www.cnblogs.com/zll-0405/p/9863329.html
Copyright © 2011-2022 走看看