我有一种sudo
失败的感觉。
没关系,因为你想做的是一个坏主意。该存储库导出有多大?这需要多长时间。20秒?2分钟?
假设您是 Subversion 用户,并且您尝试签入更改。你做了一个提交,然后突然你的终端似乎冻结了。也许是 20 秒,也许是两分钟。完成提交后挂钩所需的一切。男孩,你自己想想,Subversion 太慢了……
更好的方法是使用 crontab。而且,如果您能够以 root 身份执行操作,那么您当然可以执行 crontab。
跟踪最近的 Subversion 修订。然后,如果您检测到更改,则执行导出。简单的脚本,易于实现,并且在等待导出时不会冻结 Subversion。
顺便说一下,哪个用户正在运行 Subversion 服务器进程。那是执行钩子的用户。如果您的/etc/sudoers
文件中没有将该用户设置为不需要密码,那么您的提交后挂钩将失败。此外,Subversion 挂钩没有路径,因此它们无法找到该sudo
命令,您必须为其所在的目录添加前缀。
尽管如此,即使你让它工作,它仍然是一个坏主意。
这是尝试创建一个可以执行您想要的操作的 crontab。完全未经测试。我今晚根本没时间。但是,它会给你一个想法:
#! /bin/bash
REPO_URL="http://...."
DIR=... #Where you want the export
LAST_REV_FILE=/var/run/svn.last.rev
SVN=/usr/bin/svn
SED=/usr/bin/sed
current_rev=$($SVN info $REPO_URL | $SED -n '/^Revision: /s/^Revision: //p')
if [ ! -f $LAST_REV_FILE ]
then
echo $current_rev > $LAST_REV_FILE
exit 0
fi
#You're here if there is a last.rev.file
last_rev=$(echo $LAST_REV_FILE)
[ $last_rev -ge $current_rev ] && exit 0
# New Revision
echo $current_rev > $LAST_REV_FILE
rm -rf $DIR
$SVN export $REPO_URL $DIR