<!-- <!DOCTYPE appendix PUBLIC "-//OASIS//DTD DocBook V4.1//EN"> -->
<appendix id="patches" xreflabel="Useful Patches and Utilities for Bugzilla">
  <title>Useful Patches and Utilities for Bugzilla</title>

  <para>Are you looking for a way to put your Bugzilla into overdrive? Catch
  some of the niftiest tricks here in this section.</para>

  <section id="rewrite" xreflabel="Apache mod_rewrite magic">
    <title>Apache 
    <filename>mod_rewrite</filename>

    magic</title>

    <para>Apache's 
    <filename>mod_rewrite</filename>

    module lets you do some truly amazing things with URL rewriting. Here are
    a couple of examples of what you can do.</para>

    <orderedlist>
      <listitem>
        <para>Make it so if someone types 
        <computeroutput>http://www.foo.com/12345</computeroutput>

        , Bugzilla spits back http://www.foo.com/show_bug.cgi?id=12345. Try
        setting up your VirtualHost section for Bugzilla with a rule like
        this:</para>

        <programlisting><![CDATA[
<VirtualHost 12.34.56.78>
RewriteEngine On
RewriteRule ^/([0-9]+)$ http://foo.bar.com/show_bug.cgi?id=$1 [L,R]
</VirtualHost>
]]></programlisting>
      </listitem>

      <listitem>
        <para>There are many, many more things you can do with mod_rewrite.
        Please refer to the mod_rewrite documentation at 
        <ulink url="http://www.apache.org">http://www.apache.org</ulink>.
        </para>
      </listitem>
    </orderedlist>
  </section>

  <section id="cmdline">
    <title>Command-line Bugzilla Queries</title>

    <para>There are a suite of Unix utilities for querying Bugzilla from the 
    command line. They live in the 
    <filename class="directory">contrib/cmdline</filename> 
    directory. However, they
    have not yet been updated to work with 2.16 (post-templatisation.).
    There are three files - <filename>query.conf</filename>, 
    <filename>buglist</filename> and <filename>bugs</filename>.</para>
    
    <para><filename>query.conf</filename> 
    contains the mapping from options to field
    names and comparison types. Quoted option names are "grepped" for, so it
    should be easy to edit this file. Comments (#) have no effect; you must
    make sure these lines do not contain any quoted "option".</para>

    <para><filename>buglist</filename>
    is a shell script which submits a Bugzilla query and writes
    the resulting HTML page to stdout. It supports both short options, (such
    as "-Afoo" or "-Rbar") and long options (such as "--assignedto=foo" or
    "--reporter=bar"). If the first character of an option is not "-", it is
    treated as if it were prefixed with "--default=".</para>

    <para>The column list is taken from the COLUMNLIST environment variable.
    This is equivalent to the "Change Columns" option when you list bugs in
    buglist.cgi. If you have already used Bugzilla, grep for COLUMNLIST
    in your cookies file to see your current COLUMNLIST setting.</para>

    <para><filename>bugs</filename> is a simple shell script which calls
    <filename>buglist</filename> and extracts the
    bug numbers from the output. Adding the prefix
    "http://bugzilla.mozilla.org/buglist.cgi?bug_id=" turns the bug list into
    a working link if any bugs are found. Counting bugs is easy. Pipe the
    results through 
    <command>sed -e 's/,/ /g' | wc | awk '{printf $2 "\n"}'</command>
    </para>

    <para>Akkana Peck says she has good results piping 
    <filename>buglist</filename> output through 
    <command>w3m -T text/html -dump</command>
    </para>

  </section>

</appendix>

<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-always-quote-attributes:t
sgml-auto-insert-required-elements:t
sgml-balanced-tag-edit:t
sgml-exposed-tags:nil
sgml-general-insert-case:lower
sgml-indent-data:t
sgml-indent-step:2
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
sgml-minimize-attributes:nil
sgml-namecase-general:t
sgml-omittag:t
sgml-parent-document:("Bugzilla-Guide.xml" "book" "chapter")
sgml-shorttag:t
sgml-tag-region-if-active:t
End:
-->

