是否有可能从提交后钩子获取文件属性?SVN:从提交后钩子获取文件属性
我想检查所有更改的文件,如果其中一个或多个具有我的特定属性,我想执行一些操作。
svn propget my:property file.txt
^这只从本地工作副本读取属性,但我没有它在执行挂钩的环境中。
谢谢!
是否有可能从提交后钩子获取文件属性?SVN:从提交后钩子获取文件属性
我想检查所有更改的文件,如果其中一个或多个具有我的特定属性,我想执行一些操作。
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
一个与外壳的一个问题是你不能做循环中循环很容易。例如,如果我可以用$SVNLOOK plist
做一些事情,但是我已经将STDOUT传递给STDIN,那么将会很好,所以svnlook plist
的任何输出都会影响我的外部循环。你可以做各种奇怪的东西来使用其他文件描述符,但使用Python或Perl更简单。
你也真的不能改变任何关于提交。您不能更改文件或文件属性。唯一可以更改的是像svn:log
这样的修订版本,甚至不建议这样做。
不确定你在想什么,但要小心。还要明白,任何可能花费太长时间的操作都会延迟用户的提交,因为它们会等待您的提交后脚本运行。我见过有人试图在Subversion钩子中编译和运行单元测试。在这种情况下,最好使用像Jenkins这样的连续编译系统来执行提交后处理。
你可以看看我的svn-watcher-hook看看它是如何完成的。这是一个Perl脚本,但它并不复杂,我试图解释我所做的一切。它不应该太难理解。
谢谢,这工作。我也会看看詹金斯,因为我已经有一些钩子动作了,添加这个可能会减慢svn – innin 2012-04-12 11:22:54