<?xml version="1.0"?>
<!-- This Source Code Form is subject to the terms of the Mozilla Public
     License, v. 2.0. If a copy of the MPL was not distributed with this
     file, You can obtain one at http://mozilla.org/MPL/2.0/.

     This Source Code Form is "Incompatible With Secondary Licenses", as
     defined by the Mozilla Public License, v. 2.0.
-->
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
                      "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [
    <!ENTITY % myents SYSTEM "bugzilla.ent">
    %myents;
]>

<appendix id="patches" xreflabel="Useful Patches and Utilities for Bugzilla">
  <title>Contrib</title>

  <para>
    There are a number of unofficial Bugzilla add-ons in the 
    <filename class="directory">$BUGZILLA_ROOT/contrib/</filename>
    directory. This section documents them.
  </para>

  <section id="cmdline">
    <title>Command-line Search Interface</title>

    <para>
      There are a suite of Unix utilities for searching Bugzilla from the 
      command line. They live in the 
      <filename class="directory">contrib/cmdline</filename> directory.
      There are three files - <filename>query.conf</filename>,
      <filename>buglist</filename> and <filename>bugs</filename>.
    </para>

    <warning>
      <para>
        These files pre-date the templatization work done as part of the
        2.16 release, and have not been updated.
      </para>
    </warning>
    
    <para>
      <filename>query.conf</filename> contains the mapping from
      options to field names and comparison types. Quoted option names
      are <quote>grepped</quote> 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 <quote>option</quote>.
    </para>

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

    <para>
      The column list is taken from the COLUMNLIST environment variable.
      This is equivalent to the <quote>Change Columns</quote> option
      that is available 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
      <quote>http://bugzilla.mozilla.org/buglist.cgi?bug_id=</quote>
      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>

  <section id="cmdline-bugmail">
    <title>Command-line 'Send Unsent Bug-mail' tool</title>

    <para>
      Within the <filename class="directory">contrib</filename> directory
      exists a utility with the descriptive (if compact) name
      of <filename>sendunsentbugmail.pl</filename>. The purpose of this
      script is, simply, to send out any bug-related mail that should
      have been sent by now, but for one reason or another has not.
    </para>

    <para>
      To accomplish this task, <filename>sendunsentbugmail.pl</filename> uses
      the same mechanism as the <filename>sanitycheck.cgi</filename> script;
      it scans through the entire database looking for bugs with changes that
      were made more than 30 minutes ago, but where there is no record of
      anyone related to that bug having been sent mail. Having compiled a list,
      it then uses the standard rules to determine who gets mail, and sends it
      out.
    </para>

    <para>
      As the script runs, it indicates the bug for which it is currently
      sending mail; when it has finished, it gives a numerical count of how
      many mails were sent and how many people were excluded. (Individual
      user names are not recorded or displayed.) If the script produces
      no output, that means no unsent mail was detected.
    </para>

    <para>
      <emphasis>Usage</emphasis>: move the sendunsentbugmail.pl script
      up into the main directory, ensure it has execute permission, and run it
      from the command line (or from a cron job) with no parameters.
    </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:
-->
