• 工作随笔——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。

         
  • 相关阅读:
    selenium+java+testNG+maven环境搭建
    pycharm配置git版本管理
    Android的WebView有哪些坑?
    Android M中 JNI的入门学习
    Android初学者必知会的编程规范
    Android Studio中怎么使用DDMS工具?
    Android开发中适配多种 ROM 的快捷方式是如何实现的?
    Android中ListView 控件与 Adapter 适配器如何使用?
    Android中如何为自定义控件增加状态?
    29个android开发常用的类、方法及接口
  • 原文地址:https://www.cnblogs.com/zz0412/p/3885333.html
Copyright © 2020-2023  润新知