0

我的最终目标如下:

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

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

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

#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 分钟(但我不想浪费那一分钟)。

4

1 回答 1

1

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

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

如果您必须在日志消息中进行替换,则必须在下一个独立提交(可能发生在 post-commit 钩子中)使用 propedit|propdel-propset (用于管理修订属性的第二种命令形式)

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

第 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 钩子

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 选项抑制钩子内 propset 的所有输出,并从文本文件中写入(使用 propget)/读取(使用 propset)日志数据(用于获取的管道,-F file用于设置的选项)

于 2013-02-13T07:37:34.070 回答