svn提交,限制上传大小,限制提交log为空的情况

细节注意:

  1. 默认svn hook都是不存在的。因为只有文件名去掉.tmpl,才有意义。而且要必须有可执行权限。
  2. pre-commit文件,命令语法属于shell语法,可以参考bash语法手册;
  3. =~的正则表达式,要注意双中括号的空格;还要注意等式右边的匹配关键词,不能加引号;
  4. 1>&2 这样才能把echo内容显示到终端里;
  5. svn hook不止pre-commit,其它文件,是有各自应用场景的。
svn hook文件名 hook相关参数 功能意义描述
start-commit REPOS-PATH, USER, CAPABILITIES svn commit提交命令与用户有关的,用start-commit
pre-commit REPOS-PATH, TXN-NAME svn commit提交命令与文件名有关的,用pre-commit
post-commit REPOS-PATH, REV svn commit提交命令与版本有关的,用post-commit

svn提交,限制上传大小,限制提交log为空的情况_第1张图片

第二个举例:

#!/bin/bash
export LANG="zh_CN.UTF-8" #确保中文日志显示正常,便于统计日志
REPOS="$1"
TXN="$2"
#限制日志长度
LENGTH=10
#exit 0

SVNLOOK="/usr/bin/svnlook"
BLACKLIST=".* *.o *.chw *.pck ~\$*"

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:\n ${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}`

################################## 检查变更文件 ################################## 
changed_files=$(${SVNLOOK} changed -t "${TXN}" "${REPOS}")

# 文件黑名单过滤 
# 过滤文件夹
#INBLACKLIST=$(echo ${changed_files} | grep "/target/"`" #文件夹前后必须有/,否则匹配会有误伤
#blacklist_exit

################################## 过滤prefix ################################## 
# 过滤所有以点开头的文件和文件夹
INBLACKLIST=$(echo ${changed_files} | grep "/\.")
blacklist_exit
# 过滤所有office的临时文件
INBLACKLIST=$(echo ${changed_files} | grep "~\\$")
blacklist_exit

################################## 过滤suffix ################################## 
# 过滤文件尾缀,.chw, .o, .pck

INBLACKLIST=$(echo ${changed_files} | grep "\.chw$")
blacklist_exit
INBLACKLIST=$(echo ${changed_files} | grep "\.o$")
blacklist_exit
INBLACKLIST=$(echo ${changed_files} | grep "\.pck$")
blacklist_exit

# 判断日志长度是否满足要求
if [ "${LOGMSG_LENGTH}" -lt ${LENGTH} ];then
error_exit
fi

exit 0

你可能感兴趣的:(svn&git)