This directory contains contributed software related to Bugzilla.
Things in here have not necessarily been tested or tried by anyone
except the original contributor, so tread carefully.  But it may still
be useful to you. Read the files themselves for detailed usage information
on any specific script.

This file is encoded in UTF8 for purposes of contributor names.

This directory includes:

    bugzilla-submit/ --  A standalone bug submission program.

         bzdbcopy.pl --  A script to copy data from an installation running 
                         on one DB platform to an installation running on 
                         another DB platform.

bz_webservice_demo.pl --  An example script that demonstrates how to talk to
                         Bugzilla via XMLRPC.

             cmdline/ -- Various commands for querying your Bugzilla 
                         installation.

            jb2bz.py --  Script to import bugs from JitterBug to Bugzilla.

      merge-users.pl --  Script to merge two user accounts. The activities
                         from one account are moved to the another. Specify
                         both accounts on the command line. The new account
                         must already exist. 

   mysqld-watcher.pl --  This script can be installed as a frequent Cron 
                         job to clean up stalled/dead queries.

           recode.pl --  Script to convert a database from one encoding 
                         (or multiple encodings)  to UTF-8.

      sendbugmail.pl --  This script is a drop-in replacement for the
                         'processmail' script which used to be shipped
                         with Bugzilla, but was replaced by the
                         Bugzilla/BugMail.pm Perl module. This script can 
                         be used if 'processmail' was previously called
                         from other scripts external to
                         Bugzilla.  See the comments at the top of
                         the file for usage information. Contributed
                         by Nick Barnes of Ravenbrook Limited.

sendunsentbugmail.pl --  Script to find bugs with un-sent mail and to
                         send all unsent messages.

         syncLDAP.pl --  Script that can be run via Cron that queries an LDAP
                         server for users and e-mail addresses and adds
                         missing users to Bugzilla. Can disable/update 
                         non-existing/changed information. Contributed by
                         Andreas Höfler <andreas.hoefler@bearingpoint.com>.
