August 18, 1997

This is the 3.104 beta release of GNATS.  This is NOT the last beta release.
It's still in need of documentation across the board, but I wanted to send
this out to get people started on trying it out.  It's available on
ftp.cygnus.com in /pub/gnats as `gnats-3.104-beta.tar.gz'.  Also available are
a set of diffs between 3.102 and 3.104, to make it easier for folks to jump
straight forward and not apply two sets (from 3.102->3.103, then 3.103->3.104).
That set is in `gnats-3.102-3.104-diffs.gz'.  

This beta is coming out very soon after the 3.103 beta, due to a fundamental
bug in the Makefile of that release.  I've also dropped in a few other
changes, all from "Jonathan I. Kamens" <jik@cam.ov.com>.  Thanks Jonathan!
I've also updated TkGNATS in the contrib section to the latest release.

The file gnats/PROBLEMS has a list of known problems with GNATS; folks are
encouraged to fix any of them they might want to.  Even investigating a bug
further is helpful.

By the way, I'm looking for someone to take over maintenance of GNATS, and
bring it forward to its much-needed 4.0 release.  (Or at the very least, to
volunteer to update the documentation so we can finally DO a GNATS 4.0
release.)  Please drop me a line if you're interested.


Changes in this (and the 3.103) beta release were:

* Some screwups wrt the libexec changes made 3.103 install things incorrectly.
* The check-db.sh contributed script has been fixed to look in the libexecdir
  instead of the libdir.
* The tkgnats included has now been updated to the latest beta version.
* Support for Kerberos 4 on regular BSD systems has been fixed.  Compatability
  with using Kerberos 5 is also added.
* The mkdist.sh script can now handle having the files in the dist directory
  be gzipped.
* The contributed delete-pr script has been fixed to get the right variables
  from the configuration.
* David MacKenzie has adjusted all of GNATS to use the GNU standard file
  system layout; e.g., using `libexec' and `share' instead of putting
  non-library files in `lib'.
* The configuration will now detect if you have GNU m4 installed.
* Jonathan Kamens has made it possible to separately install the
  architecture-dependent pieces for the main server on one machine, and the
  independent pieces for the clients.
* When editing a PR under emacs, use of an invalid name for a responsible
  party is now detected.  pr-addr now accepts `-s' or `--strict'.
* Ken Raeburn has done a variety of cleaning on the various clients, including
  the addition of `-P' or `--port', where applicable, to specify a new port to
  connect to.
* In addition, he adjusted npr-edit to do all of its writes and then look for
  replies upon completion, to reduce the network delays in using check_pr.
* A few bugs in getclose have been fixed to properly do date calculation, and
  properly parse the dates it's given.
* A fundamental bug in npr-edit caused problems on the alpha.
* The locking and unlocking of the database are now handled a little more
  cleanly by the server.
* A fix was contributed by Jonathan Kamens to make emacs automatically tell if
  a particular PR has already been sent---if so, prompt the user before it
  proceeds to re-send it.


The other changes include:

* A fundamental fix has been made in pr.c, so that reading in a PR
  will go much faster; we now double the buffer's size each time we
  reach its limit.  In the past, we only added on BUFSIZ bytes to
  it, which made us end up reallocating the memory far too many times.
* GNATS no longer interprets a line beginning with `>' in the header
  of the message as a sign that the headers are no longer in effect.
* The emacs mode for editing PRs now accept `C-c C-y' to change the
  `>Severity:' field, and `C-c C-p' to change the `>Priority:' field;
  either will also put an entry in the audit trail, allowing you to
  provide an explanation for the change.  This makes such changes more
  easily tracked.
* a crash in find_responsible has been fixed by making sure to zero
  out the receiving array before reading in the list of responsible
  names; thus, if the `alias' field of the responsible file is
  missing, we won't end up with garbage in memory
* the definition of INSTALL in the GNATS Makefile has been adjusted to
  let installation in subdirectories work properly in all cases
* A bug in the Makefile's creation of the config file has been fixed,
  so that GNATS_ADDR will always show up.
* send-pr no longer pays attention to interrupt signals, since editing
  the created PR with emacs as your editor allowed send-pr to abort
  the sending of the PR if you hit `C-g'
* send-pr now gets the correct DATADIR definition if you're using
  GCC_EXEC_PREFIX.
* the GNATS PROBLEMS file has been considerably expanded and cleaned up
* query-pr and nquery-pr now accept `-y regexp' or `--synopsis=regexp' to
  search for any PR that contains the given regexp in its `>Synopsis:'
  field; they also accept `-A regexp' or `--release=regexp' to search for a PR
  with the regexp in its `>Release:' field. 
* the daemon will now accept `SYNP regexp' to search for a particular
  synopsis; `RLSE regexp' to search for a certain value of the `>Release:'
  field; and `BFOR date' (when configured --with-release-based) and
  `AFTR date' to search for values of the `>Date-Required:' field.
* config/tkgnats has been updated to the 2.0b4 release.
* getclose, pr-age, pr-stat, and gnatsd all now accept -V or --version
* A bug in the emacs mode has been fixed, so addresses of the form
  Joe T. User <someone@somewhere> will automatically have the name
  contained within quotation marks: "Joe T. User"; otherwise, most
  mail systems would give an error when it sees the period.
* Some compile problems with the NeXT system compiler have been fixed.
* query-pr now accepts the `-D' debug option of nquery-pr, and ignores it.
* A nquery-pr manual page has been added, and a few errors in the
  exiting pages have been fixed.  The missing arguments to query-pr
  have also been put in place in its man page.
* The GNATS install manual now mentions that you probably need GNU m4 in order
  to build GNATS.  In the list of steps to take for installation, the
  creation of the GNATS account has been moved before the actual running
  of `make install'.  The usage manual now documents the `C-c C-f' (change
  field) command under emacs.
* A new program `getclose' will find you any PRs that were modified between
  a set of three dates: between two which qualify it as definitely "applied"
  during that time, and a third date, which will point out those that may or
  may not be fully resolved in that time.
* contrib/scripts has a few handy scripts (two in Korn shell) from
  Brian Abernathy.
* contrib/elisp has the new `gnats-admin.el' from Roger Hayes.
* A few bug-fixes in terms of string length have been fixed, to avoid
  memory errors.
* The GNATS daemon has been adjusted to do case-insensitive checks for
  hostnames trying to access the server.
* npr-edit now supports the locking and unlocking of the GNATS
  database with `--lockdb' and `--unlockdb'.  Add LKDB and UNDB
  commands to the server.
* If you're already editing a PR, we now go immediately to that buffer
  rather than wait for an error to tell us we have it.
* Make sure GNATS:RUN-IN-BACKGROUND is null before we do the forced
  unlocking of remaining buffers.
* Indentation of changed fields via GNATS::INDENT has been changed to
  be in line with the other fields.  We'd originally forced it to be
  one off so it's obvious which fields have changed; let's see how
  helpful it really was.
* Bug fixed in the creation of indexes, causing possible memory corruption.
* Configure adjusted for finding the Kerberos library.
* Add more portable solution for finding out the hostname.
* texinfo has been updated to the 2.8 release.
* with the elisp interface to GNATS, gnats:run-in-background defaults to t
  to make the checking and filing of a PR happen in the background to the
  emacs process; setting gnats:run-in-background to nil keeps it all in
  the foreground, as with previous releases.
* have new "release based" approach with --with-release-based, adding
  new `quarter' and `keywords' fields to PRs
* cmds.c, clean up general code layout
* add checks for netdb.h 
* default server name now `gnats', not `gnatsserv'
* new nedit-pr script, to do network-based editing
* add BFOR and AFTR to daemon, for PRs before/after/between certain dates
* add VDAT command to daemon, to verify that a date format can be used
* make gnats-el.in more friendly to emacs 18
* fix lots of bugs wrt ANSI compliance of the code, clean up array
  use and unfreed memory
* the ability to use a username other than `gnats' by configuring with
  `--with-gnats-user=name'.  This will communicate the desired name down
  through all of the programs to be built and used.
* the server now has a RSET command, to return the daemon to its startup
  state
* the notify field of the submitters file is correctly added to the `Cc:'
  header of PRs as they're edited.
* Ken Raeburn has written a new GNATS summary mode for emacs, used by the
  command `summ-pr'.  Give query-pr or nquery-pr the appropriate options
  (like --responsible or --state), and you'll get a nice buffer to view or
  edit those PRs as you choose. 
* the elisp mode for send-pr fixes a bug about mail-default-reply-to being
  set to t by default starting with emacs 19.29
* send-pr now takes -s/--severity, to specify the severity on the
  command line.  Also, -c/--cc let you give a Cc: header on the command line.
* It's now possible to have multiple GNATS databases on one system.  Use
  --with-gnats-service, --with-gnats-port, --with-gnats-server, and
  --with-gnats-root when configuring it.  It'll install the programs
  into separte directories (based on --exec-prefix and --prefix), which you
  can then create symbolic links for somewhere else, or set your PATH
  depending on which one you want to use.
* Modified to use autoconf 2.3 for configuring it.  Major improvement in
  portability combined with this shift.
* Added Kerberos support.
* Added functionality for a network-based GNATS, rather than having to
  NFS-mount the directory.  Includes a GNATS daemon, network-based query-pr,
  and new programs like pr-mail (list who should be sent mail about a given
  PR), and sub-type (give the type of a submitter).  The protocol for the
  server is designed to be versatile and open up future tools.
* The mechanism is in place to do remote PR editing and viewing from within
  emacs.  A script-version of a remote edit-pr isn't done yet.
* Considerable speedups were done.
* Major code cleanup across the board.
* Fixed hundreds of bugs since the last gnats release, including memory
  conflicts, areas that caused crashes, files and directories not being
  closed, etc.
* Cleaned up the GNATS elisp code.
* Improved the errors emitted to be more uniform.
* Speed increase in many things, including the most concentrated parts of the
  system (e.g., setting up the lists of mail headers and PR fields).
* A new ">Last-Modified:" field, to track when a PR was edited.
* Editing a PR will automatically Cc: anyone listed in the notify field of the
  submitters list.
* A few bugs were fixed in file-pr, most notably of which is looking up the PR
  by number given `category/number' in the Subject: field of a reply.  This
  will stop PRs from ending up in pending if the PR has changed category.
  Also, the responsible person is no longer set to include their full name in
  the field, since nothing else keeps it there.
* Looking up the responsible address for a PR has been adjusted when editing
  the PR, so we can let the editor allow names that don't necessarily appear
  in the `responsible' list, but are valid nonetheless.  (You will now only
  need to list folks in the responsible list if they don't have an account on
  the system running the server.)
* The lock for a PR now gives the pid of the process, and what program
  locked it.
* Argument parsing for gnatsd has been adjusted to properly check the various
  arguments it can get, including multi-word arguments.
* The GNATS:KEEP-EDITED-BUFFERS variable in emacs is now used correctly.
* The elisp code is now mostly functional with emacs 18.
* file-pr will now find the PR properly in a message that happens to use
  the Subject: style of `Re[2]: foo/1234: ...'.
* Skipping closed PRs is no longer case-sensitive for matching.
* The date_required field is now set modify_pr---this used to cause the
  tools to crash when they were built --with-release-based.
* The send-pr elisp code now uses CALL-PROCESS rather than SHELL-COMMAND
  to get the template PR.  It's also been fixed to properly use
  the MAIL-DEFAULT-REPLY-TO variable.
* Minor mistakes in the docs were fixed.
* The configure scripts have been fixed to not use the default prefix
  value of `NONE' if --prefix wasn't specified.
* contrib/wwwgnats/wwwgnats.shar is the new version by Karl Berry of the Web
  interface to GNATS.

The support for remote queries and editing is the most dramatic addition.  The
original approach, requiring the GNATS tree to be exported, will still work.
However, the new release will include a daemon and clients, to make it more
extendable.

Build GNATS as you normally would, configuring it with just:

  ./configure

If you want to install GNATS in a directory other than /usr/local, add the
flag `--prefix=/usr/wherever'.  Likewise, if you want to install all of the
binaries in separate directories, but only maintain one copy of the
host-independent files, add `--exec-prefix=/usr/wherever/H-hosttype'.

To point GNATS at a particular root for your files, use something like

  --with-gnats-root=/usr/local/gnats-db

If you want to build everything, not just the tools to query and edit, add the
flag `--with-full-gnats'.  That will make it build the support files like
`file-pr', and the daemon, `gnatsd'.  By default, the daemon and clients are
set to use port 1529.  Add the line

		support		1529/tcp			# GNATS

to your /etc/services file (or wherever).  If you want a different port,
simply change it there---you shouldn't have to change it within GNATS.

Please note that as of August 7, 1997, we do need to pick a new port since
another software package has taken the 1529 port.  I'm perfectly willing to
move it to port 1629, but we need someone to officially register the port to
make sure it stays reserved.  (No time to do it myself.)

In your inetd.conf file, put something like:

-- cut --
support	stream	tcp	nowait	gnats	/usr/local/etc/gnatsd gnatsd
-- cut --

adjusting the path accordingly.  To make inetd start spawning the GNATS daemon
when connected on that port, send it a HUP signal.

By default, the server for the GNATS daemon is assumed to be one with the
cname of `gnatsserv'.  If you'd like something else, use

	--with-gnats-server=hostname

Please try this on as many hosts as you can, using both the system compiler
and the GNU C compiler.  To force it to use the system's one, you can do

	$ CC=cc ./configure

to make sure it doesn't find gcc.

To build GNATS, just type `make'.  If you are using the GNU compiler (aka, if
you try to type `gcc' you get it), you'll want to do `make CC=gcc'.

In the gnats-adm directory, you'll want to edit `gnatsd.conf'.  It lists the
hosts allowed to access your server.  Or, if you're using Kerberos, it shows
the sites that don't require Kerberos authentication.  The format is open
for revision at the moment; only the first field matters:

	site.com::

The second field may be used for things like controlling what categories,
submitter-id'd PRs, etc can be accessed from that site.  In the file that
logs syslog messages (/var/adm/messages, for example) you'll find the
notification of denied access.

Please note that this is a BETA release.  Please try to investigate the source
of problems before you send me mail about it; don't just say, "It doesn't
work!"  One of the main reasons for this release is to check the portability
and reliability of the new code.

Please send any comments or questions to `brendan@cygnus.com'.

Thanks!
Brendan
