diff man/gnats/gnats.texi @ 112:48d667d6f17f r20-1b8

Import from CVS: tag r20-1b8
author cvs
date Mon, 13 Aug 2007 09:20:48 +0200
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/man/gnats/gnats.texi	Mon Aug 13 09:20:48 2007 +0200
@@ -0,0 +1,905 @@
+\input texinfo   @c -*-texinfo-*-
+@setfilename gnats.info   
+
+@include version.texi
+
+@ifinfo
+@format
+START-INFO-DIR-ENTRY
+* Keeping Track: (gnats).        GNU Problem Report Management System
+END-INFO-DIR-ENTRY
+@end format
+@end ifinfo
+
+@ifinfo
+Copyright @copyright{} 1993, 1995 Free Software Foundation, Inc.
+
+Permission is granted to make and distribute verbatim copies of
+this manual provided the copyright notice and this permission notice
+are preserved on all copies.
+
+@ignore
+Permission is granted to process this file through TeX and print the
+results, provided the printed document carries a copying permission
+notice identical to this one except for the removal of this paragraph
+(this paragraph not being relevant to the printed manual).
+@end ignore
+
+Permission is granted to copy and distribute modified versions of this
+manual under the conditions for verbatim copying, provided also that
+the entire resulting derived work is distributed under the terms of a
+permission notice identical to this one.
+
+Permission is granted to copy and distribute translations of this manual
+into another language, under the above conditions for modified versions.
+@end ifinfo
+
+@c NOTE TO ANYONE FORMATTING THIS DOCUMENT FOR PRINTING...
+@c Comment the following line out if you don't have access to a
+@c PostScript printer or viewer
+
+@set POSTSCRIPT
+
+@settitle Keeping Track
+@setchapternewpage odd
+@finalout
+@titlepage
+@title Keeping Track
+@subtitle Managing Messages With GNATS
+@subtitle The @sc{gnu} Problem Report Management System
+@subtitle Version @value{VERSION}
+@subtitle January 1996
+@author Jeffrey M. Osier
+@author Brendan Kehoe
+@author Cygnus Support
+@page
+
+@vskip 0pt plus 1filll
+Copyright @copyright{} 1993, 1995 Free Software Foundation, Inc.
+
+Permission is granted to make and distribute verbatim copies of
+this manual provided the copyright notice and this permission notice
+are preserved on all copies.
+
+Permission is granted to copy and distribute modified versions of this
+manual under the conditions for verbatim copying, provided also that
+the entire resulting derived work is distributed under the terms of a
+permission notice identical to this one.
+
+Permission is granted to copy and distribute translations of this manual
+into another language, under the above conditions for modified versions.
+
+@end titlepage
+
+@node Top
+@top Overview
+@cindex overview to GNATS
+@cindex foreword
+
+This manual documents @sc{gnats}, the @sc{gnu} Problem Report Management
+System, version @value{VERSION}.  @sc{gnats} is a bug-tracking tool
+designed for use at a central @dfn{Support Site}.  Users who experience
+problems use electronic mail to communicate these problems to
+@dfn{maintainers} at that Support Site.  @sc{gnats} partially automates
+the tracking of these @dfn{Problem Reports} (@dfn{PR}s) by:
+
+@itemize @bullet
+@item
+organizing problem reports into a database and notifying responsible
+parties of suspected bugs;
+
+@item
+allowing support personnel and their managers to edit and query
+accumulated bugs; and
+
+@item
+providing a reliable archive of problems (and their subsequent
+solutions) with a given program.
+@end itemize
+
+@sc{gnats} offers many of the same features offered by more generalized
+databases, including editing, querying, and basic reporting.  The
+@sc{gnats} database itself is an ordered repository for problem reports;
+each PR receives a unique, incremental @dfn{PR number} which identifies
+it throughout its lifetime.  For a discussion on the working system
+adopted by @sc{gnats}, see @ref{Paradigm,,The database paradigm}.
+
+You can access the submitting, editing, and querying functions of
+@sc{gnats} from within @sc{gnu} Emacs.  @xref{Invoking the
+tools,,Invoking the @sc{gnats} tools}.
+
+@menu
+* Introduction::          Introducing GNATS
+* Invoking the tools::    Invoking the GNATS tools
+* Management::            GNATS Administration
+* Installation::          Installing GNATS
+* Locations::             Where @sc{gnats} lives
+* Regexps::               Querying using regular expressions
+* Index::
+@end menu
+
+@c ===============================================================
+@node Introduction
+@chapter Introducing @sc{gnats}
+@cindex introduction to GNATS
+@cindex rationale
+@cindex database rationale
+
+Any support organization realizes that a large amount of data flows back
+and forth between the maintainers and the users of their products.  This
+data often takes the form of problem reports and communication via
+electronic mail.  @sc{gnats} addresses the problem of organizing this
+communication by defining a database made up of archived and indexed
+electronic mail messages.
+
+@sc{gnats} was designed as a tool for software maintainers.  It consists
+of several utilities which, when used in concert, formulate and
+administer a database of Problem Reports grouped by site-defined
+@dfn{problem categories}.  It allows a support organization to keep
+track of problems (hence the term @dfn{Problem Report}) in an organized
+fashion.  Essentially, @sc{gnats} acts as an active archive for
+field-separated textual data submitted through electronic mail.
+
+@menu 
+* Paradigm::       The database paradigm
+* Flowchart::      Flowchart of GNATS activities
+* States::         States of Problem Reports
+* Fields::         Problem Report format
+@end menu
+
+@node Paradigm
+@section The database paradigm
+@cindex paradigm
+@cindex database paradigm
+@cindex why GNATS
+@cindex support site
+@cindex maintenance
+@cindex so what does it do
+
+It is in your best interest as the maintainer of a body of work to
+organize the feedback you receive on that work, and to make it easy for
+users of your work to report problems and suggestions.
+
+@sc{gnats} makes this easy by automatically filing incoming problem
+reports into appropriate places, by notifying responsible parties of the
+existence of the problem and (optionally) sending an acknowledgement to
+the submitter that the report was received, and by making these Problem
+Reports accessible to queries and easily editable.  @sc{gnats} is a
+database specialized for a specific task.
+
+@sc{gnats} was designed for use at a Support Site that handles a high
+level of problem-related traffic though electronic mail.  It maintains
+Problem Reports in the form of text files with defined @dfn{fields}
+(@pxref{Fields,,@sc{gnats} data fields}).  The location of the database,
+as well as the categories it accepts as valid, the maintainers for whom
+it provides service, and the submitters from whom it accepts Problem
+Reports, are all definable by the @dfn{Support Site}.
+@xref{Management,,@sc{gnats} administration}.
+
+@cindex what is a PR
+Each PR is a separate file within a main repository
+(@pxref{Locations,,Where @sc{gnats} lives}).  Editing access to the
+database is regulated to maintain consistency, but anyone with
+electronic mail access may submit Problem Reports.  To make queries on
+the database faster, an index is kept automatically (@pxref{index
+file,,The @code{index} file}).
+
+We provide several software tools so that users may submit new Problem
+Reports, edit existing Problem Reports, and query the database.
+
+@itemize @bullet
+@item 
+@w{@code{send-pr}} is used by both product maintainers and the end users
+of the products they support to submit PRs to the database.
+
+@item 
+@w{@code{edit-pr}} is used by maintainers to use when editing problem
+reports in the database.
+
+@item 
+Maintainers, managers and administrators can use @w{@code{query-pr}} to
+make inquiries about indidvidual PRs or groups of PRs.  
+
+@end itemize
+
+@code{send-pr} can also be packaged by itself and distributed to anyone
+you wish to receive Problem  Reports  from; see @ref{mkdist,,Configuring
+@code{send-pr} for the outside world}.
+
+@cindex GNATS administrator
+At the Support Site, a @sc{gnats} @dfn{administrator} is charged with the
+duty of maintaining @sc{gnats}.  These duties are discussed in detail in
+@ref{Management,,@sc{gnats} Administration}, and generally include
+configuring @sc{gnats} for the Support Site, editing PRs that @sc{gnats}
+cannot process, pruning log files, setting up new problem categories,
+backing up the database, and distributing @code{send-pr} so that others
+may submit Problem Reports.
+
+Responsibility for a given Problem Report depends on the category of the
+problem.  Optionally, an automated reminder can be sent to the
+responsible person if a problem report is neglected for a requisite time
+period.  @xref{Local configuration,,Changing your local configuration}.
+
+@cindex @code{pending} directory
+@cindex unparseable incoming PRs
+@cindex incoming PRs that @sc{gnats} cannot parse
+@sc{gnats} does not have the ability to decipher random text, so any
+problem reports which arrive in a format @sc{gnats} does not recognize
+are placed in a separate directory pending investigation by the
+@sc{gnats} administrator (@pxref{Management,,@sc{gnats} Administration}).
+
+Once a problem is recorded in the database, work can begin toward a
+solution.  A problem's initial @dfn{state} is @samp{open}
+(@pxref{States,,States of Problem Reports}).  An acknowledgement is sent
+to the originator of the bug report (if that feature of @sc{gnats} is
+activated).  @sc{gnats} forwards copies of the report to the party
+responsible for that problem category and to the person responsible for
+problems arriving from that @dfn{Submitter Site}.
+@c (@pxref{Glossary,,Glossary}).
+
+When a problem has been identified, the maintainer can change its state
+to @samp{analyzed}, and then to @samp{feedback} when a solution is
+found.  Each time the state of a PR changes, the submitter of the
+problem report is notified of the reason for the change.  If the party
+responsible for the PR changes, the previous responsible party and the
+new responsible party receive notice of the change.  The change and
+reason are also recorded in the @samp{>Audit-Trail:} field of the
+Problem Report.  (@xref{edit-pr,,Editing existing Problem Reports}.  For
+information on the @samp{>Audit-Trail:} field, see @ref{Fields,,Problem
+Report format}.)
+
+When the originator of the Problem Report confirms that the solution
+works, the maintainer can change the state to @dfn{closed}.  If the PR
+cannot be closed, the maintainer can change its state to @dfn{suspended}
+as a last resort.  (For a more detailed description of these states, see
+@ref{States,,States of Problem Reports}.)
+
+@node Flowchart
+@section Flowchart of @sc{gnats} activities
+@cindex flowchart of GNATS activities
+@cindex visual map of data flow
+
+This informal flowchart shows the relationships of the @sc{gnats} tools
+to each other and to the files with which they interoperate.
+
+@sp 2
+
+@ifset POSTSCRIPT
+@tex
+\input epsf
+\epsffile{flowchart.eps}
+@end tex
+@end ifset
+
+@ifinfo
+@clear POSTSCRIPT
+@end ifinfo
+
+@ifclear POSTSCRIPT
+@cartouche
+@smallexample
+@include flowchart.txt
+@end smallexample
+@end cartouche
+
+@end ifclear
+
+@sp 2
+
+@c ---------------------------------------------------------------
+
+@include states.texi
+
+@c ---------------------------------------------------------------
+@include fields.texi
+
+@c ===============================================================
+
+@include p-usage.texi
+
+@c ===============================================================
+
+@include p-admin.texi
+
+@c ===============================================================
+
+@node Installation
+@appendix Installing @sc{gnats}
+
+@include p-inst.texi
+
+@c ===============================================================
+
+@node Locations
+@appendix Where @sc{gnats} lives
+@cindex locations
+@cindex where GNATS lives
+@cindex default installation locations
+
+We use a few conventions when referring to the installation structure
+@sc{gnats} uses.  These values are adjustable when you build and install
+@sc{gnats} (@pxref{Installation,,Installing @sc{gnats}}).
+
+@menu
+* prefix::
+* exec-prefix::
+* GNATS_ROOT::
+* defaults::       Default installation locations
+@end menu
+
+@node prefix
+@section @var{prefix}
+@cindex @var{prefix}
+
+@var{prefix} corresponds to the variable @samp{prefix} for
+@code{configure}, which passes it on to the @file{Makefile} it creates.
+@var{prefix} sets the root installation directory for
+@dfn{host-independent} files as follows:
+
+@c FIXME - check these
+@table @asis
+@item libraries
+@file{@var{prefix}/lib}@*
+
+@item @code{man} pages
+@file{@var{prefix}/man}
+
+@item @code{info} documents
+@file{@var{prefix}/info}
+
+@item @code{include} files
+@file{@var{prefix}/include}
+
+@item @emph{etc@dots{}}
+@end table
+
+The default value for @var{prefix} is @w{@file{/usr/local}}, which can
+be changed on the command line to @code{configure} using
+
+@smallexample
+configure --prefix=@var{prefix} @dots{}
+@end smallexample
+
+@noindent
+@xref{Configure and make,,Configuring and compiling the software}.
+
+@node exec-prefix
+@section @var{exec-prefix}
+@cindex @var{exec-prefix}
+
+@var{exec-prefix} corresponds to the variable @samp{exec_prefix} for
+@code{configure}, which passes it on to the @file{Makefile} it creates.
+@w{@var{exec-prefix}} sets the root installation for
+@dfn{host-dependent} files as follows:
+
+@c FIXME - check these
+@table @asis
+@item binary tools
+@file{@var{exec-prefix}/bin}
+
+@item binary support utilities
+@file{@var{exec-prefix}/lib/gnats}
+
+@item compiled libraries 
+@file{@var{exec-prefix}/lib}@*
+
+@item @emph{etc@dots{}}
+@end table
+
+Since most installations are not intended to be distributed around a
+network, the default value for @w{@var{exec-prefix}} is the value of
+@samp{prefix}, i.e., @w{@file{/usr/local}}.  However, using
+@var{exec-prefix} saves space when you are installing a package on
+several different platforms for which many files are identical; rather
+than duplicate them for each host, these files can be shared in a common
+repository, and you can use symbolic links on each host to find the
+host-dependent files.  @emph{It is not necessary to use this paradigm
+when building the @sc{gnats} tools}.  @xref{Configure and
+make,,Configuring and compiling the software}.
+
+Use @var{exec-prefix} in conjunction with @var{prefix} to share
+host-independent files, like libraries and @code{info} documents.  For
+example:
+
+@smallexample
+   @emph{for each host:}
+configure --prefix=/usr/gnu --exec-prefix=/usr/gnu/H-@var{host}
+make all install @dots{}
+@end smallexample
+
+@noindent
+Using this paradigm, all host-dependent binary files are installed into
+@w{@file{/usr/gnu/H-@var{host}/bin}}, while files which do not depend on
+the host type for which they were configured are installed into
+@w{@file{/usr/gnu}}.
+
+You can then use a different symbolic link for @w{@file{/usr/gnu}}
+on each host (@file{/usr} is usually specific to a particular machine;
+it is always specific to a particular architecture).
+
+@smallexample
+  @emph{on host-1:}
+ln -s /usr/gnu/H-@var{host-1} /usr/gnu
+  @emph{on host-2:}
+ln -s /usr/gnu/H-@var{host-2} /usr/gnu
+@end smallexample
+
+@noindent
+To the end user, then, placing @w{@file{/usr/gnu/bin}} in her or his
+@code{PATH} simply works transparently for each @var{host} type.
+
+You can change @w{@var{exec-prefix}} on the command line to
+@code{configure} using
+
+@smallexample
+configure --exec-prefix=@var{exec-prefix} @dots{}
+@end smallexample
+
+We recommend that you consult @ref{Using configure,,Using
+@code{configure},configure,Cygnus configure}, before attempting this.
+Again, @emph{it is not necessary to use this paradigm when building the
+@sc{gnats} tools}.
+
+@node GNATS_ROOT
+@section @var{GNATS_ROOT}
+@cindex @var{GNATS_ROOT}
+
+The location of the database and the administrative data files, by
+default @w{@file{@var{prefix}/lib/gnats/gnats-db}}.  You can change this
+value on the command line to @code{configure} using
+
+@smallexample
+configure --with-gnats-root=@w{@var{GNATS_ROOT}}
+@end smallexample
+
+@noindent
+Administrative data files reside in @w{@file{@var{GNATS_ROOT}/gnats-adm}}.
+These include @file{categories}, @file{submitters}, @file{responsible},
+and @file{config}, as well as two files generated and maintained by
+@sc{gnats}, @file{index} and @file{current}.  @xref{Local configuration,,
+Changing your local configuration}, and @ref{Admin files,,Administrative
+data files}.
+
+@node defaults
+@section Default installation locations
+@cindex default installation locations
+
+@table @asis
+@item @var{prefix}
+defaults to @file{/usr/local}; change using @code{configure}
+(@pxref{Configure and make,,Configuring and compiling the software}).
+
+@item @var{exec-prefix}
+defaults to @var{prefix}; change using @code{configure}
+(@pxref{Configure and make,,Configuring and compiling the software}).
+
+@item @w{@var{GNATS_ROOT}}
+defaults to @w{@file{@var{prefix}/lib/gnats/gnats-db}}; change using
+@code{configure} (@pxref{Configure and make,,Configuring and compiling
+the software}).
+@end table
+
+@noindent
+@sc{gnats} installs tools, utilities, and files into the following
+locations.
+
+@table @code
+
+@item @var{exec-prefix}/bin
+
+@table @code
+@item send-pr
+@xref{send-pr,,Submitting Problem Reports}.
+@item edit-pr
+@xref{edit-pr,,Editing existing Problem Reports}.
+@item query-pr
+@xref{query-pr,,Querying the database}.
+@item nquery-pr
+@xref{query-pr,,Querying the database over the network}.
+@end table
+
+@item @var{exec-prefix}/lib/gnats
+
+@table @code
+@item mkcat
+@xref{mkcat,,Adding a problem category}.
+@item rmcat
+@xref{rmcat,,Removing a problem category}.
+@item mkdist
+@xref{mkdist,,Configuring @code{send-pr} for the outside world}.
+@item gen-index
+@xref{gen-index,,Regenerating the index}.
+@item queue-pr
+@xref{queue-pr,,Handling incoming traffic}.
+@item file-pr
+@xref{file-pr,,Processing incoming traffic}.
+@ignore
+@item gnatsd
+@xref{gnats,,Remote @sc{gnats} daemon}.
+@end ignore
+@item at-pr
+@xref{at-pr,,Timely reminders}.
+@item pr-edit
+@xref{pr-edit,,The @code{edit-pr} driver}.
+@ignore
+@item npr-edit
+@xref{npr-edit,,The remote @code{edit-pr} driver}.
+@end ignore
+@item pr-addr
+@xref{pr-addr,,Address retrieval}.
+@item libiberty.a
+The @sc{gnu} @code{libiberty} library.
+@end table
+
+@item @var{prefix}/lib/gnats/dist
+
+@table @asis
+@item A packageable distribution of @code{send-pr}.
+@xref{mkdist,,Configuring @code{send-pr} for the outside world}.
+@end table
+
+@item @var{prefix}/lib/gnats
+
+@table @var
+@item site
+The local list of valid categories, used by @code{send-pr}; @var{site}
+is the value of @samp{GNATS_SITE} (@pxref{config,,The @code{config}
+file}).
+@end table
+
+@item @var{prefix}/lib/emacs/lisp
+
+@table @code
+@item gnats.el
+@itemx gnats.elc
+The Emacs versions of the programs @code{query-pr}, @code{edit-pr}, and
+@code{view-pr}.  @xref{Invoking the tools,,Invoking the @sc{gnats}
+tools}.  To change this directory you must alter @file{Makefile.in}; see
+@ref{Configure and make,,Configuring and compiling the software}.
+@item send-pr.el
+The Emacs version of the program @code{send-pr}.
+@xref{send-pr,,Submitting Problem Reports}.
+@end table
+
+@item @var{prefix}/info
+
+@table @code
+@item gnats.info
+@itemx send-pr.info
+The @sc{gnats} manuals, in a form readable by @code{info} (the @sc{gnu}
+hypertext browser).  @xref{Info,,Reading GNU Online
+Documentation,infoman,GNU Online Documentation}.
+@end table
+
+@item @var{prefix}/man/man1
+@itemx @var{prefix}/man/man8
+
+@table @asis
+@item @code{man} pages for all the @sc{gnats} tools and utilities.
+@xref{Invoking the tools,,Invoking the @sc{gnats} tools}.
+@end table
+
+@c FIXME - does this happen?
+@item @var{prefix}/src
+
+@table @asis
+@item Source code for @sc{gnats}.
+@end table
+
+@item @var{prefix}/sample
+
+@table @asis
+@item Example administrative files, including @file{categories},
+@file{submitters}, @file{responsible}, and @file{config}.  @xref{Local
+configuration,,Changing your local configuration}.
+@end table
+
+@item @w{@var{GNATS_ROOT}}
+
+@table @code
+@item gnats-adm
+Administration and configuration data files.  The files
+@table @code
+@item config
+@item categories
+@item submitters
+@item responsible
+@item gnatsd.conf
+@item index
+(@emph{This file is created by @sc{gnats}.})
+@item current
+(@emph{This file is created by @sc{gnats}.})
+@end table
+@noindent
+exist here.  @xref{Local configuration,,Changing your local
+configuration}, and @ref{Admin files,,Administrative data files}.
+@item gnats-queue
+Incoming Problem Reports are queued here until the next iteration of
+@w{@samp{queue-pr -r}} (@pxref{queue-pr,,Handling incoming traffic}).
+@item pending
+Problem Reports which arrive without a valid category value are
+reassigned to the category @samp{pending} and placed here pending
+intervention by the @sc{gnats} administrator.
+@xref{Management,,@sc{gnats} administration}.
+@item @var{category}
+Each valid category has a corresponding subdirectory in the database.
+All Problem Reports associated with that category are kept in that
+subdirectory, along with lock files for PRs which are being edited.
+@end table
+
+@end table
+
+@c ===============================================================
+@node Regexps
+@appendix Querying using regular expressions
+@cindex querying using regexps
+@cindex regular expressions
+@cindex syntax of regexps
+
+@c FIXME - all my examples just use . and * 
+@sc{gnats} uses @sc{gnu} regular expression syntax with these settings:
+
+@smallexample
+RE_SYNTAX_POSIX_EXTENDED | RE_BK_PLUS_QM & RE_DOT_NEWLINE
+@end smallexample
+
+@noindent
+This means that parentheses (@samp{(} and @samp{)}) and pipe symbols
+(@samp{|}) do not need to be used with the escape symbol @samp{\}.  The
+tokens @samp{+} and @samp{?} do need the escape symbol, however.
+
+Unfortunately, we do not have room in this manual for an adequate
+tutorial on regular expressions.  The following is a basic summary of
+some regular expressions you might wish to use.
+
+@xref{Regular Expression Syntax,,Regular Expression Syntax,regex,Regex},
+for details on regular expression syntax.  Also see @ref{Regexps,,Syntax
+of Regular Expressions,emacs,GNU Emacs Manual}, but beware that the
+syntax for regular expressions in Emacs is slightly different.
+
+All search criteria options to @code{query-pr} rely on regular
+expression syntax to construct their search patterns.  For example,
+
+@smallexample
+query-pr --state=open
+@end smallexample
+
+@noindent
+matches all PRs whose @samp{>State:} values match with the regular
+expression @samp{open}.
+
+We can substitute the expression @samp{o} for @samp{open}, according
+to @sc{gnu} regular expression syntax.  This matches all values of
+@samp{>State:} which begin with the letter @samp{o}.
+
+@smallexample
+query-pr --state=o
+@end smallexample
+
+is equivalent to
+
+@smallexample
+query-pr --state=open
+@end smallexample
+
+@noindent
+in this case, since the only value for @samp{>State:} which matches the
+expression @samp{o} is @samp{open}.  (Double quotes (@kbd{"}) are used
+to protect the asterix (@kbd{*}) from the shell.)  @samp{--state=o} also
+matches @samp{o}, @samp{oswald}, and even @samp{oooooo}, but none of
+those values are valid states for a Problem Report.
+
+Regular expression syntax considers a regexp token surrounded with
+parentheses, as in @w{@samp{(@var{regexp})}}, to be a @dfn{group}.  This
+means that @w{@samp{(ab)*}} matches any number of contiguous instances
+of @samp{ab}, including zero.  Matches include @samp{}, @samp{ab}, and
+@samp{ababab}.
+
+Regular expression syntax considers a regexp token surrounded with
+square brackets, as in @w{@samp{[@var{regexp}]}}, to be a @dfn{list}.
+This means that @w{@samp{Char[(ley)(lene)(broiled)}} matches any of the
+words @samp{Charley}, @samp{Charlene}, or @samp{Charbroiled} (case is
+significant; @samp{charbroiled} is not matched).
+
+Using groups and lists, we see that
+
+@smallexample
+query-pr --category="gcc|gdb|gas"
+@end smallexample
+
+@noindent
+is equivalent to
+
+@smallexample
+query-pr --category="g(cc|db|as)"
+@end smallexample
+
+@noindent
+and is also very similar to
+
+@smallexample
+query-pr --category="g[cda]"
+@end smallexample
+
+@noindent
+with the exception that this last search matches any values which begin
+with @samp{gc}, @samp{gd}, or @samp{ga}.
+
+The @samp{.} character is known as a @dfn{wildcard}.  @samp{.} matches
+on any single character.  @samp{*} matches the previous character
+(except newlines), list, or group any number of times, including zero.
+Therefore, we can understand @samp{.*} to mean ``match zero or more
+instances of any character.''  For this reason, we never specify it at
+the end of a regular expression, as that would be redundant.  The
+expression @samp{o} matches any instance of the letter @samp{o}
+(followed by anything) at the beginning of a line, while the expression
+@samp{o.*} matches any instance of the letter @samp{o} at the beginning
+of a line followed by any number (including zero) of any characters.
+
+We can also use the expression operator @samp{|} to signify a logical
+@code{OR}, such that
+
+@smallexample
+query-pr --state="o|a"
+@end smallexample
+
+@noindent
+matches all @samp{open} or @samp{analyzed} Problem Reports.  (Double
+quotes (@kbd{"}) are used to protect the pipe symbol (@kbd{|}) from the
+shell.)
+
+By the same token,@footnote{No pun intended.} using 
+
+@smallexample
+query-pr --state=".*a"
+@end smallexample
+
+@noindent
+matches all values for @samp{>State:} which contain an @samp{a}.  (These
+include @samp{analyzed} and @samp{feedback}.)
+
+Another way to understand what wildcards do is to follow them on their
+search for matching text.  By our syntax, @samp{.*} matches any
+character any number of times, including zero.  Therefore, @samp{.*a}
+searches for any group of characters which end with @samp{a}, ignoring
+the rest of the field.  @samp{.*a} matches @samp{analyzed} (stopping at
+the first @samp{a}) as well as @samp{feedback}.
+
+@emph{Note:} When using @samp{--text} or @samp{--multitext}, you do not
+have to specify the token @samp{.*} at the beginning of @var{text} to
+match the entire field.  For the technically minded, this is because
+@samp{--text} and @samp{--multitext} use @samp{re_search} rather than
+@samp{re_match}.  @samp{re_match} @dfn{anchors} the search at the
+beginning of the field, while @samp{re_search} does not anchor the
+search.
+
+For example, to search in the @code{>Description:} field for the text
+
+@smallexample
+The defrobulator component returns a nil value.
+@end smallexample
+
+@noindent
+we can use
+
+@smallexample
+query-pr --multitext="defrobulator.*nil"
+@end smallexample
+
+To also match newlines, we have to include the expression @samp{(.|^M)}
+instead of just a dot (@samp{.}).  @samp{(.|^M)} matches ``any single
+character except a newline (@samp{.}) @emph{or} (@samp{|}) any newline
+(@samp{^M}).''  This means that to search for the text
+
+@smallexample
+The defrobulator component enters the bifrabulator routine
+and returns a nil value.
+@end smallexample
+
+@noindent
+we must use
+
+@smallexample
+query-pr --multitext="defrobulator(.|^M)*nil"
+@end smallexample
+
+To generate the newline character @samp{^M}, type the following
+depending on your shell:
+
+@table @code
+@item csh
+@samp{@emph{control}-V @emph{control}-M}
+
+@item tcsh
+@samp{@emph{control}-V @emph{control}-J}
+
+@item sh (@emph{or} bash)
+Use the @key{RETURN} key, as in
+
+@smallexample
+(.|
+)
+@end smallexample
+@end table
+
+Again, see @ref{Regular Expression Syntax,,Regular Expression
+Syntax,regex,Regex}, for a much more complete discussion on regular
+expression syntax.
+
+@c ===============================================================
+
+@ignore
+@c complete this someday...
+@node Glossary
+@unnumbered Glossary
+
+@table @strong
+@item PR
+Short for ``Problem Report''.  An electronic mail message which reports
+a problem.  A @dfn{record} in the @sc{gnats} database.
+
+@item Support Site
+A central site that provides resources for maintainers of a body of
+work, such as a software package.  We refer to the Support Site as the
+location where @sc{gnats} is installed and functional.
+
+@item Database
+An organized collection of information.
+
+@item @sc{gnats}
+The @sc{gnu} Problem Report Management System.
+
+@item Field
+A location for specific information.  A group of fields make up a
+Problem Report.
+
+@item Mail header
+Defined by the Internet Internet standard RFC-822
+
+@item Category
+@item Submitter
+@item Originator
+@item Query
+@item Report
+@item Site
+@item Edit
+@item Submit
+@item Bug
+@item State
+@item ID Number
+@item Synopsis
+@item Confidential
+@item Severity
+@item Priority
+@item Responsible
+@item Configuration
+@item Class
+@item Environment
+@item Description
+@item Audit-Trail
+@item Unformatted
+@item Fix
+@item Release
+@item Makefile
+@item gnats-admin
+@item pending
+@item send-pr
+@item edit-pr
+@item Maintainers
+@item timestamp
+@item utility
+@item tool
+
+@end table
+
+@end ignore
+
+@node Index
+@unnumbered Index
+
+@printindex cp
+
+@contents
+
+@bye
+