在编写任何类型的 svn 挂钩时,如果您需要有关存储库或事务的信息,您希望使用svnlook
shell 脚本中的程序,或使用您选择的语言的 svn API。使用svnlook
速度更快,因为它绕过了所有 svn RA(远程访问)代码,包括授权检查层——因为脚本是在服务器的上下文中运行的,所以这不是问题。此外,您没有额外的开销来更新您不用于文件类型信息以外的任何内容的工作副本。
svnlook
包含许多用于调查修订(用于 post-* 挂钩)和事务(用于 pre-* 事务)的选项。这里特别感兴趣的是changed
选项。
更改:用法:svnlook 更改了 REPOS_PATH
打印已更改的路径。
有效选项:
-r [--revision] ARG : 指定修订号 ARG
-t [--transaction] ARG : 指定事务名称 ARG
--copy-info : 显示副本的详细信息
显示构成修订或事务的更改,如下所示:
A trunk/src/new-dir/
A trunk/src/new-dir/newheader.h
A trunk/src/new-dir/newsrc.c
U trunk/src/existingsrc.c
svnlook 的输出,当引用一个目录时,总是以 / 结尾。这是检测文件或目录的简单鉴别器。
但是,在处理删除时,事情确实变得有点模糊。如果删除目录,则该目录下的所有内容也将被删除,并且此信息不会显示在changed
. 看这里:
D trunk/src/new-dir/
U trunk/src/existingsrc.c
根据您正在查看的内容的描述,我猜您正在寻找某种形式的提交后报告。如果是这样,您可能需要查看subversion 邮件程序 post-* hook。即使您不想通过电子邮件发送结果,代码也演示了如何使用 svn API 遍历事务或修订以进行更改。