【问题标题】:SVN commit message updating within a hook挂钩内的 SVN 提交消息更新
【发布时间】:2013-02-12 21:10:57
【问题描述】:

我的最终目标如下:

我们希望在我们的问题管理软件(在我们的例子中是 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 分钟(但我不想浪费那一分钟)。

【问题讨论】:

    标签: svn


    【解决方案1】:

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

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

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

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

    第 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 的 all 输出,并从文本文件(get 管道,@ 987654326@设置选项)

    【讨论】:

    • 所以,在预提交中我应该创建票证。在提交后我调用 svnadmin 来更新刚刚提交的修订。这听起来像是一个可以接受的解决方案。
    • @elmuerte - 不,为了改变 revision 属性 svn:log 你必须使用不是 svnadmin,而是普通的 client-side命令(propedit可能不好,因为它打开交互式编辑器窗口,但所有钩子都是非交互式的)
    猜你喜欢
    • 2012-10-18
    • 1970-01-01
    • 1970-01-01
    • 2011-04-29
    • 2021-10-22
    • 1970-01-01
    • 2011-10-11
    • 2015-03-09
    • 2016-04-02
    相关资源
    最近更新 更多