SVN在钩子内提交消息更新

时间:2013-02-12 21:10:57

标签: svn

我的最终目标如下:

我们希望在我们的问题管理软件(在我们的案例中为Atlassion Jira)中创建代码更改的完全可跟踪性。我们已经强制用户要求Jira票号(尽管这是一个软要求)。我们的开发人员经常要做的事情之一就是在遇到代码时修复代码中的小问题。为了获得适当的可追溯性,他们需要转到jira并注册一张票并使用该票号来提交更改。但这真的很乏味且耗时。

因此,我们的计划是更容易将小修复提交到代码库,但在我们的问题管理系统中确实有这些更改的单独票证。

因此,最好的方法是简单地处理在提交消息中定义的宏,该宏自动创建票证。 e.g。

#improvement NPE fix on whatchamacallit it. This will gracefully handle 
empty values. But in places when thingamabob expects an exception, it will
no longer receive it.

这应该自动记录我们在项目中的jira的票证"快速修复"。此票证生成将导致ID为QF-1234的票证。

这一切都可以从预提交钩子中完成。但是,我们希望在提交消息中使用票号QF-1234而不是##;#improvement'宏。这样SVN客户端就可以链接到票号。

我更希望这种机制以同步和阻止的方式工作。明显的副作用是,如果无法达到jira,则提交失败。但这是可以接受的。

自动票证创建可在预提交挂钩内实现。但是我没有看到在提交完成之前更新提交消息的方法。

所以我的问题如下,是否有人知道如何在SVN事务中更新提交消息(无需创建修改后的SVN库)。 或者有一些其他可靠的方法来实现相同的结果。我知道我可以在新事务中更新提交消息,但这有很多不良副作用。

注意,如果出现任何问题,我会对一个脆弱的解决方案感到非常满意。重新投入是便宜的,手动创建问题不到1分钟(但我宁愿不浪费那一分钟)。

1 个答案:

答案 0 :(得分:1)

  

有谁知道我如何能够在SVN事务中更新提交消息

更改挂钩中的事务内容(即使理论上可能)非常不安全且不推荐策略。简而言之:如果您希望获得可预测的结果,请不要这样做!

如果必须在log-message中进行替换,则必须使用propedit | propdel-propset(用于管理修订版属性的第二种命令形式)在下一次独立提交(可能在post-commit hook中发生)中执行此操作

提交后挂钩任务的简短测试

修订版4的起点

>svn log file:///Z:/PE-TEST/trunk
------------------------------------------------------------------------
r4 | Badger | 2013-02-16 14:41:46 +0600 (Сб, 16 фев 2013) | 1 line

Replacement
------------------------------------------------------------------------
r3 | Badger | 2013-02-16 14:33:46 +0600 (Сб, 16 фев 2013) | 1 line

Extended version
------------------------------------------------------------------------
r2 | Badger | 2013-02-16 14:32:00 +0600 (Сб, 16 фев 2013) | 1 line

Initial data
------------------------------------------------------------------------
r1 | Badger | 2013-02-16 14:27:49 +0600 (Сб, 16 фев 2013) | 1 line

Imported folder structure
------------------------------------------------------------------------

首次尝试

>svn propset svn:log --revprop -r 4 "Replacement for #1234" file:///Z:/PE-TEST/
svn: E165006: Repository has not been enabled to accept revision propchanges;
ask the administrator to create a pre-revprop-change hook

pre-revprop-change hook

type z:\PE-TEST\hooks\pre-revprop-change.bat
exit 0

最终行动

>svn propset svn:log --revprop -r 4 "Replacement for #1234" file:///Z:/PE-TEST/
property 'svn:log' set on repository revision 4

测试结果

>svn log file:///Z:/PE-TEST/trunk -r 4
------------------------------------------------------------------------
r4 | Badger | 2013-02-16 14:41:46 +0600 (Сб, 16 фев 2013) | 1 line

Replacement for #1234
------------------------------------------------------------------------

一些注释

您可能希望使用-q选项抑制hook内的propset的所有输出,并从文本文件中写入(使用propget)/ read(with propset)log-data(pipe for get,{设置的{1}}选项