diff --git a/mozilla/webtools/bugzilla/.bzrrev b/mozilla/webtools/bugzilla/.bzrrev
index 79088451294..144582966cf 100644
--- a/mozilla/webtools/bugzilla/.bzrrev
+++ b/mozilla/webtools/bugzilla/.bzrrev
@@ -1 +1 @@
-7058
\ No newline at end of file
+7059
\ No newline at end of file
diff --git a/mozilla/webtools/bugzilla/Bugzilla/Search.pm b/mozilla/webtools/bugzilla/Bugzilla/Search.pm
index 91cd7f73bb9..630cdd7d5a3 100644
--- a/mozilla/webtools/bugzilla/Bugzilla/Search.pm
+++ b/mozilla/webtools/bugzilla/Bugzilla/Search.pm
@@ -612,7 +612,7 @@ sub init {
"^long_?desc,changedby" => \&_long_desc_changedby,
"^long_?desc,changedbefore" => \&_long_desc_changedbefore_after,
"^long_?desc,changedafter" => \&_long_desc_changedbefore_after,
- "^content,matches" => \&_content_matches,
+ "^content,(?:not)?matches" => \&_content_matches,
"^content," => sub { ThrowUserError("search_content_without_matches"); },
"^(?:deadline|creation_ts|delta_ts),(?:lessthan|greaterthan|equals|notequals),(?:-|\\+)?(?:\\d+)(?:[dDwWmMyY])\$" => \&_timestamp_compare,
"^commenter,(?:equals|anyexact),(%\\w+%)" => \&_commenter_exact,
@@ -656,6 +656,7 @@ sub init {
",notregexp" => \&_notregexp,
",lessthan" => \&_lessthan,
",matches" => sub { ThrowUserError("search_content_without_matches"); },
+ ",notmatches" => sub { ThrowUserError("search_content_without_matches"); },
",greaterthan" => \&_greaterthan,
",anyexact" => \&_anyexact,
",anywordssubstr" => \&_anywordsubstr,
@@ -1415,8 +1416,8 @@ sub _long_desc_changedbefore_after {
sub _content_matches {
my $self = shift;
my %func_args = @_;
- my ($chartid, $supptables, $term, $groupby, $fields, $v) =
- @func_args{qw(chartid supptables term groupby fields v)};
+ my ($chartid, $supptables, $term, $groupby, $fields, $t, $v) =
+ @func_args{qw(chartid supptables term groupby fields t v)};
my $dbh = Bugzilla->dbh;
# "content" is an alias for columns containing text for which we
@@ -1443,19 +1444,21 @@ sub _content_matches {
# The term to use in the WHERE clause.
$$term = "$term1 > 0 OR $term2 > 0";
+ if ($$t =~ /not/i) {
+ $$term = "NOT($$term)";
+ }
# In order to sort by relevance (in case the user requests it),
# we SELECT the relevance value so we can add it to the ORDER BY
# clause. Every time a new fulltext chart isadded, this adds more
- # terms to the relevance sql. (That doesn't make sense in
- # "NOT" charts, but Bugzilla never uses those with fulltext
- # by default.)
+ # terms to the relevance sql.
#
# We build the relevance SQL by modifying the COLUMNS list directly,
# which is kind of a hack but works.
my $current = COLUMNS->{'relevance'}->{name};
$current = $current ? "$current + " : '';
- my $select_term = "($current$rterm1 + $rterm2)";
+ # For NOT searches, we just add 0 to the relevance.
+ my $select_term = $$t =~ /not/ ? 0 : "($current$rterm1 + $rterm2)";
COLUMNS->{'relevance'}->{name} = $select_term;
}
diff --git a/mozilla/webtools/bugzilla/Bugzilla/Search/Quicksearch.pm b/mozilla/webtools/bugzilla/Bugzilla/Search/Quicksearch.pm
index 3732be76d28..65dc085a798 100644
--- a/mozilla/webtools/bugzilla/Bugzilla/Search/Quicksearch.pm
+++ b/mozilla/webtools/bugzilla/Bugzilla/Search/Quicksearch.pm
@@ -569,19 +569,10 @@ sub matchPrefixes {
sub negateComparisonType {
my $comparisonType = shift;
- if ($comparisonType eq 'substring') {
- return 'notsubstring';
- }
- elsif ($comparisonType eq 'anywords') {
+ if ($comparisonType eq 'anywords') {
return 'nowords';
}
- elsif ($comparisonType eq 'regexp') {
- return 'notregexp';
- }
- else {
- # Don't know how to negate that
- ThrowCodeError('unknown_comparison_type');
- }
+ return "not$comparisonType";
}
# Add a boolean chart
diff --git a/mozilla/webtools/bugzilla/template/en/default/global/code-error.html.tmpl b/mozilla/webtools/bugzilla/template/en/default/global/code-error.html.tmpl
index b8a87fb58b0..753695b2d5c 100644
--- a/mozilla/webtools/bugzilla/template/en/default/global/code-error.html.tmpl
+++ b/mozilla/webtools/bugzilla/template/en/default/global/code-error.html.tmpl
@@ -431,9 +431,6 @@
An error occurred while preparing for a RADIUS authentication request:
[% errstr FILTER html %].
- [% ELSIF error == "unknown_comparison_type" %]
- Specified comparison type is not supported.
-
[% ELSIF error == "request_queue_group_invalid" %]
The group field [% group FILTER html %] is invalid.
diff --git a/mozilla/webtools/bugzilla/template/en/default/global/field-descs.none.tmpl b/mozilla/webtools/bugzilla/template/en/default/global/field-descs.none.tmpl
index 4ada8c0665a..0c17e570334 100644
--- a/mozilla/webtools/bugzilla/template/en/default/global/field-descs.none.tmpl
+++ b/mozilla/webtools/bugzilla/template/en/default/global/field-descs.none.tmpl
@@ -49,6 +49,7 @@
"changedto" => "changed to",
"changedby" => "changed by",
"matches" => "matches",
+ "notmatches" => "does not match",
} %]
[% field_types = { ${constants.FIELD_TYPE_UNKNOWN} => "Unknown Type",
diff --git a/mozilla/webtools/bugzilla/template/en/default/list/list.html.tmpl b/mozilla/webtools/bugzilla/template/en/default/list/list.html.tmpl
index 8a820810338..696e868a495 100644
--- a/mozilla/webtools/bugzilla/template/en/default/list/list.html.tmpl
+++ b/mozilla/webtools/bugzilla/template/en/default/list/list.html.tmpl
@@ -83,7 +83,7 @@
'notequals', 'regexp', 'notregexp', 'lessthan', 'lessthaneq',
'greaterthan', 'greaterthaneq', 'changedbefore', 'changedafter',
'changedfrom', 'changedto', 'changedby', 'notsubstring', 'nowords',
- 'nowordssubstr',
+ 'nowordssubstr', 'notmatches',
] %]