diff --git a/mozilla/webtools/bugzilla/.bzrrev b/mozilla/webtools/bugzilla/.bzrrev index b6655f3d501..a2af0fcd029 100644 --- a/mozilla/webtools/bugzilla/.bzrrev +++ b/mozilla/webtools/bugzilla/.bzrrev @@ -1 +1 @@ -7119 \ No newline at end of file +7120 \ No newline at end of file diff --git a/mozilla/webtools/bugzilla/Bugzilla/Search.pm b/mozilla/webtools/bugzilla/Bugzilla/Search.pm index 9f13d0117b9..d946d928d3f 100644 --- a/mozilla/webtools/bugzilla/Bugzilla/Search.pm +++ b/mozilla/webtools/bugzilla/Bugzilla/Search.pm @@ -647,7 +647,8 @@ sub init { "^component,(?!changed)" => \&_component_nonchanged, "^product,(?!changed)" => \&_product_nonchanged, "^classification,(?!changed)" => \&_classification_nonchanged, - "^keywords,(?:equals|notequals|anyexact|anyword|allwords|nowords)" => \&_keywords_exact, + "^keywords,(?:equals|anyexact|anyword|allwords)" => \&_keywords_exact, + "^keywords,(?:notequals|notregexp|notsubstring|nowords|nowordssubstr)" => \&_multiselect_negative, "^keywords,(?!changed)" => \&_keywords_nonchanged, "^dependson,(?!changed)" => \&_dependson_nonchanged, "^blocked,(?!changed)" => \&_blocked_nonchanged, @@ -1891,7 +1892,7 @@ sub _keywords_exact { my %func_args = @_; my ($chartid, $v, $ff, $f, $t, $term, $supptables) = @func_args{qw(chartid v ff f t term supptables)}; - + my @list; my $table = "keywords_$$chartid"; foreach my $value (split(/[\s,]+/, $$v)) { @@ -2039,8 +2040,16 @@ sub _multiselect_negative { nowordssubstr => 'anywordssubstr', ); - my $table = "bug_$$f"; - $$ff = "$table.value"; + my $table; + if ($$f eq 'keywords') { + $table = "keywords LEFT JOIN keyworddefs" + . " ON keywords.keywordid = keyworddefs.id"; + $$ff = "keyworddefs.name"; + } + else { + $table = "bug_$$f"; + $$ff = "$table.value"; + } $$funcsbykey{",".$map{$$t}}($self, %func_args); $$term = "bugs.bug_id NOT IN (SELECT bug_id FROM $table WHERE $$term)";