我正在尝试使用issueUrlBuilder在我的CruiseControl.NET配置中工作,并且无法弄清楚它们为什么不起作用。
我试过的第一个就是:
<cb:define name="issueTracker">
<issueUrlBuilder type="regexIssueTracker">
<find>^.*Issue (\d*).|\n*$</find>
<replace>https://issuetracker/ViewIssue.aspx?ID=$1</replace>
</issueUrlBuilder>
</cb:define>
然后,我在sourceControl块中引用它:
<sourcecontrol type="vaultplugin">
...
<issueTracker/>
</sourcecontrol>
我的签到评论如下:
[Issue 1234] This is a test comment
我无法在构建报告/日志/等中找到任何地方。将问题链接转换为链接的位置。我的正则表达式错了吗?
我也尝试过默认的issueUrlBuilder:
<cb:define name="issueTracker">
<issueUrlBuilder type="defaultIssueTracker">
<url>https://issuetracker/ViewIssue.aspx?ID={0}</url>
</issueUrlBuilder>
</cb:define>
同样,相同的评论和任何地方都没有链接。
任何人都有任何想法。
答案 0 :(得分:2)
您似乎尝试使用.|\n
而非.
来匹配可能的多行注释,默认情况下,它与新行不匹配。您的第一个问题是|
所有正则表达式构造的关联性最低,因此它将整个正则表达式划分为替代^.*Issue (\d*).
或\n*$
。您需要将替换括在一个组中:(?:.|\n)*
。
另一个潜在的问题是这些行可能被\r\n
(回车加换行)而不仅仅是\n
分开。如果CCNET使用.NET正则表达式引擎,那将不会有问题,因为点匹配\r
。但是并非所有风格都是如此,无论如何,总有一种更好的方式来匹配包括换行符在内的任何内容而不是(?:.|\n)*
。我建议你试试
<find>^.*Issue (\d*)(?s:.*)$</find>
或
<find>(?s)^.*Issue (\d*).*$</find>
(?s)
和(?s:...)
为inline modifiers,允许点与行分隔符匹配。
编辑:看起来这是CCNET中的known bug。如果内联修饰符不起作用,请尝试将.
替换为[\s\S]
,就像在JavaScript正则表达式中一样。例如:
<find>^.*Issue (\d*)[\s\S]*$</find>