# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (the "License"); you may not use this file
# except in compliance with the License. You may obtain a copy of
# the License at http://www.mozilla.org/MPL/
#
# Software distributed under the License is distributed on an "AS
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
# implied. See the License for the specific language governing
# rights and limitations under the License.
#
# The Original Code is the Bugzilla Bug Tracking System.
#
# The Initial Developer of the Original Code is 
# Andreas Franke <afranke@mathweb.org>.
# Corporation. Portions created by Andreas Franke are
# Copyright (C) 2001 Andreas Franke. All
# Rights Reserved.
#
# Contributor(s): 

#
# This is `query.conf', the config file for `buglist'.
#
# Columns: 1: field_name, 2: comparison_type, 3: cmd-line options
#
bug_status              substring       "s","status"
resolution              substring       "r","resolution"
rep_platform            substring       "p","platform"
op_sys                  substring       "o","os","opsys"
priority                substring       "P","priority"
bug_severity            substring       "S","severity"
assigned_to             substring       "A","O","owner","assignedto"
reporter                substring       "R","reporter"
qa_contact              substring       "Q","qa","qacontact"
cc                      substring       "C","cc"
product                 substring       "product"
version                 substring       "V","version"
component               substring       "c","component"
target_milestone        substring       "M","milestone"
short_desc              substring       "summary","defaultREMOVEME"
longdesc                substring       "d","description","longdesc"
bug_file_loc            substring       "u","url"
status_whiteboard       substring       "w","whiteboard"
keywords                substring       "k","K","keywords"
attachments.description substring       "attachdesc"
attachments.thedata     substring       "attachdata"
attachments.mimetype    substring       "attachmime"
dependson               substring       # bug 30823
blocked                 substring       # bug 30823
