Apache Subversion预先提交以限制文件

时间:2015-06-18 14:33:21

标签: apache svn hook pre-commit

我是Apache SVN的新手,我需要一些帮助来使用预提交脚本来过滤哪些文件上传到我的存储库。

我经常搜索并在另一个问题上找到这个脚本,但它对我不起作用。

#!/bin/bash

REPOS=$1
TXN=$2
AWK=/usr/bin/awk
SVNLOOK="/usr/bin/svnlook";

#Put all the restricted formats in variable FILTER
FILTER=".(sh|xls|xlsx|exe|xlsm|XLSM|vsd|VSD|bak|BAK|class|CLASS)$"

# Figure out what directories have changed using svnlook.
FILES=`${SVNLOOK} changed -t ${REPOS}  ${TXN} | ${AWK} '{ print $2 }'` > /dev/null

for FILE in $FILES; do

#Get the base Filename to extract its extension
NAME=`basename "$FILE"`

#Get the extension of the current file
EXTENSION=`echo "$NAME" | cut -d'.' -f2-`

#Checks if it contains the restricted format
if [[ "$FILTER" == *"$EXTENSION"* ]]; then
echo "Your commit has been blocked because you are trying to commit a restricted file." 1>&2
echo "Please contact SVN Admin. -- Thank you" 1>&2
exit 1

fi

done
exit 0

如果我尝试使用svnlook changed -t repodirectory,则因为缺少子命令而无效。 我覆盖了我的pre-commit.tmpl,但它不起作用,有人可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

首先 - 似乎你错误地使用了svnlook。它应该有参数:

svnlook changed ${REPOS} -t ${TXN}

-t表示从交易中读取'和TXN - 交易名称本身。

第二 - 不确定我是否理解正确,但是钩子文件的名称应该是pre-commit而不是pre-commit.tmpl

第三 - 预先提交应具有正确的权利。对于测试,请尝试+ rwx

更新。获取测试的事务对象并不容易,但您可以使用svnlook -r <revision> <repositiry_path>并对已经提交的修订进行试验。