实现并测试 Subversion 钩子

实现并测试 Subversion 钩子

背景
我正在尝试为 Subversion 实现一些提交钩子。我做了很多研究,试图让一个简单的测试钩子工作,但是我没有成功。

作为参考,我查看了以下链接中的方法,然后尝试结合它们:
1.Subversion 目录配置手册
2.Tortoisevn 服务器端钩子脚本手册
3.关于服务器端钩子的解释,其中包含指向 Subversion 手册的链接
4.预提交钩子的 wordaligned 教程
5.针对 commit-hooks 问题的 serverfault 解答

我还参考并使用了许多其他网站,但我仍然无法使提交钩子起作用。

我的环境
我的机器运行的是 RHEL6(Cent OS)。Subversion
位于远程机器上,未经主管许可我无法直接访问。
远程机器运行的是 Subversion 1.6。

这是我的存储库的当前结构:

test-for-svn-hooks
|-branches
|-hooks
| +-pre-commit
|-tags
+-trunk  

文件 pre-commit 暂时将其权限设置为777。所有目录的权限均设置为775

这是我为测试提交钩子而创建的示例脚本:

#!/usr/bin/env bash

echo "THOU SHALL NOT PASS" 1>&2

exit 1

我已经检查并测试了所有我能检查和测试的内容,以确保我的预提交钩子正常工作。我不知道还需要检查什么才能确保它正常工作。我可以提交任何我想提交的内容,并且屏幕上没有输出任何消息。

问题
1. 在实现钩子时我是否遗漏或忽略了什么?
2. 如果我以这种方式实现钩子,我是否需要担心在 Tortoisesvn 中再次实现相同的钩子?

非常感谢任何反馈和/或建议。

答案1

  1. 在实现钩子的过程中我是否遗漏或者忽略了什么?

不要使用权限 777。有时这实际上会适得其反。某些工具可能无法使用这种可疑的权限。就你的情况而言,这不太可能是问题所在,因为对我来说,使用此设置是可行的。但不要这样做。将其更改为 755。

另一项需要进行的健全性检查是在服务器上直接运行钩子脚本:

/path/to/test-for-svn-hooks/hooks/pre-commit

当你的脚本有更多有意义的内容时,你也应该使用适当的参数进行测试,例如:

/path/to/test-for-svn-hooks/hooks/pre-commit /path/to/test-for-svn-hooks TXN

接下来,使用服务器本身的结帐进行测试,例如:

svn co /path/to/test-for-svn-hooks /tmp/test1
cd /tmp/test1
date > date.txt
svn add date.txt
svn ci -m 'added some junk'

根据您在帖子中写的内容,这些步骤应该有效。我不知道您的测试失败的具体条件。如果您能达到这一点,那么也许您就会明白测试失败的原因。

  1. 如果我以这种方式实现钩子,我是否需要担心在 Tortoisesvn 中再次实现相同的钩子?

否。钩子是在服务器端定义的。无需在客户端执行任何操作。所有客户端都将遵守您在预提交钩子中定义的规则。

相关内容