NAME batchbug - add or modify multiple fields in one or more bugs SYNOPSIS batchbug [-n] [-l lockwait] [-s | -S | -b bugbox | -i bugid] [-t templatefile] [-d debugfile] [-e path title] ... [-r oldtitle newtitle] ... [-R title] ... [fieldname value] ... DESCRIPTION The batchbug utility is used to create or make changes to one or more ClearDDTS bug records without interactive I/O, that is, in batch mode. The batchbug utility is useful for automated test scripts or hardware diagnostics that need to automatically submit defects without human interaction. Unlike patchbug(1), the batchbug utility immediately applies the changes to the ClearDDTS database, and by default, causes appropriate notification E-mail to be sent to users regarding the changes. The -n option suppresses all notification E-mail about the transaction(s) performed. It is suggested that this option be used when processing large numbers of bugs. Note also that patchbug(1) may be more appropriate for large numbers of bugs. The -l lockwait option requires batchbug to acquire a lock on the specified defect before modification. If the record is already locked batchbug will attempt to acquire the lock every 5 seconds up to lockwait seconds. If lockwait seconds expires and the record lock has not been acquired batchbug returns with an exit status of 2. The -s option specifies that a new bug is to be submitted instead of modifying an existing bug. In this case, batchbug will allocate a new record ID number and automatically initialize the "Start", "End", and "Identifier" fields with that number. The -S option is like the -s option except that the newly created Identifier field is printed to stdout upon completion. If the -b bugbox option is specified, batchbug reads record IDs from the named bugbox file, and makes the same changes to each specified defect record. If the -i option is specified, the bugid argument is the identifier of a bug record to be modified (for instance, XXXxx12345). Only one bugid can be used with the -i option. If none of the -s, -b, or -i options are specified, batchbug reads bugids from the standard input and makes the same changes to each specified defect record. The -t templatefile argument specifies the name of a template file (formatted as described in template(5)) to be executed. The templatefile can be used either to initialize the various required defect record fields of a newly submitted defect (the -s option), or to update fields in an existing defect. Care should be taken with the templatefile not to use the "%s" directive as this will cause interactive I/O to occur and thus frustrate the automatic (batch) nature of batchbug(1). The -d debugfile argument specifies the name of a debug file into which the resulting defect is placed (one defect only). No change is made to the database. This may be used for debugging run strings and template files. The -e option specifies that an enclosure is to be added to the defect record. The path argument is the name of the file to be added as an enclosure. The title is the title for the enclosure. The path and title arguments must be specified as pairs. Note that if title has embedded blanks it must be surrounded by quotes ("") so that the shell passes it as one parameter. If an enclosure with a title of title already exists in the defect record it is overlayed with the new enclosure file specified in path. The -r option allows you to rename an enclosure from oldtitle to newtitle. An enclosure named oldtitle must exist and there cannot be an enclosure already named newtitle. The -R option allows you to delete an enclosure named title. An enclosure named title must exist first. The fieldname and value arguments must be specified as pairs. Each fieldname must be followed by a value. Note that if value has embedded blanks it must be surrounded by quotes ("") so that the shell passes it as one parameter. These fieldname and value pairs are applied to the defect record before the templatefile is executed thus these values may be used to change the defect record and also used as flags passed into the templatefile to guide its executation. If fieldname already exists in the defect record it is overlayed with the new value. The batchbug utility will change each existing fieldname in the defect record to have the corresponding value, or if fieldname doesn't exist in the defect record, batchbug will add it. After making the modification(s) to each defect record, the record's Timestamp field is incremented to distinguish it from previous copies of the same record. Then, the defect record is passed to the bugs.in(1) daemon for incorporation into the ClearDDTS database. Note that machines subscribing to the Project associated with the defect will also receive the new copy. If batchbug is run without any parameters it simply forces the ClearDDTS system to examine all the work directories to see if there is any pending work. WARNINGS Note that batchbug modifies defect records without the validity checking provided by the ClearDDTS master.tmpl template file mechanism. Be careful with the run string! The path and title must be specified as pairs and all of the title should be enclosed in quotes (""). In addition, fieldname and value must be specified as pairs and all of the value should be enclosed in quotes (""). An incorrectly specified run string can damage a bug record. The Updated-by field is not modified unless explicitly asked to do so. This may generate E-mail notification with an incorrect Subject line in some cases. If you wish to be logged as the person who made the last change, you should update this field in addition to the others that you modify. This utility is powerful and therefore dangerous. Make sure you understand what batchbug does before you run it. Note that Appendix B of the ClearDDTS Administration Manual describes the fields that must be modified to move a bug from state to state. EXAMPLES The following modifies bug CMMaa00030 by executing template file /tmp/hello, adding the enclosure in file /etc/passwd with a title of Big Problem. It also adds a field called Foo with a value of Bar Bar. A lock on CMMaa00030 is required before the transaction is made. batchbug -l999999 -i CMMaa00030 -t /tmp/hello \ -e /etc/passwd "Big Problem" Foo "Bar Bar" See the ~ddts/class/software/batchbug directory for batchbug template files that will make all state transitions shipped with ClearDDTS. See ~ddts/class/software/batchbug/* directory for examples of how to use batchbug. In particular, look at the README file. BUGS The batchbug utility should be run on the server where ClearDDTS is installed. It may be run on a client system, however, care should be exercised not to run afoul of the NFS client side kernel file cache. The NFS client system keep an in memory cache of files. Thus a batchbug change to a file, immediately followed by another change may cause the normal read-modify-write cycle of batchbug to read old data and attempt to update from old data. Run batchbug on the client via rsh(1) (or remsh(1)) if possible. We have only seen this problem once in over two years in an application that made repeated changes to the same bug over and over again (a poor design). It is very unlikely that you will see the problem. This problem can be eliminated by using a 5 second sleep(1) between calls to batchbug or by modifying the default client side mount(1) paramenters. See the mount(1) man page where the ac* parameters are discussed with regard to the NFS cache. SEE ALSO bugs.in(1), ddtsd(1), patchbug(1), template(5), ~ddts/class/software/batchbug/* Appendix A: Contents of a Defect Record in the ClearDDTS Administrator's Guide