检查svn 提交时log格式的脚本pre-commit

pre-commit文件放到 SVN repository下hooks目录里
需要设为可执行

Linux环境下的

#!/bin/sh


REPOS="$1"
TXN="$2"
TYPE="$3"
# Make sure that the log message contains some text.
SVNLOOK=/usr/bin/svnlook

if test -z "$TYPE" ; then
    TYPE="-t"
fi
#$SVNLOOK log -t "$TXN" "$REPOS" | \
#   grep "[a-zA-Z0-9]" > /dev/null || exit 1
look() {
    $SVNLOOK "$@" "$TYPE" "$TXN" "$REPOS"
}

LOGMSG=`look log`

if echo $LOGMSG | grep '.' > /dev/null; then
NOT_EMPTY=1
else
echo "Message must be filled">&2
        exit -2
fi

#echo $REPOS >&2
#look changed>&2
#exit 1

IN_BRANCH=0
#echo $REPOS | grep -iE "^/var/www/svn/test/branches"
CHANGES=`look changed`
#echo $CHANGES >&2
for f in $CHANGES ;do
  #echo $f>&2
  echo $f | grep -iE "^branches/br130609" > /dev/null
  if [ $? -eq 0 ]; then
    IN_BRANCH=1
  fi
done
#echo $IN_BRANCH>&2
#exit 1

if [ $IN_BRANCH -eq 1 ]; then

echo $LOGMSG | grep -iE "^(new|add|improve|refactor|ci|fix|modify)\s*:\s*[0-9\.]+[mh]\s*:.+" >/dev/null
CHECKRE1=$?

echo $LOGMSG | grep -iE "^(bug|bugfix)\s*:\s*[0-9\.][mh]\s*:\s*((BUMBLEBEE-[0-9]+)+,*)+\s*:.*" >/dev/null
CHECKRE2=$?

if [ $CHECKRE1 -ne 0 ] && [ $CHECKRE2 -ne 0 ]; then
   echo " Wrong format, please write according to:http://wiki.cntnsoft.int/pages/viewpage.action?pageId=20643842 ">&2
   exit -3
fi

fi

if look changed | grep '^A ' | sed -r 's#^A +##'  | grep -iE '\.(ncb|opt|plg|suo|aps|bsc|idb|obj|pcc|pch|pdb|sbr|exe|tmp|ilk|o|so|a|class|zip|log)$|~$|^(Debug|Release|Debug_Ts|Release_Ts|Thumbs\.db)$|(^\.)' 1>&2 ; then
    echo "Including not permitted file: ncb|opt|plg|suo|aps|bsc|idb|obj|pcc|pch|pdb|sbr|exe|tmp|ilk|o|so|a|class|zip|log">&2
    exit 1
fi

# Check that the author of this commit has the rights to perform
# the commit on the files and directories being modified.
#commit-access-control.pl "$REPOS" "$TXN" commit-access-control.cfg || exit 1

# All checks passed, so allow the commit.
exit 0


你可能感兴趣的:(SVN)