我需要执行以下操作,我只能想到一个svn钩子解决方案,但修改钩子中的事务应该是坏的:
我们有一个生产存储库和一个测试存储库。我想确保当有人提交到生产存储库时,他们确信它并且不会错误地将它们用于测试存储库。因此,如果提交者没有使用“PRODUCTION”行启动日志消息,那么我会使用预提交挂钩拒绝提交到生产存储库中,然后将该行删除,以便剩余的日志消息保留。
这种情况是否证明使用钩子修改事务的(日志消息)是正确的? 如果没有,这会以什么方式造成麻烦? 有人可以提出更好的选择吗?
答案 0 :(得分:1)
您可以在修改该日志消息的提交后挂钩中编辑版本属性。这似乎比在事务完成之前修改事务更清晰。
答案 1 :(得分:0)
如果用户不遵守提交要求,那么在钩子脚本中回滚事务是完全正确的。
答案 2 :(得分:0)
如果用户未遵守标准,您绝对可以在预提交期间拒绝提交。
此外,您可以在预提交期间修改NON-VERSIONED属性。非版本化属性的示例是... svn:log,您要修改它。我相信规则是,如果它是一个版本属性,它是非版本的,但如果它是一个文件/目录属性,它是版本化的。
修订版属性类似于svn:log,svn:author等 - 通常应用于存储库根目录的修订版。
有许多示例预提交钩子脚本在提交期间修改svn:log。一个简单的例子是FreeBSD的log-police.py,用于支持FreeBSD核心操作系统的repo中。
答案 3 :(得分:0)
我也在寻找修改svn:log的预提交钩子的例子,因为它明确地说你可以在pre-commit.tmpl中这样做。我的BASH pre-commit script for Subversion调用Python脚本,以便通过将JIRA问题密钥扩展到JIRA问题摘要来设置日志消息。我发现,即使在撰写本文时,也没有很多例子,我也发现大多数人认为这是一个坏主意,因为它们混淆了修改非版本的属性正确修改交易。
我发现实际修改svn的唯一方法:登录预提交钩子是使用Python绑定到svn API,就像他们在FreeBSD项目中使用" log一样警察"脚本。 James Tauber解释了这一点(虽然这篇文章的日期是因为它指的是svn 1.3) - 谷歌因为我无法在这个答案中发布更多链接。
重要的是要知道除了Subversion本身附带的基于python-subversion SWIG的包装器(例如SubvertPy)之外,还有几种不同的Python绑定到Subversion。 The PySVN project包含'交易'接口,它将使您能够在预提交挂钩中修改svn:log。它实际上有点记录,而不是标准的python-subversion绑定。