SVNLOOK=/usr/bin/svnlook $SVNLOOK log -t "$TXN" "$REPOS" | \ grep "[a-zA-Z0-9]" > /dev/null || exit 1 SVNLOOK=/usr/bin/svnlook #$SVNLOOK log -t "$TXN" "$REPOS" | \ # grep "[a-zA-Z0-9]" > /dev/null || exit #commit-access-control.pl "$REPOS" "$TXN" commit-access-control.cfg || exit 1 LOGMSG=`$SVNLOOK log -t 且字数必须大于10个字符." 1>&2 exit 1 fi # All checks passed, so allow the commit. exit 0 其实就是把源文件中的以下3行进行注释: $SVNLOOK 1 commit-access-control.pl "$REPOS" "$TXN" commit-access-control.cfg || exit 1 然后添加以下几行命令: LOGMSG=`$SVNLOOK
SVNLOOK=/usr/bin/svnlook #$SVNLOOK log -t "$TXN" "$REPOS" | \ # grep "[a-zA-Z0-9]" > /dev/null || exit 1 commit_type=$(svnlook changed -t "$TXN" "$REPOS") #以下后缀可以不填写注释 except_list=". " |grep "^bug\-[0-9]*[0-9]\-" |wc -l ) emrg=$( $SVNLOOK log -t "$TXN" "$REPOS" |grep "^emrg\-[0-9 ]*[0-9]\-" |wc -l ) getlaststring=$($SVNLOOK log -t "$TXN" "$REPOS"|grep -o "^task\-[0-9]*[0-9]\- \|^bug\-[0-9]*[0-9]\-\|^emrg\-[0-9]*[0-9]\-") content=$($SVNLOOK log -t "$TXN" "$REPOS"|sed 's/\s
. :: @echo off set svnlook=”D:/Program Files/VisualSVN Server/bin/svnlook.exe” setlocal rem Subversion to the repository and transaction id set REPOS=%1 set TXN=%2 rem check for an empty log message %svnlook
/bin/bash REPOS="$1" TXN="$2" SVNLOOK="/usr/bin/svnlook" PHP="/usr/bin/php" LOG=$($SVNLOOK log -t TXN" "$REPOS") if [ "$LOG" = "" ]; then echo "Please input log" 1>&2 exit 1 fi FILES=$($SVNLOOK changed -t "$TXN" "$REPOS" | awk '/^[AU]/ {print $NF}') for FILE in $FILES; do CONTENT=$($SVNLOOK
/bin/shREPOS="$1"TXN="$2"SVNLOOK=/usr/bin/svnlook #这里根据自己实际情况填写LOGMSG=$($SVNLOOK log -t "$TXN" "$REPOS 脚本命令介绍: SVNLOOK:指定自己的svnlook所在的目录位置 LOGMSG=$($SVNLOOK log -t "$TXN" "$REPOS" | grep "[a-zA-Z0-9]" | wc -c): $SVNLOOK log -t "$TXN" "$REPOS":获取svn提交的日志记录 grep "[a-zA-Z0-9]":这个正则意思是大小写字母及数字 if [ "$LOGMSG" 总结: 1:pre-commit文件是在SVN_HOEM下的hooks目录中 2:脚本编写时候:SVNLOOK的值要根据自己实际情况填写 3:一定要记得赋权,执行权限
/bin/bash REPOS="$1" TXN="$2" SVNLOOK=/usr/bin/svnlook LOGMSG=$($SVNLOOK log -t "$TXN" "$REPOS") LOGFORMAT LOGMSG} =~ ${LOGFORMAT} ]] || exit 1 exit 0 LOGFORMAT为我们根据规范写的正则表达式,符合[xxx][(dev|bug|misc)]xxx这样的规则即可 通过svnlook /bin/bash REPOS="$1" REV="$2" export LANG=zh_CN # svn info AUTHOR=$(svnlook author -r $REV $REPOS) MESSAGE=$(svnlook log -r $REV $REPOS) CHANGED=$(svnlook changed -r $REV $REPOS) REPERTORY=$(echo $REPOS ${REPERTORY}&v=${REV}" else mail -s "SVN 更新通知:系统版本号【$REV】" leader@ops-coffee.cn < $LOGFILE fi 通过svnlook
The hook # program can use the 'svnlook' utility to help it examine the txn. (like svn:log or svn:author). *** # # This is why we recommend using the read-only 'svnlook SVNLOOK=/usr/bin/svnlook # 添加以下5行代码 LOGMSG=`$SVNLOOK log -t "$TXN" "$REPOS" | grep /bin/sh REPOS="$1" TXN="$2" SVNLOOK=/usr/bin/svnlook # 同pre-commit.tmpl 文件中的SVNLOOK LOGMSG=`$SVNLOOK log -t "$TXN" "$REPOS" | grep "[a-zA-Z0-9]" | wc -c` if [ "$
/bin/bash REPOS="$1" TXN="$2" SVNLOOK=/usr/bin/svnlook for FILE in $($SVNLOOK changed -t "$TXN" "$ REPOS" | awk '/^[AU]/ {print $NF}'); do if $SVNLOOK cat -t "$TXN" "$REPOS" "$FILE" | grep -q $'^\
# 钩子脚本的日志 # 脚本的标准输出和标准错误输出都打印到日志文件里 exec 1>>"$LOGFILE" exec 2>&1 SVN=/usr/bin/svn SVNLOOK =/usr/bin/svnlook TIME=$(date "+%Y-%m-%d %H:%M:%S") AUTHOR=$($SVNLOOK author -r $REV "$REPOS") #提交作者 CHANGEDDIRS=$($SVNLOOK dirs-changed $REPOS) #修改的目录集合 MESSAGE=$($SVNLOOK log -r $REV "
= Start Check ===============" for _check_proejct_ in ${PROJECT};do make_log "${SVN_BASICDIR}/svnlook youngest ${BAKPATH}/${_check_proejct_}" ${SVN_BASICDIR}/svnlook youngest ${BAKPATH}/${_check_proejct DOWNLOAD_DIR}/${BAKDIR}/${_project_} ${SVNDIR}/${_project_} &> /dev/null make_log "${SVN_BASICDIR}/svnlook youngest ${SVNDIR}/${_project_}" ${SVN_BASICDIR}/svnlook youngest ${SVNDIR}/${_project_} &>
. :: @echo off set svnlook="D:/Program Files/VisualSVN Server/bin/svnlook.exe" setlocal rem Subversion path to the repository and transaction id set REPOS=%1 set TXN=%2 rem check for an empty log message %svnlook
SVNLOOK=/usr/bin/svnlook #$SVNLOOK log -t "$TXN" "$REPOS" | \ # grep "[a-zA-Z0-9]" > /dev/null || exit #commit-access-control.pl "$REPOS" "$TXN" commit-access-control.cfg || exit 1 LOGMSG=`$SVNLOOK log -t "$1" REV="$2" LOGFILE=/data1/svn_data/projects/san/hooks/changedir.log exec 1>>"$LOGFILE" exec 2>&1 SVNLOOK =/usr/bin/svnlook TIME=$(date "+%Y-%m-%d %H:%M:%S") #提交作者 AUTHOR=$($SVNLOOK author -r $REV "$REPOS") #修改的目录集合 CHANGEDDIRS=$($SVNLOOK dirs-changed $REPOS) #提交时的备注信息,不建议用中文 MESSAGE=$($SVNLOOK log -r $REV
REV="$2" # 钩子脚本的日志 LOGFILE=/var/log/svn.log # 脚本的标准输出和标准错误输出都打印到日志文件里 exec 1>>"$LOGFILE" exec 2>&1 SVNLOOK =/usr/bin/svnlook TIME=$(date "+%Y-%m-%d %H:%M:%S") # 提交作者 AUTHOR=$($SVNLOOK author -r "$REV" "$REPOS ") # 修改的目录集合 CHANGEDDIRS=$($SVNLOOK dirs-changed "$REPOS") # 提交时的备注信息,不建议用中文 MESSAGE=$($SVNLOOK log -
svn_backup.log for i in $repos do pre_youngest=`cat $backup_path/$i/youngest_revision` #获取上次备份到的版本号 youngest=`svnlook $back_path #进入目录,使总备份文件存放在该目录 echo `date` >> $back_path/svn_backup.log for i in $repos do youngest=`svnlook
/bin/bash REPOS="$1" TXN="$2" #定义文件的大小限制,这里设置为5M MaxSize=5242880 #定义snvlook的命令路径 SVNLOOK=/usr /bin/svnlook #统计提交的信息字符个数 Messages=`$SVNLOOK log -t "$TXN" "$REPOS" | wc -c` #判断字符数是否大于8个字节数 if " 1>&2 exit 1 fi #查看文件的大小 FileSize=`$SVNLOOK cat -t "$TXN" "$REPOS" "$f" | wc -c
echo "Delete {}" \; -exec rm "{}" \; # 全备份 svnadmin hotcopy ${SVNPATH} ${BAKSUBDIR} # 如果能打印版本号说明备份正确 svnlook
要继续优化: 需求:实现自动提交,自动的触发邮件通知相关的人员进行评审 在svn hook中有个post-conmmit的文件可以在这里面写上脚本: RBUSER=`svnlook author -r
D:\denglintao\svnServer\dlt1.dump 在导入新库中可能会发生Repositories下的目录不能访问,需先获取权限后再执行load命令 查看SVN当前库中最新版本 svnlook
sysconfig/svnserve /run/svnserve /usr/bin/svn /usr/bin/svnadmin /usr/bin/svndumpfilter /usr/bin/svnlook
优点:可以统一所有使用版本库的人员进行提交限制,不需要每一个人在本地进行配置,可以使用SVNLOOK命令,来获取提交的内容、提交人员、提交信息等等。