5.5. Searching for Bugs

The Bugzilla Search page is the interface where you can find any bug report, comment, or patch currently in the Bugzilla system. You can play with it here: http://landfill.bugzilla.org/bugzilla-tip/query.cgi.

The Search page has controls for selecting different possible values for all of the fields in a bug, as described above. For some fields, multiple values can be selected. In those cases, Bugzilla returns bugs where the content of the field matches any one of the selected values. If none is selected, then the field can take any value.

Once you've run a search, you can save it as a Saved Search, which appears in the page footer. On the Saved Searches tab of your User Preferences page (the Prefs link in Bugzilla's footer), members of the group defined in the querysharegroup parameter can share such Saved Searches with user groups so that other users may use them. At the same place, you can see Saved Searches other users are sharing, and have them show up in your personal Bugzilla footer along with your own Saved Searches. If somebody is sharing a Search with a group she or he is allowed to assign users to, it will show up in the group's direct members' footers by default.

5.5.1. Boolean Charts

Highly advanced querying is done using Boolean Charts.

The boolean charts further restrict the set of results returned by a query. It is possible to search for bugs based on elaborate combinations of criteria.

The simplest boolean searches have only one term. These searches permit the selected left field to be compared using a selectable operator to a specified value. Using the "And," "Or," and "Add Another Boolean Chart" buttons, additional terms can be included in the query, further altering the list of bugs returned by the query.

There are three fields in each row of a boolean search.

5.5.1.1. Pronoun Substitution

Sometimes, a query needs to compare a field containing a user's ID (such as ReportedBy) with a user's ID (such as the user running the query or the user to whom each bug is assigned). When the operator is either "equals" or "notequals", the value can be "%reporter%", "%assignee%", "%qacontact%", or "%user%." The user pronoun refers to the user who is executing the query or, in the case of whining reports, the user who will be the recipient of the report. The reporter, assignee, and qacontact pronouns refer to the corresponding fields in the bug.

5.5.1.2. Negation

At first glance, negation seems redundant. Rather than searching for

NOT("summary" "contains the string" "foo"),

one could search for

("summary" "does not contain the string" "foo").

However, the search

("CC" "does not contain the string" "@mozilla.org")

would find every bug where anyone on the CC list did not contain "@mozilla.org" while

NOT("CC" "contains the string" "@mozilla.org")

would find every bug where there was nobody on the CC list who did contain the string. Similarly, the use of negation also permits complex expressions to be built using terms OR'd together and then negated. Negation permits queries such as

NOT(("product" "equals" "update") OR ("component" "equals" "Documentation"))

to find bugs that are neither in the update product or in the documentation component or

NOT(("commenter" "equals" "%assignee%") OR ("component" "equals" "Documentation"))

to find non-documentation bugs on which the assignee has never commented.

5.5.1.3. Multiple Charts

The terms within a single row of a boolean chart are all constraints on a single piece of data. If you are looking for a bug that has two different people cc'd on it, then you need to use two boolean charts. A search for

("cc" "contains the string" "foo@") AND ("cc" "contains the string" "@mozilla.org")

would return only bugs with "foo@mozilla.org" on the cc list. If you wanted bugs where there is someone on the cc list containing "foo@" and someone else containing "@mozilla.org", then you would need two boolean charts.

First chart: ("cc" "contains the string" "foo@")

Second chart: ("cc" "contains the string" "@mozilla.org")

The bugs listed will be only the bugs where ALL the charts are true.

5.5.2. Quicksearch

Quicksearch is a single-text-box query tool which uses metacharacters to indicate what is to be searched. For example, typing "foo|bar" into Quicksearch would search for "foo" or "bar" in the summary and status whiteboard of a bug; adding ":BazProduct" would search only in that product. You can use it to find a bug by its number or its alias, too.

You'll find the Quicksearch box in Bugzilla's footer area. On Bugzilla's front page, there is an additional Help link which details how to use it.

5.5.3. Bug Lists

If you run a search, a list of matching bugs will be returned.

The format of the list is configurable. For example, it can be sorted by clicking the column headings. Other useful features can be accessed using the links at the bottom of the list:

Long Format: this gives you a large page with a non-editable summary of the fields of each bug.
XML: get the buglist in the XML format.
CSV: get the buglist as comma-separated values, for import into e.g. a spreadsheet.
Feed: get the buglist as an Atom feed. Copy this link into your favorite feed reader. If you are using Firefox, you can also save the list as a live bookmark by clicking the live bookmark icon in the status bar. To limit the number of bugs in the feed, add a limit=n parameter to the URL.
iCalendar: Get the buglist as an iCalendar file. Each bug is represented as a to-do item in the imported calendar.
Change Columns: change the bug attributes which appear in the list.
Change several bugs at once: If your account is sufficiently empowered, and more than one bug appear in the bug list, this link is displayed which lets you make the same change to all the bugs in the list - for example, changing their assignee.
Send mail to bug assignees: If more than one bug appear in the bug list and there are at least two distinct bug assignees, this links is displayed which lets you easily send a mail to the assignees of all bugs on the list.
Edit Search: If you didn't get exactly the results you were looking for, you can return to the Query page through this link and make small revisions to the query you just made so you get more accurate results.
Remember Search As: You can give a search a name and remember it; a link will appear in your page footer giving you quick access to run it again later.

If you would like to access the bug list from another program it is often useful to have the list returned in something other than HTML. By adding the ctype=type parameter into the bug list URL you can specify several alternate formats. Besides the types described above, the following formats are also supported: ECMAScript, also known as JavaScript (ctype=js), and Resource Description Framework RDF/XML (ctype=rdf).

5.5.4. Adding/removing tags to/from bugs

You can add and remove tags from individual bugs, which let you find and manage them more easily. Creating a new tag automatically generates a saved search - whose name is the name of the tag - which lists bugs with this tag. This saved search will be displayed in the footer of pages by default, as all other saved searches. The main difference between tags and normal saved searches is that saved searches, as described in the previous section, are stored in the form of a list of matching criteria, while the saved search generated by tags is a list of bug numbers. Consequently, you can easily edit this list by either adding or removing tags from bugs. To enable this feature, you have to turn on the "Enable tags for bugs" user preference, see Section 5.10. This feature is disabled by default.

This feature is useful when you want to keep track of several bugs, but for different reasons. Instead of adding yourself to the CC list of all these bugs and mixing all these reasons, you can now store these bugs in separate lists, e.g. "Keep in mind", "Interesting bugs", or "Triage". One big advantage of this way to manage bugs is that you can easily add or remove bugs one by one, which is not possible to do with saved searches without having to edit the search criteria again.