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

细节注意:

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

在这里插入图片描述

#file size < 10MB
LOG_INFO=`$SVNLOOK log -t "$TXN" "$REPOS"`
files=`$SVNLOOK changed -t "$TXN" "$REPOS" | awk '{print $2}'`
for f in $files
do
	file_size=`$SVNLOOK cat -t $TXN $REPOS $f | wc -c`
	if [[ "$LOG_INFO" =~ admin: ]]
	then
		echo "admin has confirmed" 1>&2
	elif [ $file_size -gt 10485760 ]
	then
		echo "" 1>&2
		file_size_inMB=`echo "scale=3;$file_size/1024/1024" | bc`;
		echo "Error:FILESIZE:svn commit file size must < 10MB;[$file_size_inMB MB]" 1>&2
		echo "please call admin:qilei" 1>&2
		exit 1
	fi
done

第二个举例:

#!/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
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值