• 工作随笔——pre-commit钩子限制日志长度和提交的文件类型


    2014-09-18:解决Subversion edge 的hook中文乱码问题

    近期检查SVN时发现备份好的文件体积异常庞大。才跑2个月备份出来的大小就有4G多。仔细查询发现很多很多IDE自动生成的二进制文件。。。我类个去。好吧,开发不自觉就只有强制限制了。

    google的时候发现这篇文章:http://blog.csdn.net/clever101/article/details/8560833

    自己动手丰衣足食。脚本如下:

    #!/bin/bash
    export LANG="zh_CN.UTF-8"  #确保中文日志显示正常,便于统计日志
    REPOS="$1"
    TXN="$2"
    #限制日志长度
    LENGTH=10
    
    SVNLOOK="/usr/local/csvn/bin/svnlook"
    BLACKLIST="target  build  classes  bin/target  .*  *.iml  *.ipr  *.iws  *.class " 
    
    function error_exit(){
        echo -e "1.Not allowed empty log " >&2
        echo -e "2.Logs must be greater than ${LENGTH} characters or chinese" >&2
        exit 1
    }
    
    function blacklist_exit(){
        if [ ! -z "${INBLACKLIST}" ] ;then
            echo -e "some files in the blacklist , please cheack again !" >&2
            echo -e "blacklist:
     ${BLACKLIST}" >&2
            exit 1
        fi
    }
    
    # 获取字符数量(包括换行符)
    TEMP_LENGTH=`${SVNLOOK} log -t "${TXN}" "${REPOS}"|sed 's/s*$//g'|sed 's/^s*//g'| wc --chars`
    # 统计换行符
    TEMP_LINE=`${SVNLOOK} log -t "${TXN}" "${REPOS}"| wc --lines`
    # 真实字符数量
    LOGMSG_LENGTH=`expr ${TEMP_LENGTH} - ${TEMP_LINE}`
    # 文件黑名单过滤 
    # 过滤文件夹
    INBLACKLIST="`${SVNLOOK} changed -t "${TXN}" "${REPOS}" | grep "/target/"`"  #文件夹前后必须有/,否则匹配会有误伤
    blacklist_exit
    INBLACKLIST="`${SVNLOOK} changed -t "${TXN}" "${REPOS}" | grep "/build/"`"
    blacklist_exit
    INBLACKLIST="`${SVNLOOK} changed -t "${TXN}" "${REPOS}" | grep "/classes/"`"
    blacklist_exit
    INBLACKLIST="`${SVNLOOK} changed -t "${TXN}" "${REPOS}" | grep "/bin/target/"`"
    blacklist_exit
    # 过滤所有已点开头的文件和文件夹
    INBLACKLIST="`${SVNLOOK} changed -t "${TXN}" "${REPOS}" | grep "/."`"
    blacklist_exit
    # 过滤文件尾缀
    INBLACKLIST="`${SVNLOOK} changed -t "${TXN}" "${REPOS}" | grep ".iml$"`"
    blacklist_exit
    INBLACKLIST="`${SVNLOOK} changed -t "${TXN}" "${REPOS}" | grep ".ipr$"`"
    blacklist_exit
    INBLACKLIST="`${SVNLOOK} changed -t "${TXN}" "${REPOS}" | grep ".iws$"`"
    blacklist_exit
    INBLACKLIST="`${SVNLOOK} changed -t "${TXN}" "${REPOS}" | grep ".class$"`"
    blacklist_exit
    
    # 判断日志长度是否满足要求
    if [ "${LOGMSG_LENGTH}" -lt ${LENGTH} ];then
        error_exit
    fi
    
    exit 0

    PS:Subversion edge需要在高级管理中开启hooks编码为UTF-8,否则。会导致客户端无法解析返回的日志直接报错。默认为ASCII。

         
  • 相关阅读:
    Session 0 隔离
    在DIV容器中使用浮动元素
    Linq学习总结(5)——标准查询运算符
    Linq学习总结(3)——yield
    消息拦截的简单实现
    网站内容可访问性——关于背景与前景颜色的对比标准
    CSS优先级
    Linq学习总结(4)——Lambda表达式
    element ui表格的校验和自定义校验规则
    vue 递归组件的两种方法
  • 原文地址:https://www.cnblogs.com/zz0412/p/3885333.html
Copyright © 2020-2023  润新知