PRCS NEWS -- history of user-visible changes. -*- Text -*-
$Date: Fri, 03 May 2002 09:09:57 -0700 $
$ReleaseVersion: 1.3.3 $

Please send bug reports to prcs-bugs@XCF.Berkeley.EDU.  See the file
`README' for a description of how to report bugs.

** Changes since version 1.3.1

* Make it work with gcc-3.2.  I'm sorry if this doesn't compile with earlier
  compilers.


** Changes since version 1.3.1

* Contrib reorganization: Thanks to Rafael Laboissiere for reorganizing the
  contrib/ subdirectory and adding manual pages originally written for the
  Debian package.

* New contrib items: a bash completion script by Rafael Laboissiere and
  prcs-mv suite by Yann Dirson.

* Convert to latest and greatest autoconf, automake versions.

* Implement automatic detection of gcc version 3 and apply the gcc3 patch in
  configure.  Thanks to Rafael Laboissiere.

* Apply a patch for compilation on Apple/Darwin (without gcc3).  Thanks to
  kaben@random.poofygoof.com.


** Changes since version 1.3.0

* Fix the following bug: a repository inconsistency could arise when a
  checkin operation is aborted after the project's RCS version file
  has been updated but before the PRCS repository data file is
  updated.  The inconsistency does not show up immediately.  The
  checked-in project version does not register until the next 'prcs
  admin rebuild', at which point there exists is a duplicate project
  version number.  Further, it causes incorrect parent-versions to be
  recorded until the next rebuild.  Rebuild now detects this
  condition, although it does not attempt to repair the corruption if
  it exists.  If this has happened to you please contact
  prcs-bugs@XCF.Berkeley.EDU for assistance.  Reported by Keith Owens.

* Fix a partial-checkin bug.  'prcs checkin' now prevents a partial
  checkin from changing the version of a non-selected file, which
  could occur when certain merge actions were correctly followed.  For
  example, 'prcs checkin -l list-of-files-exluding-F' may now report:

    Non-selected file 'F' assumes pre-existing version.

  Reported by Dan Bonachea.

* Fix bugs related to deleted project versions.  The use of "@" as a
  minor version specifier now selects the highest non-deleted minor
  version.  Reported by Daniel Villeneuve.

* 'prcs info' now now prints summary information for deleted project
  versions.  For example:

    tmp 0.2 Sat, 02 Feb 2002 22:36:00 +0300 by jmacd *DELETED*

* Patches have been included for compilation with GCC 3.0.x.  These
  are not applied in the mainstream release because they prevent
  compilation with GCC 2.95.x.  See the included patch file
  "prcs-1.3.1gcc3.diffs".

  (Port to GCC 3.0.x -- no longer using libstdc++ backward
  compatibility headers.  Eliminate a lot of non-portable iostream
  stuff that disappeared in libstdc++-3.  Much of the original work
  for this was performed by Lars Duening when he ported PRCS to BeOS
  back in version 1.2.9.  Thanks Lars.)

* Debian packaging (Rafael Laboissiere)

* prcs.el improvements (Rafael Laboissiere)

* prcs usage() reports to stdout instead of stderr (Rafael Laboissiere)

* prcs.texi bug in 'prcs execute' example (Rafael Laboissiere)

* contrib/prcs-clean improvements (Rafael Laboissiere)


** Changes since version 1.2.16

* A new command 'prcs changes' command has been added to help find
  what versions modify a certain file.  From the documentation:

  - Command: prcs changes [option ...] [project [file-or-dir ...]]
     ADDITIONAL OPTIONS: `-r' (once or twice), `-l'

     The changes subcommand helps you find what versions modify a
     specific file or files.  For example, suppose you fixed a bug a
     long time ago and now it shows up again in the current version.
     You would like to know what project versions modify a certain
     file so you can find out who undid your bug-fix and blame them!

     Like `prcs diff', the OPTIONs may specify zero, one, or two
     versions (using `-r' options).  Specifying no `-r' options is
     equivalent to supplying the single option `-r.', the version from
     which the current working directory was checked out.  A `-r'
     option that specifies only a major version (leaving off the
     minor version and its preceding period) implicitly has a minor
     version of `@'.  When one version specifier is given, only that
     version is scanned for changes.  Two version specifiers cause a
     range of versions to be scanned.  In the two version case, one
     version must be an ancestor of the other, and reversing the
     order of the two versions will reverse the order of the output.

     When FILE-OR-DIR arguments are present, they restrict the change
     report to the specified files or subdirectory trees.  Otherwise
     all files are reported.

     For each specified version that modifies a file (in the
     reporting set) relative to one of its parent versions, `changes'
     prints the project name, major and minor version identifiers,
     date and time checked in, and the user who checked in the
     version.  Then it prints the parent version and a listing of all
     the selected files that were modified, including: addition,
     deletion, rename, type change, symlink change, or version
     change.  For regular files, `changes' also prints the number of
     lines added and removed by the modification.  If a project
     version does not modify any of the selected files, nothing is
     printed.

     When the `-l' option is present, `changes' also prints the
     version-log associated with each version.

* Support for the new 'changes' command, specifically the ability to
  print the number of lines added and removed by each modification,
  requires a format change to the repository data file.  You must
  upgrade each repository with a 'prcs admin rebuild' command.

* Add a new --version-log= option to 'prcs checkin' to allow
  specifying the Version-Log on the command line.  You will be
  prompted if there is an existing New-Version-Log already.

* New contrib package 'pck', the 'Patch Control Kludge' by Chris
  Mason.  This Perl utility is designed for those of you who get
  headaches working in the patch-oriented world of Linux kernel
  development.  It helps you maintain external patches in named sets
  including order dependencies, import new versions based on patches
  with minimal work (using partial checkout/checkin), export compound
  differences between multiple project versions, and more described in
  the pck.README file.

* Add a new --no-keywords option to 'prcs populate' to add files with
  the :no-keywords attribute.  Remember that you can make an entire
  files section have :no-keywords as follows:

  (Files :no-keywords
    (file1 ())
    (file2 ())
    ...
    )

  (We probably should have a :keywords attribute to negate this
  effect, but we don't.)

* Updated 'prcsutils' contrib package by Hugo Cornelis.

* Updated 'visualtree' contrib package by Hugo Cornelis.

* Fix a keyword-substitution bug reported by Daniel Villeneuve whereby
  a string of the form "$Key = 4 * $Key" (i.e., some Perl code).  The
  documentation never allowed this but the implementation was
  incorrect.  Only a string such as "$Key$" or "$Key: ...$" will have
  keywords replaced.

* Upgrade to regex sources from glibc-2.2.4 for 64-bit support.

* Remove a declaration of abort() that was conflicting with the
  headers in RedHat 7.x and causing compilation problems.  The
  declaration was originally there because SunOS 4.3 headers were
  lacking.

* Fix for non-existant user/group handling in 'prcs admin access'

* Fix for checkin and merge commands to preserve the project file
  mode, reported by Dan Bonachea.

* Fix prcs.el to support Emacs 21, which for some reason renames
  shared-lisp-mode-map to lisp-mode-shared-map.

* PRCS checks for proper versions of RCS and GNU diffutils before
  running--these checks were broken by GNU diffutils 2.7.2 and are now
  fixed (reported by Keith Owens).


** Changes since version 1.2.15

* Incorporate new contrib submissions.  See the contrib subdirectory
  for more information.  Now included are:

   - rprcs: This script allows PRCS to operate on a remote
            repository using rsync and ssh.  Thanks to Hugo Cornelis
            and Kaz Sasayama.

   - prcs-synch: This script synchronizes two remote repositories
            provided they have not altered the same branches,
            supporting disconnected use.  Thanks to Jesse Glick.

   - visualtree: This set of scripts generates a graph to visualize a
            PRCS project using the xvcg graphing tool.  Thanks to
            Keith Owens.

   - pfe: This tool generates a graph of PRCS versions using Tcl.
            Thanks to John Stump.

   - prcsutils: Tools for listing PRCS branches, checking the
            Populate-Ignore directive, getting entries from the
            project file, running grep over a project, guessing
            the name of the current project, generating patches, and
            giving a 'cvs status' style output from PRCS.  Thanks to
            Hugo Cornelis and Austin Donnelly.

* Previously, 'prcs config' would perform a sanity check on the
  configured RCS and diff commands to see that are indeed the GNU
  versions of those commands.  Now, the diff3 command is also checked,
  and these checks are performed prior to every command.  The Solaris
  /bin/diff3 doesn't accept the GNU flags passed by PRCS, reports
  usage information, and exits by returning 1.  Since GNU diff3
  returns 1 to indicate success-with-conflicts, PRCS did not catch
  this error and instead reads zero bytes from the standard output.

* If merge fails after having copied files to an `obsolete'
  subdirectory, remind the user of that fact.  After a successful
  merge, list all files which have merge conflicts.  Merge "No Prompt"
  actions are now silent unless -L is specified, and "Do Nothing"
  actions are silent when -f is specified and unless -L is specified.

* Improve error reporting.  In particular, PRCS now clearly reports
  when a checked-out version is shorter than the expected length.  The
  old error message was: "prcs: Read failed from RCS co pipe:
  Success", and now (e.g.,) it reads: "prcs: File `PRCS/P/F,v:1.7'
  too short: expected 24480; recieved 24474".  If you observe this
  error message, try running "prcs admin rebuild" to re-establish
  repository consistency.  Similar errors are now reported elsewhere
  in the code.

* The documentation stated that `:' was a valid character for major
  version names, although the program has never accepted this
  character.


** Changes since version 1.2.14

* Correct two bugs in the execute command pointed out by Keith Owens.

  - The -P argument was previously ignored.  The behavior is now
    similar to the diff command: if no file names are supplied on the
    command line then the project file is included, otherwise it is
    excluded unless explicitely named.
  - The implicit subdirectories that are normally listed by execute
    were not being pruned according to the files listed on the command
    line.

* Fix compilation using gcc-2.95, and fix compilation problems on
  IRIX 6.  Thanks to Albert Chin-A-Young for testing the build on
  a number of platforms, including: IRIX 6.2, 6.5; HP-UX 10.20, 11.0;
  Digital UNIX 4.0D; Solaris 2.5.1, 2.6, 2.7.

* Work around a glibc "feature" where fprintf would lose 4K chunks of
  output when a signal was received.  Submitted by Keith Owens.

* The -N flag now generates a diff to reflect file deletions.
  Previously it only generated a diff on file additions.  Submitted by
  Keith Owens.

* Fix a bug in the Err_write function that made it possible for PRCS
  to create corrupted package files.  Submitted by Mark Richters.

* Fix a bug that caused the 'merge -n' command, which is supposed to
  take no action, to actually perform file renaming.  Pointed out by
  Stephan Wefing.

* Include the 'prcs-javadoc' script, submitted by Rafael Kitover.  It
  invokes JavaDoc on a list of projects.  I have not tested this.  He
  has also written a new PRCS tutorial, see:

    http://www.paymentgateway.com/~rkitover/

* Include the 'rprcs' script, submitted by Hugo Cornelis.  This
  performs remote prcs synchronization similar to the 'prcs-synch'
  script by Jesse Glick.  I have not tested this.

* Fix a /bin/sh compatibility issue in the 'prcs-callback' script.
  Submitted by Martin Giese.


** Changes since version 1.2.13

* The 1.2.13 distribution was missing the 3 elisp source files.


** Changes since version 1.2.12

* Add new tokens to be processed in execute patterns:

  - {base} returns the basename of the file, and
  - {dir} returns the dirname of the file

  If {dir} is empty, it uses ".".  I did this because I wanted to
  write:

    prcs execute --pre -- sh -c "cd {dir} && cvs add -ko {base}"

  to easily add prcs-controlled working files to a CVS repository.

* Add new file Y2K to address Y2K issues.

* Improved installation instructions detailing how to override the
  SYS_XXX_COMMAND_PATH variables.

* Fix compilation of the elisp source files.

* Apply various patches to configure, removing "if ! condition"
  tests since some systems suck a lot.

* Update new versions of prcs-synch and elisp code from Jesse Glick.
  Prcs-synch receives only bug-fixes.  His changes to prcs.el and
  related files are:

  * Diff command can now run EDiff!  It requires a new script
  installed in {prefix}/bin/prcs-callback.  By default, you are
  prompted on each diff whether to use EDiff, or plain output. If you
  choose EDiff, you will be presented with an EDiff directory-diff
  session group mirroring the directory structure of the project
  versions, but only changed files are included. Quit the session
  group when you are done to clean up temp storage on disk (I was
  unable to figure out how to get EDiff to do a directory diff just
  from buffers--maybe later).  Josh--note that setting
  PRCS_DIFF_COMMAND does not affect project file diffs in 1.2.11, so
  these still get sent to the plain output.  (Josh says: "noted")

  Note that using the callback script permits us to get away with not
  having GNUDoIt installed. I am planning to replace the current
  EDiff/emerge-on-merge support with something like the new diff
  support--much of the support code is already there, the main problem
  is handling user interaction with the merge invocation.

  * Added command to run `prcs info' with some options. From project
  buffer, run "C-c C-i" or "C-u C-c C-i" to invoke.

  * Better handling of exceptional cases when checking whether a newly
  visited file/project is PRCS-controlled and active. Asks the user
  what to do if necessary, and better handles inactive projects &c.

  * Split off ToDo list into separate file to avoid clutter in main
  .el file.

  * Documentation strings consistently use first line for summary, as
  expected by e.g. M-x apropos.


** Changes since version 1.2.11

* Attempt to repair a bug in which an interupted read syscall within
  flex code causes PRCS to fail.

* Include version 1.54 of prcs.el and the new prcs-hooks.el from Jesse
  Glick.  This replaces 1.31, and I don't have a complete set of
  changes, but here are the recent ones I dug up:

  New in 1.44

  * Rearranged some constant definitions & the like so that
  byte-compilation & loading of byte-compiled code should work now; this
  was broken before & produced some compiler warnings it shouldn't have.
  Still some compiler warnings but they should be safe to
  ignore. Affected code was mostly the use of e.g. prcs-Files variable
  to denote the Files symbol in prcs-obarray.

  * Have been trying it out on XEmacs 20.4. Fixed timer usage on XEmacs
  (itimer did not seem to work, using add-timeout). Still broken for me:
  toolbar hooks & font-lock support in PRCS major mode.

  * Prompts for PRCS version numbers (or branches) now have tab
  completion. Could use a little polishing but seems usable. See also
  prcs-sloppy-version-prompts if necessary. Feedback is welcome on
  whether this feature seems to be too slow; I haven't tried it on an
  especially large project yet.

  New in 1.50 from 1.44:

  * Comments from Vincent & Rafael have been considered and are either
  implemented or listed in the ToDo section.

  * User-visible features are listed in mode documentation, which should
  be clearer now.

  * Minor changes to output display code to make it more reliable (known
  problem remaining: invocation of e.g. diff from full-frame project
  buffer causes frame to be split, but both windows display PRCS output).

  * Now have separate file prcs-hooks.el (small, only 6K) which can be
  loaded from a .emacs by (require 'prcs-hooks); main prcs.el only loaded
  when PRCS-controlled files are actually visited. Similar in concept to
  vc-hooks.

  * More sophisticated (arguably more garish) font-lock support in PRCS
  project buffers. Makes it easier to recognize files, symlinks, etc. Also
  simplified code to load font-lock data.

  New in 1.54 from 1.50:

  * Previously mentioned output-display buglet fixed (with one window in
  frame); generally better interaction with `pop-up-windows'.

  * `normal-mode' now keeps PRCS Ctld. Mode on.

  * If PRCS command is not found in exec path, or if a particular project
  is not found in the repository, etc., PRCS Ctld. Mode will be turned off
  and project-buffer commands will be disabled. This permits you to browse
  someone else's files with a project file checked out, after an initial
  warning, without further hassle.

  * Shouldn't be finding Emacs p-file autosaves and such nastiness.

  * Using Customize facility for user-settable options. (Under
  "Programming" / "Tools".)

  * Safer symlink handling, modelled around VC and using
  `vc-follow-symlinks'.

  * Sane filename escaping behavior when p-file is read-only.

  * `prcs-inhibit-backups' removed in favour of more standard
  `vc-make-backup-files'.

  * XEmacs menubar is finally correctly placed only in p-file buffers (FSF
  behavior was correct already). At such time as controlled files get
  their own commands, there can be menu items for them as well, probably
  near the current VC menu.

  * Notes for possible future extension analogous to Dired-under-VC Mode.


** Changes since version 1.2.10

* ALERT! The MD5 code was not setting it's UINT4 type properly on
  64-bit systems, causing strange behavior.  If you are using a 64-bit
  OS, please upgrade.

* Trouble was corrected in the waitpid()/select() loop in
  syscmd.cc, the code that organizes the multiple outstanding child
  processes.  There was a loop that was busy-waiting on a few certain
  operating systems, starving the children and degrading performance.

* Fixes to configure.in for proper CFLAGS and CXXFLAGS variable
  handling, thanks to Mark Jefferys.

* Several patches to prcs.el have been submitted for Xemacs and Emacs
  20 incompatibilities, as well as multiple repository support.  These
  have not yet been integrated because I don't have time and Jesse
  Glick has been busy.


** Changes since version 1.2.9

* See http://www.doitnow.com/~iliad/Tcl/PFE/ for a tool that displays
  PRCS version trees in a friendly manner.

* Rename a #define that breaks PRCS in glibc 2.1-current so as to
  avoid trouble when glibc 2.1 is released.

* Correct a bug in prcs admin pdelete (fs_nuke_file), thanks to Mark
  Jefferys.

* Merge a set of patches Lars Duening so that PRCS works on
  BeOS. (Neat!)

* Includes version 1.31 of prcs.el from Jesse Glick.

* Correct a permission problem in the repository causing multi-user
  collaboration difficulties.  As noted by Daniel Villeneuve, it is
  still possible to get a repository into a situation where the owner
  cannot revoke privileges due to subdirectories being created by
  other users.  The only solution is a recursive directory copy, which
  for one reason or another, I do not feel compelled to implement.
  For now, the only way to retract priviledges in this situation is to
  package and unpackage.  However, now subdirectories are created with
  appropriate permissions, insuring that a repository with its
  permissions set properly at initialization will remain correct.

* Correct the documented behaviour of --disable-environment, it was
  backwards.


** Changes since version 1.2.8

* Update for C++ changes in egcs-1.1.  Thanks to Andrew Stitcher.

* Update a greatly improved prcs.el from Jesse Glick.  See the new
  documentation at the top of prcs.el.

* Fixed a few documentation typos.  Thanks to François Pinard and
  Daniel Villeneuve.

* Change the output of the "Index: " line in diff output so that the
  Index line matches the from name in the context diff header.  This
  seemed to cause problems for some versions of patch.

* prcs info -l now outputs Project-Keywords.

* The configure option --disable-environment allows you to build
  a binary free of any default environment variable settings.  This
  is intended for package maintainers.


** Changes since version 1.2.7

* RCS was replacing keywords in the working copy of the project
  file.  Correct this.

* Bug fix in execute: file extensions were incorrect when the last
  `.' occured in a directory prefix.

* More renaming in regex code to prevent errors on Digital UNIX--this
  is lame.  I can't build on the Digital UNIX box I have access to
  because the gcc fix-included headers (sys/types.h) are broken.  Come
  to think of it, I have this problem (fix-includes breakage) on
  certain versions of AIX and HP-UX too... YMMV.

* New option -P (--exclude-project-file) causes diff to not output
  differences between project files and checkout to not create the
  project project file.

* `prcs diff --' now unsets any diff options, including those set in
  the environment.

* Fix bug in `prcs admin pdelete' causing it to fail on some projects.
  Pdelete now issues a warning when a project does not exist.

* Document recursive keywords and -P.


** Changes since version 1.2.6

* Correct the ``valid username'' test to allow leading numerals.

* Improved error message for permission denied on certain repository
  files.

* Hopefully solve IRIX 64-bit ino_t template problem.

* Obtain updates and fixes to prcs.el from Jesse Glick.

* Change names produced by prcs diff: instead of

    some/path/to/file.orig
    some/path/to/file

  it produces:

    oldversion/some/path/to/file
    newversion/some/path/to/file

  This is to agree with the naming convention suggested by patch
  2.5.3.

* Keyword replacement is now recursive.

   (TodaysDate "Today's date is: $\Date$")

  produces: $TodaysDate: Today's date is: Fri, 03 May 2002 09:09:57 -0700 $

   (ThisWontCrash "This is bad: $\ThisWontCrash$")

  produces: $ThisWontCrash: This is bad: |ThisWontCrash| $, while a
  format leaves the `$' characters:

   $Format: "   $ThisWontCrash$"$
   This is bad: $ThisWontCrash$

  It is neccesary to prevent `$' characters from being replaced in
  a non-formatted keyword or else text ends up being inserted into
  the document outside of the keyword (everything after the first
  `$').

  Replacment of a keywords takes place on a string which is either
  quoted contents of a $Format$ keyword or the defined value of an
  outer-most regular keyword.  When this string contains an instance
  of keyword which is not currently being replaced, it recursively
  outputs the value of that keyword.  Processed text is not
  reexamined.  When spurious `$' characters are found inside a
  regular keyword (not $Format$), they are replaced with the `|'
  character.

  All of this suggests more and more general macro replacement
  facilities, but I haven't come up with any real uses for them.  I
  did this because I wanted to be able to write:

   (ReleaseVersion "$\ReleaseMajorVersion$.$\ReleaseMinorVersion$.$\ReleaseMicroVersion$"))

  So, if people are using this and can think of improvements or
  future direction in the keyword department, I think its very
  cool stuff...  send feedback.


** Changes since version 1.2.6-vforktest

* The merge query now treats `!' for each rule, so you may take the
  default for some rules and not other.

* Populate-Ignore and Project-Keywords entries are now merged during
  `prcs merge'.  Procedure:

  - After all files have been merged, populate ignore strings and
    project keyword pairs are merged.
  - Progress during these stages is not recorded, as it is for files.
    This means that quitting in the middle of this stage will result
    in starting the populate ignore and project keywords merge over
    again.  Since a merge not supporting 3-way reconciliation is
    idempotent (mostly), this is not a big issue.
  - The help strings will be a little confusing during these stages,
    I may fix this.


** Changes since version 1.2.5

* Replace most fork calls with vfork calls in an attempt to port PRCS
  to Amiga.  Add configure tests for fork and vfork.


** Changes since version 1.2.4+egcs

* Remove __GNU_LIBRARY__ logic from getopt source files.  PRCS uses
  a modified getopt_long routine, so this code needs to be compiled
  whether glibc is available or not.

* Rename functions in regex.{c,h} with a global replacement of "re_"
  to "re2_".  This is to prevent the following problem:

  PRCS links with g++
  g++ supplies -lg++ to the link line
  libg++ contains static initializer code for regex code in libg++
  The static initializers resolve to regex code in PRCS
  Regex code in PRCS is different enough to cause bad things to happen
    when these static initializers run, PRCS would core dump before
    reaching main.


** Changes since version 1.2.4

* PRCS now compiles with egcs-1.0.2.  I have only tested this release
  on the following compiler/platform combinations, and would
  appreciate hearing from users with other versions of g++:

  Linux 2.0.33		gcc version egcs-2.90.27 980315 (egcs-1.0.2 release)
  SunOS 5.5.1		gcc version 2.7.2.2

* Minor bug-fix to prcs.el.


** Changes since version 1.2.3

* Fix a bug in handling of irregular filenames (spaces, etc).

* Checkin now prompts 'abort' for checkin conflicts, while force
  continues the checkin.  This is the only prompt in PRCS where
  the force behavior is different from the default behavior.

* Merge now prompts 'yes' for rename.

* Merge now creates subdirs before renaming a file into the subdir.
  This was causing merge to abort.

* An environment variable set to empty is treated the same as an
  unset variable, allowing users to unset a variable with compile-time
  default.

* Fix a bug causing diff to fail on unset symlinks in the working version.

* Add the recently introduced prcs.el (including a PRCS major mode) to
  the distribution.

  * Automatically fills in the ChangeLog with the contents of i
    New-Version-Log.
  * Commands for checkin, diff.

* Incorporate Jesse Glick's modifications to prcs.el, prcs-ediff.el, and
  prcs-ediff:

  * add a new, simple parse function for parsing without position
    information.
  * cache project file parsing
  * add a variable prcs::is-prcs-controlled to indicate that a file
    is under prcs's control.

	;;; Avoid gratuitous backups. Example of use.
	(setq backup-enable-predicate (lambda (name)
                                (let ((fname (file-name-nondirectory name)))
                                  (and (not (string-match "MAIL" fname))
                                       (not (prcs::is-prcs-controlled name))
                                       (not (string-equal "." (substring fname \
0 1)))
                                       (not (string-equal "ChangeLog" fname))
                                       (or (< (length name) 5)
                                           (not (string-equal
                                                 "/tmp/"
                                                 (substring name 0 5))))))))

	(autoload 'prcs-mode "prcs" "PRCS project-file mode." t)
	(autoload 'prcs::is-prcs-controlled "prcs" nil t)
	(push '("\\.prj\\'" . prcs-mode) auto-mode-alist)

  * enhance the emerge interface, see the script scripts/prcs-ediff in
    the distribution.  you need perl 5 and gnudoit.
  * display prcs modification status in the modeline.


** Changes since version 1.2.2

* Fix a bug causing a crash during merge of two symlinks.

* Fix a (supposed) bug causing a crash when password lookup
  fails to return an entry.

* When subdirectory creation must create a directory by replacing
  a non-directory, PRCS now asks the user whether to delete the
  file.  With --force, PRCS automatically removes the file.

* Fix a bug in execute --pipe on repository project versions,
  it no longer reports an error for the project file.

* Populate now adds a bit more information to the comment it
  inserts above it's modifications.


** Changes since version 1.2.1

* Fixed two bugs in merge, related to files with no-keywords set.
  Caused no-keyworded files to be replaced by other files in the
  project during merge.

* 'prcs execute --all' had an assertion failure when no files matched
  the --match criteria.


** Changes since version 1.2.0

* Correct a problem with the code that finds the common version
  between two project versions.  This caused several problems
  ranging from exponential time to compute the common version after
  several merges, to checkin incorrectly reporting an ambiguous
  common version.

* Correct a bug which caused PRCS to report a project unmodified
  at checkin after certain merge operations.

* Correct a bug in the code that invokes the PRCS_CONFLICT_EDITOR
  during merge.

* Correct a bug in merge causing merge of symbolic links to fail
  during 'add'.

* Correct a bug causing file-list attributes such as

  (Files :tag=something
    (file1 (...))
    (file2 (...))
    )

  to be written out as

  (Files :tag=something
    (file1 (...) :tag=something)
    (file2 (...) :tag=something)
    )

* Added new command 'prcs admin pinfo' for listing all projects in
  the repository.


** Changes since version 1.2.0b8

* Documentation updated through version 1.2.0.

* Loosen test for correct versions of diff and rcs (so that it will
  work with future versions).

* More corrections to the time-zone problem by Paul Eggert, and
  upgrade time functions extracted from GNU patch 2.4 (maketime.c,
  maketime.h, partime.c, partime.h).

* Correction to "make_obsolete" call pointed out by Ulrich Pfeifer
  when using PRCS_MERGE_COMMAND.

* Comments are no longer retained inside file entries.  Formerly,
  comments such as
    (foo ;; THIS
     (...) ;; AND THIS
     :symlink ;; AND THIS TOO
     )
  were retained.  Now, they are removed and the entire entry will
  be printed out as (foo (...) :symlink).  Unfortunatly, this affects
  past project files as well.  All other comments (except those inside
  Merge-Parents and New-Merge-Parents) are retained.

* Merging with different file types, symlinks, etc. works now, it
  core dumped in 1.2.0b8.

* Fixes to execute pointed out by Jesse Glick.


** Changes since version 1.2.0b7

* New option --plain-format turns off any special formatting of
  the output.  Also affected by environment variable
  PRCS_PLAIN_FORMAT.

* New option --sort=TYPE affects the order in which info outputs
  version history.  It currently accepts two arguments, "version"
  and "date".  Sorting by version is the old, default behaviour which
  sorts versions by their version number, starting with the major
  versions ordered by date.  Sorting by date is a new behaviour, and
  sorts all versions by date, regardless of their major version.

* Documentation updated for all the changes that have occured since
  version 1.1.1 (Sort of. It's close, at least.).

* Apply TSUKADA Satoru's patch to hopefully fix the timezone problem
  noted in the TODO file.

* The project file syntax is extended.  You may now have more than
  one (Files ...) statement, the result being as if you appended the
  contents of each.  The Files statement may now contain file
  attributes that apply to all files in the list.  These attributes
  must precede all files in the list, for example:

(Files
  :no-keywords
  (filea ())
  (fileb ())
(Files
  :symlink
  (linka ())
  (linkb ())
  )

  Keywords except the ':tag=TAG' keyword may not be repeated.

* Merge code completely rewritten.  It's more robust, handles
  all file types, generalized for arbitrary default actions, and
  delays checking out files until absolutely neccesary (so it's a lot
  faster).  Merge now logs all modifications to the file PROJECT.log.
  With -l, merge logs all actions (including those which result in
  "no prompt" or "nothing").  I'm not sure I like the new output
  formatting, please complain if you don't.

* Merge now uses several file attributes to set various parameters.
  Each rule may have a new action associated with it.  Each attribute,
  `:mergerule1', `:mergerule2', ... `:mergerule14', may have a default
  action set to one of the five characters 'a', 'd', 'm', 'n', or 'r'.
  These correspond to the five actions normally presented by merge.
  Certain restrictions apply.  You may only set the default to add for
  rules with a missing working file and non-missing selected file.  You
  may only set the default to merge or replace for rules with at least
  the working and selected files present.  You may only set the default
  to delete for rules with the working file absent.  For information on
  each rule and the numbers, see the documentation or the merge tutorial
  at http://www.xcf.berkeley.edu/~jmacd/merge.html.  When the 'm' action
  is taken merge uses the `:mergetool' attribute, if set, to find a
  command capable of merging the files.  The value of this attribute is
  interpreted the same as the PRCS_MERGE_COMMAND environment variable,
  which is used as the value of `:mergetool' in the default group,
  unless mergetool is already defined there.  All attributes are taken
  from the first file which is not absent among the working file, the
  selected file, and the common file, in that order.

* Diff now uses the `:difftool' attribute, if present to determine a
  diff tool to use.  This defaults to the value of the environment
  variable PRCS_DIFF_COMMAND.  Diff uses the to file's attribute, if
  present, then the from file's attribute.  There are some problems
  here to sort out, because the project file, for example, has no way
  of setting it's difftool.

* Read operations on compressed repositories were leaving uncompressed
  temporary files in TMPDIR for the duration of the command, now it
  removes files when they are no longer needed.

* As a seperate part of merge, merge now detects renaming between the
  common version and selected version and offers to let you rename the
  file.  The name of a file and the merging of it's contents are
  completely seperate operations, one occuring before the other.

* The -F flag was removed.  The new behaviour is to match files either
  by file-family (as with the -F flag) or by name (as without) and
  resolve ambiguity only when it arises by asking the user what to do.
  With -f present, the match by file-family is chosen.


** Changes since version 1.2.0b6

* Compile-time defaults for the 8 documented environment variables
  used by PRCS are taken and used as the default when a user runs
  PRCS without the environment variable set.  The autoconf stubs
  for this are auto-generated as part of the build process.  So,
  PRCS checks first the users's environment, then the builder's
  environment, and finally uses the documented default.


** Changes since version 1.2.0b5

* Remove bogus use of undefined MAX macro in vc.cc, fixing compilation
  troubles on several systems.

* Slight changes to output of checkin -l.  It no longer reports a file
  has been modified or has a new mode after declaring that the file
  was added.

* Elaborate on the "chmod failed at new repository entry creation"
  error so as not to make users think an error occured in checkin.

* Apply Ulrich Pfeifer's (modified) patch to use an external merge
  editor.  See documentation for the PRCS_MERGE_COMMAND env var.

* The script 'prcs-emerge' is included in the distribution but not
  installed.  It is one possible external merge editor.  It uses a
  lisp function defined in prcs.el, which is now installed.  Uses
  gnudoit, so you need to have that working.  Once you have gnudoit
  working, run prcs merge with the PRCS_MERGE_COMMAND environment
  variable set to 'prcs-emerge' and with 'prcs-emerge' in your path.
  I wouldn't do this until you're comfortable with how emerge works.

* Fix infinite loop in merge code.  Only present in version 1.2.0b5.

* Absolute path no longer requred for PRCS_CONFLICT_EDITOR, nor for
  PRCS_MERGE_COMMAND.


** Changes since version 1.2.0b4

* 'prcs execute' now includes the project file in the list of files
  with the special tag :project-file.  Update your uses of this
  command to use --not=:project-file if this will affect your usage.
  Directories not explicitely named with :directory are now included
  with :implicit-directory.

* Fix behaviour of symlink-following related code.  It caused
  checkout over a regular file by following symlinks to fail.

* Remove rx-1.5, replace with GNU regex package.  It seems to be
  64-bit clean, so the Alpha users can be happy.  This makes populate
  and execute once again capable of regular expression matching.
  For those of you who think, "but my libc has POSIX regex stuff",
  well, this one seems to be a challenging configure test so I'm
  going to stick with it the way I have it now.

* Fix repository-lock permission problem, causing stale lock problems.

* Once again change the suffix used to name obsolete files during
  merges.  It was suggested that using the emacs suffix "~N~" was
  a bad idea because people might tend to delete those files more
  readily than they would their obsolete PRCS-controlled files.  The
  new suffix is ".vN".  (And may I once again recommend checking in
  before merging).

* Correct the -n switch for "prcs admin rebuild".

* Add to the mmap configure test a few suggestions made by Paul
  Eggert.  This turns off mmap for Solaris 5.4, HP-UX 9.x
  and HP-UX 10.x.  Users are free to set HAVE_MMAP if they disagree.

* File permissions on repository files were not being set correctly
  at initial checkin.  Fixed.

* General improvements to the repository permissions stuff, lock
  permissions, etc.  All locks are now given mode 0666.

* The old Descends-From attribute is now used as a parent.  However,
  it will NOT appear in these old project files.  (This is one of
  this history-changing modifications).  It will appear in the output
  of prcs info -l as another merge parent and be used for all other
  common-parent related calculations.


** Changes since version 1.2.0b3

* Rekey and merge were using the umask for rewriting files,
  causing them to change the file mode on occasion.  A few other
  file-mode related tweaks.


** Changes since version 1.2.0b2

* More autoconf/automake tweaks.  No source modifications.


** Changes since version 1.2.0b1

* Upgrade to automake-1.1n, fixing problem with missing configure
  file in the distribution.  Use a workaround to include the man
  page as well.  No source modifications.


** Changes since version 1.1.1

* Output diff labels with correct version numbers, they were reversed.
  Discovered by Klaus Weide.

* Make the configure script a little more user friendly.  It will
  detect the wrong versions of RCS and DIFF, and will report if
  'prcs config' fails after a build.

* configure now accepts --disable-mmap, I tried reproducing a bug
  I'd seen on HP-UX running across NFS, but I can't reproduce it,
  so people who are concerned with using mmap can disable it.

* When merge moves a file into the "obsolete" subdirectory, it first
  finds a unique name by appending ".~N~" until it finds a suitable
  name, much like emacs with numbered backups turned on.

* The -j option wasn't partitioning jobs equally amongst its children
  at certain stages of checkin, fixed.

* Very long comments in project files caused flex to abort stating
  that it couldn't expand because of REJECT, except that it doesn't
  use reject.  Removing yylineno (and computing it myself) fixed
  the problem.

* Implement the new command 'prcs depopulate'.  This simple command
  removes the file entries for each names file-or-dir, which as usual
  defaults to all files (it queries you first, in this case).

* Implement the new command 'prcs admin pdelete' which deletes
  a repository entry.

* Implement the new command 'prcs admin prename' which renames
  a repository entry.

* New environment variable, PRCS_DIFF_OPTIONS, is a whitespace-
  separated list of options to pass to diff during 'prcs diff'
  and 'prcs merge'.  If you need something with whitespace, you'll
  have to pass it on the command line.  Command line options override
  PRCS_DIFF_OPTIONS.

* Fix bug causing initial checkin of the Nth file to fail if it has a
  ",v" extension and N%52==0.  Discovered by Jesse Glick.

* Fix bug causing 'prcs populate -d' to delete more files than it
  should.  It now only prompts to delete files which were named on
  the command line.

* Fix bug in behavior of merge case #8 (see the tutorial
  http://www.xcf.berkeley.edu/~jmacd/merge.html), discovered
  by Klaus Weide.

* Fix bug in recording of partial merges discovered out by Klaus
  Weide.  It was rotating the list of filenames in Merge-Parents
  and New-Merge-Parents after each partial merge.

* Fix bug in presentation of query for case #8, it would be queried
  twice and do nothing the first time.  Only affects --skilled-merge.
  Again, discovered by Klaus Weide.

* Fix the 'prcs admin access' command to work when run as root.  It
  will let you set users as well as groups when run as root.

* Implement new merge algorithm, described in the tutorial at
  http://www.xcf.berkeley.edu/~jmacd/merge.html.  This is not
  yet documented in the texinfo documentation, nor is the texinfo
  documentation updated for this version.

* Document the use of the TMPDIR environment variable.


** Changes since version 1.1.0

* Correct bug introduced in 1.1.0 causing project creation to fail
  at initial checkin.  How lame is that?


** Changes since version 1.1.0b5

* Checkin now reports adds and deletes properly.  Behavior of '-l' at
  checkin changed to only report modified, added, or deleted files.
  '-L' gives old behavior.  Changes reported are relative to the real
  working version before checkin.

* configure now accepts --enable-debug to turn on compilation with
  debugging symbols.


** Changes since version 1.1.0b4

* Update documentation to current sources.

* Add PRCS_JOB_NUMBER environment variable to set a default for the
  -j option.

* Correct merge action when merging files with empty file descriptors.

* Correct selection of new version when checkin crosses major version
  names.  Not sure when this was broken.


** Changes since version 1.1.0b3

* Fix minor compilation trouble introduced in 1.1.0b, <sys/time.h>
  is required to use setitimer().

* Fixed major bogon in the upgrade-repository code introduced in version
  1.1.0b3.  This only affects people attempting to upgrade a repository
  older than version 1.1.0.  This is not a dangerous problem, PRCS simply
  core dumps without upgrading the repository.


** Changes since version 1.1.0b2

* Added a repository log which logs the details of the checkin,
  rebuild, and delete commands.  This is mostly here for the convenience
  of trying to reconstruct the problem, should one occur.


** Changes since version 1.1.0b

* Checkin with partial merge asks whether to use the merge parent or
  working version as the effective working version for checkin.
  Checkin with --skilled-merge asks in either case.

* Fixed a bug in how partial merges work.

* Setup an alarm mechanism for refreshing locks during long
  operations.  Add SIGTSTP handler to warn user against suspending
  PRCS for too long.

* Removed the optional USE_FCNTL_LOCKS locking code, I don't want
  to maintain it.


** Changes since version 1.0.9

* Merge common-version algorithm changed to solve a problem pointed out
  by Marco Antionotti.

  When merging a set of working files against a selected version,
  the common version must be computed.  In previous versions of PRCS,
  this was handled differently:

  0.13.x and previous versions: the most recent merged-against version
  was used or the working version if none exist.
  1.0.0 through 1.0.9: the working version was used.

  In each of these cases, differences arise only after one merge has
  been completed and no checkin has been done.  The algorithm used in
  1.0.x failed to handle a very common case well, thus the new algorithm.

  The very common case is this:  version 0.1 is created, user A modifies
  and checks in version 0.2.  User B has 0.1 and merges against 0.2.
  User A checks in 0.3.  User B merges against 0.3.  The common version
  computed by 1.0.x is 0.1, which causes many conflicts caused by
  re-merging in changes which have already been merged.

  The new algorithm makes use of an "effective working version", which
  is computed before the common version is computed.  The effective working
  version is used to compute the common version.  If unique, the effective
  working version is the version picked from the set of previous merge parents
  and the working version which is closest to the calculated common version.
  If not unique or the new option -s (--skilled-merge) is supplied, the user
  is asked to pick a version manually.  It is difficult to come up with a
  situation requiring this intervention.

  Normally PRCS prevents the same file from being merged twice, so that
  merges can be interupted or aborted and later resumed.  This can cause
  difficulties for people who really know what they are doing and want
  to force a merge to occur.  The -s option also allows users to remerge
  files.

* Arguments passed to diff3 changed: arguments were "-ma", and have
  been changed to "-maE".  The result is that only overlapping conflicts
  are shown, not identical conflicts (where the file in both the selected
  and working versions contain the same changes).

* New project-file entry Project-Keywords introduced.  This allows the
  definition of arbitrary keywords.  These keywords are treated just
  like the 13 builtin keywords and may be included in the special
  $Format$ keyword directive.  As an example, you can see these being
  used to label release version numbers on the 3rd line of this file.

* Complete rewrite of the project-file reading and editing code and the
  auxiliary data file code (.PROJECT.prcs_aux), it now uses much less
  memory for large projects.

* Project renaming implemented.  You may now renaming a project while
  unpackaging.  'prcs unpackage' accepts an optional argument which
  is used as the new project name.  For example:

    prcs unpackage P.pkg Q

  unpackages the project contained in P.pkg (presumably named P) and
  names it Q.  The change affects the history of the project file
  (it has been called Stalinesque) so that project files from old versions
  checked out of Q will read as if their name were always Q.  A comment
  is inserted into the project files of old versions to remind the user
  of the original name of the project when each particular version was
  checked in.  Renaming may only be performed on packages created by
  prcs-1.1.0 and later, though prcs-1.1.0 and later will recognize the
  old package format.  Old versions of PRCS will not recognize new
  packages.

* Another repository data format change was made, all projects will have
  to be rebuilt with the 'prcs admin rebuild' command.

* Memory leak in flex buffer management found.

* texinfo3.7.patch no longer distributed, texinfo-3.9 fixes the problem.

* Return of the Digital UNIX binary (there was a bug in configure.in that
  only was excited on machines at Berkeley mounting /usr/sww which was
  making it difficult for me to build binaries).

  NOTE: It appears that GNU rx-1.5 is not 64-bit clean, so until this
  gets fixed the use of any regular expression functionality in PRCS
  is likely to be broken.  These include 'prcs populate' with a non-empty
  Populate-Ignore attribute and 'prcs execute' with the --match or --not
  options.

* Still no progress on HP-UX 10, looks to me as if gcc's fixincludes
  is breaking stuff, cause the header files are seriously tweaked.

* Upgrade to autoconf-2.12, automake-1.1l, rx-1.5.

* GNU Copyright notices inserted in source files.


** Changes since version 1.0.0

* Repository directory layout changed to improve performance of large
  projects.  Formerly all files were kept in a flat directory structure,
  now they are stored in a tree of subdirectories.

* -jN (--jobs=N) flag implemented to allow multiple processes during
  checkin.  Performance was evaluated for checkout and other commands
  and not found to be worthwhile.  Future vesions may include rewrites
  to improve concurrency in other commands.

* The PRCS_CONFLICT_EDITOR environment variable was added as a _temporary_
  means of allowing a user to edit a file immediately after conflicts
  are created, during the merge.  This will be more generalized in the
  next major release of PRCS.


** Changes since version 1.0.8

* INSTALL modified, libg++-2.7.2 seems to be required for SGI IRIX
  platforms.

* Repository compression was not affecting subdirectories in the repository,
  this has been fixed.


** Changes since version 1.0.7

* Generation of unique filenames in the repository was broken.
  This causes checkin to abort in certain cases with an message
  stating that you've found a bug.  You need not upgrade unless
  you're experiencing this problem.


** Changes since version 1.0.6

* 'prcs rebuild' was broken since 1.0.4, this has been corrected.
  Rebuild would fail on repositories which have had more than 50
  files added with a PRCS version between 1.0.4 and 1.0.6.


** Changes since version 1.0.5b

* 'prcs rekey' was not preserving file modes, corrected.

* Forced checkin with no modified files was failing in new multi-job
  checkin code.


** Changes since version 1.0.5a

* Compiles under HP-UX and AIX (problem caused their abnormally
  screwed up select()).


** Changes since version 1.0.5

* Compiles under Solaris and IRIX. (problem caused by differently sized
  pid_t and int types).


** Changes since version 1.0.4

* Fixed a bug in 'prcs info -L', reported by Gene Kan.

* Fixed a bug the MD5 checksum code causing certain digests to
  be less than 128 bits (and thus differ from the output of another
  md5 checksum generator).  The unkeyed MD5 checksum of a file
  is available with 'prcs info -L'.

* Added preliminary support for the -jN (--jobs=N) flag, which allows
  PRCS to use up to N child processes.  Currently -j is only implemented
  for checkin.


** Changes since version 1.0.3

* Fixed a bug exposed by Linux libc 5.4.x, a bogus fclose() was being
  called.

* Changed the repository directory structure to better handle
  extremeley large projects.


** Changes since version 1.0.2

* 'prcs checkout -r.' was ignoring the working project file and
  creating an empty project file.

* Add a PRCS_CONFLICT_EDITOR environment variable as a _temporary_
  means of allowing a user to edit a file immediately after conflicts
  are created, during the merge.  Requested by Peter Mattis.


** Changes since version 1.0.1

* INSTALL modified, libg++-2.7.2 required for Digital UNIX platforms.

* Populate-Ignore was not working, corrected.

* Certain operations requiring creation of directory trees was failing
  because PRCS was requiring all directories to be writable and
  executable.  This restriction was bogus, and has been relaxed, letting
  those conditions in which a writable directory is required be caught.


** Changes since version 1.0.

* Change arguments passed to tar during unpackage to satisfy Sun's tar.

* Correct mkdir() call with trailing slash, which fails on old versions
  of Linux.

* Replace <sys/fcntl.h> bogon in lock.h with <fcntl.h>.

* Correct behaviour of 'unpackage' on packagefiles not in CWD.

* Fix 2 bugs causing merged project files to become invalid either
  at checkin or immediately after a merge.
