1

是否可以从提交后挂钩获取文件属性?

我想检查所有更改的文件,如果其中一个或多个具有我的特定属性,我想执行一些操作。

svn propget my:property file.txt

^ 这仅从本地工作副本中读取属性,但我在执行钩子的环境中没有它。

谢谢!

4

1 回答 1

1

当你使用钩子时,你应该使用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 脚本,但并不是那么复杂,我尝试解释我所做的一切。应该不难理解。

于 2012-04-12T04:55:51.863 回答