2010-04-06 18 views
1

我试图让一个urlBuilder在我的CruiseControl.NET配置中工作,并找不出为什么他们不工作。regexIssueTracker在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> 

同样,相同的意见,并没有链接的任何地方。

任何人有任何想法。

回答

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> 
+0

谢谢,这是很好的信息,特别是内联修饰符。不幸的是,它仍然不适合我。任何其他想法?我如何知道网址生成器任务实际上正在运行? – slolife 2010-04-09 17:49:39

+0

@slolife:看我的编辑。 – 2010-04-09 23:25:43

相关问题