2013-03-09 42 views
1

我需要一些帮助从地面上获得bugzilla扩展。如何调试看起来不运行的Bugzilla扩展?

我想挂接到bug_format_comment(FWIW:改变时,我承诺SVN来链接到相应的SCM提交自动添加为注释一些纯文本)

眼下,似乎没有任何时候发生,我手动添加评论到一个错误。

除了将它放在/ extensions/my-ext-name/dir之外,还有什么特别的事情需要我做,以使扩展运行吗? 如何测试扩展是否被调用?

我使用旧版本的Bugzilla(3.2.x)。这个钩子是否支持? (我无法在文档中找到该信息)。

这里是我的完整Extension.pm文件(我在Perl没有经验。我从例子中扩展挂钩的例子,并从那里跑)

package Bugzilla::Extension::Websvn-scmbug-autolink; 
use strict; 
use base qw(Bugzilla::Extension); 
# This code for this is in ./extensions/Websvn-scmbug-autolink/lib/Util.pm 
use Bugzilla::Extension::Websvn-scmbug-autolink::Util; 
use URI::Escape; 

our $VERSION = '0.01'; 

# See the documentation of Bugzilla::Hook ("perldoc Bugzilla::Hook" 
# in the bugzilla directory) for a list of all available hooks. 
sub install_update_db { 
    my ($self, $args) = @_; 

} 

sub bug_format_comment { 
    my ($self, $args) = @_; 


    my $regexes = $args->{'regexes'}; 
    # push(@$regexes, { match => qr/\bfoo\b/, replace => 'bar' }); 


# 6665 --> 6666 
# CTUFramework:trunk/CTUCsharpRuntime/CtuFramework/text1-renamed.txt 
    #my $bar_match = qr/\b(bar)\b/; 
    my $bar_match = qr/(?:^|\r|\n)(\d+|NONE) (-->) (\d+|NONE)[ \r\n\t]+([^:]+):(.*?)[\r\n]/s; #/s - treat as single line 
    push(@$regexes, { match => $bar_match, replace => \&_replace_bar }); 
    my $scm_match2 = qr/(?:^|\r|\n)(\d+|NONE) (-->) (\d+|NONE)[ \r\n\t]+([^:]+):(.*?)[\r\n]/s; #/s - treat as single line 
    push(@$regexes, { match => $scm_match2, replace => \&_replace_bar }); 
} 

# Used by bug_format_comment--see its code for an explanation. 
sub _replace_bar { 
    my $args = shift; 

    my $scmFromVer = $args->{matches}->[0]; 
    my $scmToVer = $args->{matches}->[1]; 
    my $scmArrow = $args->{matches}->[2]; 
    my $scmProject = $args->{matches}->[3]; 
    my $scmFile = $args->{matches}->[4]; 
    # Remember, you have to HTML-escape any data that you are returning! 
    my $websvnRoot = "http://devlinux/websvn"; 
    my $websvnRepo = uri_escape($scmProject); #maybe do a mapping 
    my $websvnFilePath = uri_escape("/".$scmFile); 

    my $fromRevUrl = sprintf("%s/revision.php?repname=%s&rev=%s", 
     $websvnRoot, $websvnRepo, $scmFromVer); 
    my $toRevUrl = sprintf("%s/revision.php?repname=%s&rev=%s", 
     $websvnRoot, $websvnRepo, $scmToVer); 
    my $diffUrl = sprintf("%s/diff.php?repname=%s&path=%s&rev=%s", 
     $websvnRoot, $websvnRepo, $websvnFilePath, $scmToVer); 
    my $fileUrl = sprintf("%s/filedetails.php?repname=%s&path=%s&rev=%s", 
     $websvnRoot, $websvnRepo, $websvnFilePath, $scmToVer); 

    # TODO no link for 'NONE' 
    my $fromRevLink = sprintf(qq{<a href="%s">%s</a>}, $fromRevUrl, $scmFromVer); 
    my $toRevLink = sprintf(qq{<a href="%s">%s</a>}, $toRevUrl, $scmToVer); 
    my $diffLink = sprintf(qq{<a href="%s">%s</a>}, $diffUrl, $scmArrow); 
    my $fileLink = sprintf(qq{<a href="%s">%s</a>}, $fileUrl, $scmFilePath); 
    # $match = html_quote($match); 
    return "$fromRevLink $diffLink $toRevLink:$fileLink"; 
}; 
__PACKAGE__->NAME; 

回答

0

我搜索了Bugzilla的源代码,发现在3.2.x版中根本不支持钩子。钩子在Bugzilla 3.6中引入:http://bzr.mozilla.org/bugzilla/3.6/revision/6762

PS。我砍掉了正则表达式替换了模板脚本中的注释。哈克,但它的作品。

2

书面,分机甚至不会加载:破折号在Perl包名中无效。

将名称更改从Websvn-scmbug-autolinkWebsvn_scmbug_autolink

+0

感谢您的提示。就像我说的,Perl对我来说是一门外语:) – 2013-03-09 21:37:13