是否可以从提交后挂钩获取文件属性?
我想检查所有更改的文件,如果其中一个或多个具有我的特定属性,我想执行一些操作。
svn propget my:property file.txt
^ 这仅从本地工作副本中读取属性,但我在执行钩子的环境中没有它。
谢谢!
当你使用钩子时,你应该使用svnlook
命令而不是svn
命令。
TXN=$1
REPOS=$2
SVNLOOK="/usr/bin/svnlook"
"$SVNLOOK" pget -t $TXN $REPOS my:property /path/in/repository
svnlook changed
您可以通过以下命令获取已更改的文件列表:
/usr/bin/svnlook changed -t $TXN
这将为您提供更改类型(U = 已更新,D = 已删除,M = 已修改,R = 已替换)和文件名。您可以使用该文件名和svnlook pget
命令来查看属性。
也许是这样的:
$SVNLOOK changed -t $TXN | while read changeType fileName
do
$SVNLOOK plist -t $TXN -v $REPOS $fileName
done
shell 的问题之一是你不能很容易地在循环中做循环。例如,如果我可以用 做某事会很好$SVNLOOK plist
,但我已经将 STDOUT 输送到 STDIN,因此任何输出svnlook plist
都会影响我的外循环。你可以做各种奇怪的事情来使用其他文件描述符,但使用 Python 或 Perl 更容易。
您也确实无法更改有关提交的任何内容。您不能更改文件或文件属性。您唯一可以更改的是修订属性,例如svn:log
,即使这样也不推荐。
不知道你在想什么,但要小心。还要了解任何可能花费太长时间的事情都会延迟用户的提交,因为他们等待您的提交后脚本运行。我见过人们尝试在 Subversion 挂钩中编译和运行单元测试。在这种情况下,您最好使用像Jenkins这样的持续构建系统来进行提交后处理。
你可以看看我的svn-watcher-hook看看它是如何完成的。这是一个 Perl 脚本,但并不是那么复杂,我尝试解释我所做的一切。应该不难理解。