1

Bugzilla拡張機能を地面から外すのに助けが必要です。

フックしたいbug_format_comment(FWIW:SVNにコミットしたときにコメントとして自動的に追加されるプレーンテキストをそれぞれのSCMコミットへのリンクに変更するため)。

現在、バグに手動でコメントを追加しても何も起こらないようです。

/ extends / 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;
4

2 に答える 2

2

書かれているように、拡張機能はロードされません。ダッシュはPerlパッケージ名では無効です。

名前をからWebsvn-scmbug-autolinkに変更しWebsvn_scmbug_autolinkます。

于 2013-03-09T18:23:51.540 に答える
0

Bugzillaのソースを検索したところ、バージョン3.2.xではフックがサポートされていないことがわかりました。フックはBugzilla3.6で導入されました:http://bzr.mozilla.org/bugzilla/3.6/revision/6762

PS。コメント用のテンプレートスクリプトで正規表現の置換をハッキングしました。ハッキーですが、動作します。

于 2013-03-11T10:53:09.387 に答える