Thu Jun 29 17:37:22 1995  Paul Eggert  <eggert@twinsun.com>

	* rcs.c (RCS_check_kflag): Allow RCS 5.7's new -kb option.

Wed Jun 28 09:53:14 1995  James Kingdon  <kingdon@harvey.cyclic.com>

	* Makefile.in (HEADERS): Remove options.h.in.
	(DISTFILES): Add options.h.in.
	Depend on options.h in addition to HEADERS.

Tue Jun 27 22:37:28 1995  Vince Demarco  <vdemarco@bou.shl.com>

	* subr.c: Don't try to do fancy waitstatus stuff for NeXT,
	lib/wait.h is sufficient.

Mon Jun 26 15:17:45 1995  James Kingdon  <kingdon@harvey.cyclic.com>

	* Makefile.in (DISTFILES): Remove RCS-patches and convert.sh.

Fri Jun 23 13:38:28 1995  J.T. Conklin  (jtc@rtl.cygnus.com)

	* server.c (dirswitch, serve_co): Use CVSADM macro instead of 
        literal "CVS".

Fri Jun 23 00:00:51 1995  James Kingdon  <kingdon@harvey.cyclic.com>

	* README-rm-add: Do not talk about patching RCS, that only
	confuses people.
	* RCS-patches, convert.sh: Removed (likewise).

Thu Jun 22 10:41:41 1995  James Kingdon  <kingdon@harvey.cyclic.com>

	* subr.c: Change -1 to (size_t)-1 when comparing against a size_t.

Wed Jun 21 16:51:54 1995  nk@ipgate.col.sw-ley.de (Norbert Kiesel)

	* create_adm.c, entries.c, modules.c: Avoid coredumps if
	timestamps, tags, etc., are NULL.

Tue Jun 20 15:52:53 1995  Jim Meyering  (meyering@comco.com)

	* checkout.c (checkout): Remove dcl of unused variable.
	* client.c (call_in_directory, handle_clear_static_directory,
	handle_set_sticky, handle_clear_sticky, send_a_repository,
	send_modified, send_dirent_proc): Remove dcls of unused variables.
	* server.c (receive_file, serve_modified, server_cleanup):
	Remove dcls of unused variables.
	* subr.c (copy_file): Remove dcl of unused variable.
	* vers_ts.c (time_stamp_server): Remove dcl of unused variable.

Mon Jun 19 13:49:35 1995  Jim Blandy  <jimb@totoro.cyclic.com>

	* sanity.sh: Fix commencement message --- the test suite says
	"Ok." when it's done.

Fri Jun 16 11:23:44 1995  Jim Meyering  (meyering@comco.com)

	* entries.c (fgetentent): Parenthesize assignment in if-conditional.

Thu Jun 15 17:33:28 1995  J.T. Conklin  <jtc@rtl.cygnus.com>

	* server.c (get_buffer_data, buf_append_char, buf_append_data):
	  Don't conditionalize use of "inline".  Autoconf takes care of
	  defining it away on systems that don't grok it.

Thu Jun 15 13:43:38 1995  Jim Kingdon  (kingdon@cyclic.com)

	* options.h.in (DIFF): Default to "diff" not "diff -a" since diff
	might not support the -a option.

Wed Jun 14 11:29:42 1995  J.T. Conklin  <jtc@rtl.cygnus.com>

	* import.c (import_descend): Initialize dirlist to NULL.

	* subr.c (copy_file): Fix infinite loop.

	* server.c (serve_directory): fix a memory leak.

	* checkout.c, commit.c, diff.c, history.c, import.c, log.c,
	  patch.c, release.c, remove.c, rtag.c, status.c, tag.c, update.c:
	  Use send_arg() to send command line arguments to server.

	* commit.c (fsortcmp), find_names (fsortcmp), hash.c (hashp,
	  findnode), hash.h (findnode), rcs.c (RCS_addnode,
	  RCS_check_kflag, RCS_check_tag, RCS_isdead, RCS_parse,
	  RCS_parsercsfile_i), rcs.h (RCS_addnode, RCS_check_kflag,
	  RCS_check_tag, RCS_parse): Added const qualifiers as
	  appropriate.
	* rcs.h (RCS_isdead): Added prototype.
	  
	* hash.h (walklist, sortlist): correct function prototypes.

	* ignore.c (ign_setup): don't bother checking to see if file
	  exists before calling ign_add_file.

Fri Jun  9 11:24:06 1995  J.T. Conklin  <jtc@rtl.cygnus.com>

	* all source files (rcsid): Added const qualifer.
	* ignore.c (ign_default): Added const qualifier.
	* subr.c (numdots): Added const qualifier to function argument.
	* cvs.h (numdots): Added const qualifier to prototype argument.

	* client.c (change_mode): Tied consecutive if statements testing
	  the same variable together with else if.

	* import.c (import_descend): Build list of subdirectories when
	  reading directory, and then process the subdirectories in that
	  list.  This change avoids I/O overhead of rereading directory
	  and reloading ignore list (.cvsignore) for each subdirectory.

Thu Jun  8 11:54:24 1995  J.T. Conklin  <jtc@rtl.cygnus.com>

	* import.c (import_descend): Use 4.4BSD d_type field if it is
	  present.

	* lock.c (set_lockers_name): Use %lu in format and cast st_uid
	  field to unsigned long.

	* import.c (import): Use RCS_check_kflag() to check -k options.
	  (keyword_usage, str2expmode, strn2expmode, expand_names):
	  Removed.
	* rcs.c (RCS_check_kflag): Added keyword_usage array from import.c
	  for more descriptive error messages.

	* subr.c (run_setup, run_args): Changed variable argument
	  processing to work on machines that use <varargs.h>.

	* subr.c (copy_file, xcmp): Changed to read the file(s) by blocks
	  rather than by reading the whole file into a huge buffer.  The
	  claim that this was reasonable because source files tend to be
	  small does not hold up in real world situations.   CVS is used
	  to manage non-source files, and mallocs of 400K+ buffers (x2
	  for xcmp) can easily fail due to lack of available memory or
	  even memory pool fragmentation.
	  (block_read): New function, taken from GNU cmp and slightly
	  modified.

	* subr.c (xcmp): Added const qualifier to function arguments.
	* cvs.h (xcmp): Added const qualifer to prototype arguments.

Wed Jun  7 11:28:31 1995  J.T. Conklin  <jtc@rtl.cygnus.com>

	* cvs.h (Popen): Added prototype.
	  (Fopen, open_file, isreadable, iswritable, isdir, isfile,
	  islink, make_directory, make_directories, rename_file,
	  link_file, unlink_file, copy_file): Added const qualifer to
	  prototype arguments.
	* subr.c (Fopen, Popen, open_file, isreadable, iswritable, isdir,
	  isfile, islink, make_directory, make_directories, rename_file,
	  link_file, unlink_file, copy_file): Added const qualifier to
	  function arguments.

	* logmsg.c (logfile_write), recurse.c (do_recursion, addfile):
	  Don't cast void functions to a void expression.  There is at
	  least one compiler (MPW) that balks at this.

	* rcs.c (keysize, valsize): Change type to size_t.

	* add.c (add_directory): Don't cast umask() argument to int.

	* import.c (add_rcs_file): Changed type of mode to mode_t.

	* rcscmds.c (RCS_merge): New function.
	* cvs.h (RCS_merge): Declare.
	* update.c (merge_file, join_file): Call RCS_merge instead of
	  invoking rcsmerge directly.

	* cvs.h: Include <stdlib.h> if HAVE_STDC_HEADERS, otherwise
	  declared getenv().
	* cvsrc.c, ignore.c, main.c: Removed getenv() declaration.

	* client.c (mode_to_string): Changed to take mode_t instead of
	  struct statb argument.  Simplified implementation, no longer
	  overallocates storage for returned mode string.
	* client.h (mode_to_string): Updated declaration.
	* server.c (server_updated): Updated for new calling conventions,
	  pass st_mode instead of pointer to struct statb.

	* cvs.h (CONST): Removed definition, use of const qualifier is
	  determined by autoconf.
	* history.c, modules.c, parseinfo.c: Use const instead of CONST.

	* add.c, admin.c, checkout.c, commit.c, diff.c, import.c, log.c,
	  main.c, mkmodules.c, patch.c, recurse.c, remove.c, rtag.c,
	  server.c, status.c, subr.c, tag.c, update.c: Changed function
	  arguments "char *argv[]" to "char **argv" to silence lint
	  warnings about performing arithmetic on arrays.

Tue Jun  6 18:57:21 1995  Jim Blandy  <jimb@totoro.cyclic.com>

	* version.c: Fix up version string, to say that this is Cyclic
        CVS.

Tue Jun  6 15:26:16 1995  J.T. Conklin  <jtc@rtl.cygnus.com>

	* subr.c (run_setup, run_args, run_add_arg, xstrdup): Add const
	  qualifier to format argument.
	* cvs.h (run_setup, run_args, xstrdup): Likewise.

	* Makefile.in (SOURCES): Added rcscmds.c.
	  (OBJECTS): Added rcscmds.o.

	* rcscmds.c: New file, with new functions RCS_settag, RCS_deltag,
	  RCS_setbranch, RCS_lock, RCS_unlock.
	* checkin.c, commit.c, import.c, rtag.c, tag.c: Call above
	  functions instead of exec'ing rcs commands.
	* cvs.h: Declare new functions.

Mon May 29 21:40:54 1995  J.T. Conklin  (jtc@rtl.cygnus.com)

	* recurse.c (start_recursion, do_recursion): Set entries to NULL
	  after calling Entries_Close().

Sat May 27 08:08:18 1995  Jim Meyering  (meyering@comco.com)

	* Makefile.in (check): Export RCSBIN only if there exists an
	`rcs' executable in ../../rcs/src.  Before, tests would fail when
	the directory existed but contained no executables.
	(distclean): Remove options.h, now that it's generated.
	(Makefile): Regenerate only *this* file when Makefile.in is
	out of date.  Depend on ../config.status.

Fri May 26 14:34:28 1995  J.T. Conklin  <jtc@rtl.cygnus.com>

	* entries.c (Entries_Open): Added missing fclose().
	  (Entries_Close): Don't write Entries unless Entries.Log exists.

	* entries.c (Entries_Open): Renamed from ParseEntries; changed to
	  process Entries Log files left over from previous crashes or
	  aborted runs.
	  (Entries_Close): New function, write out Entries file if
	  neccessary and erase Log file.  
	  (Register): Append changed records to Log file instead of
	  re-writing file.
	  (fgetentent): New function, parse one Entry record from a file.
	  (AddEntryNode): It's no longer an error for two records with the
	  same name to be added to the list.  New records replace older
	  ones.
	* cvs.h (Entries_Open, Entries_Close): Add prototypes.
	  (CVSADM_ENTLOG): New constant, name of Entries Log file.
	* add.c, checkout.c, client.c, find_names.c, recurse.c: Use
	  Entries_Open()/Entries_Close() instead of ParseEntries()/dellist().

	* add.c, admin.c, checkout.c, client.c, commit.c, diff.c,
	  history.c, import.c, log.c, patch.c, release.c, remove.c,
	  rtag.c, server.c, status.c, tag.c, update.c: Changed
	  conditionals so that return value of *printf is tested less than
	  0 instead of equal to EOF.

Thu May 25 08:30:12 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* subr.c (xmalloc): Never try to malloc zero bytes; if the user
	asks for zero bytes, malloc one instead.

Wed May 24 12:44:25 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* subr.c (xmalloc): Don't complain about NULL if zero bytes were
	requested.

Tue May 16 21:49:05 1995  Jim Blandy  <jimb@totoro.bio.indiana.edu>

	* subr.c (xmalloc): Never try to malloc zero bytes; if the user
	asks for zero bytes, malloc one instead.

Mon May 15 14:35:11 1995  J.T. Conklin  <jtc@rtl.cygnus.com>

	* lock.c (L_LOCK_OWNED): Removed.

	* add.c, checkout.c, client.c, create_adm.c, cvs.h, entries.c,
	  find_names.c modules.c, recurse.c, release.c, repos.c, update.c:
	  removed CVS 1.2 compatibility/upgrade code.

Mon May  8 11:25:07 1995  J.T. Conklin  <jtc@rtl.cygnus.com>

	* lock.c (write_lock): Missed one instance where rmdir(tmp) should
	  have been changed to clear_lock().

Wed May  3 11:08:32 1995  J.T. Conklin  <jtc@rtl.cygnus.com>

	* create_adm.c, entries.c, import.c, root.c: Changed conditionals
	  so that return value of *printf is tested less than 0 instead of
	  equal to EOF --- That's all Standard C requires.

Wed May  3 18:03:37 1995  Samuel Tardieu  <tardieu@emma.enst.fr>

	* rcs.h: removed #ifdef CVS_PRIVATE and #endif because cvs didn't
	  compile anymore.

Mon May  1 13:58:53 1995  J.T. Conklin  <jtc@rtl.cygnus.com>

	* rcs.c, rcs.h: Implemented lazy parsing of rcs files.
	  RCS_parsercsfile_i modified to read only the first two records
	  of rcs files, a new function RCS_reparsercsfile is called only
	  when additional information (tags, revision numbers, dates,
	  etc.) is required.

Mon May  1 12:20:02 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* Makefile.in (INCLUDES): Include -I. for options.h.

Fri Apr 28 16:16:33 1995  Jim Blandy  <jimb@totoro.bio.indiana.edu>

	* Makefile.in (SOURCES, HEADERS, DISTFILES): Updated.
	(dist-dir): Renamed from dist; changed to work with DISTDIR
	variable passed from parent.

	We don't want to include a file the user has to edit in the
	distribution.
	* options.h: No longer distributed.
	* options.h.in: Distribute this instead.
	* ../INSTALL, ../README: Installation instructions updated.

	* client.c (start_rsh_server): Send the remote command to rsh as a
	single string.

Fri Apr 28 00:29:49 1995  Noel Cragg  <noel@vo.com>

	* commit.c: Added initializer for FORCE_CI

        * sanity.sh: Fix tests added 25 Apr -- they were expecting the
        server to make noise, but the CVS_SERVER variable had been
        accidentally set with the `-Q' flag.  Ran all tests -- both
        locally and remotely -- to verify that the change didn't break
        anything.

Thu Apr 27 12:41:52 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* Makefile.in: Revise comment regarding check vs. remotecheck.

Thu Apr 27 12:52:28 1995  Bryan O'Sullivan <bos@cyclic.com>

	* client.c (start_rsh_server): If the CVS_RSH environment variable
	is set, use its contents as the name of the program to invoke
	instead of `rsh'.

Thu Apr 27 12:18:38 1995  Noel Cragg  <noel@vo.com>

	* checkout.c (checkout): To fix new bug created by Apr 23 change,
        re-enabled "expand-module" functionality, because it has the side
        effect of setting the checkin/update programs for a directory.  To
        solve the local/remote checkout problem that prompted this change
        in the first place, I performed the next change.
	* server.c (expand_proc): Now returns expansions for aliases only.

Wed Apr 26 12:07:42 1995  J.T. Conklin  <jtc@rtl.cygnus.com>

	* rcs.c (getrcskey): Rewritten to process runs of whitespace chars
	  and rcs @ strings instead of using state variables "white" and
	  "funky".

Fri Apr  7 15:49:25 1995  J.T. Conklin  <jtc@rtl.cygnus.com>

	* lock.c (unlock): Only call stat if we need to.

Wed Apr 26 10:48:44 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* server.c (new_entries_line): Don't prototype.

Tue Apr 25 22:19:16 1995  Jim Blandy  <jimb@totoro.bio.indiana.edu>

	* sanity.sh: Add new tests to catch bugs in Apr 23 change.

Tue Apr 25 17:10:55 1995  Roland McGrath  <roland@baalperazim.frob.com>

	* create_adm.c (Create_Admin): Use getwd instead of getcwd.

Sun Apr 23 20:58:32 1995  Noel Cragg  <noel@vo.com>

       	* checkout.c (checkout): Disabled "expand-module" functionality on
        remote checkout, since it makes modules behave like aliases (see
        longer note there).  This change necessitated the change below.
        Also merged the like parts of a conditional.

	* client.c (call_in_directory): Changed the algorithm that created
        nested and directories and the "CVS" administration directories
        therein.  The algoithm wrongly assumed that the name of the
        directory that that was to be created and the repository name were
        the same, which breaks modules.

	* create_adm.c (Create_Admin), module.c (do_module), server.c
        (server_register), subr.c, entries.c: Added fprintfs for trace-mode
	debugging.

	* client.c (client_send_expansions): Argument to function didn't
        have a type -- added one.

	* server.c (new_entries_line): Arguments to this function are
        never used -- reoved them and fixed callers.

Sat Apr 22 11:17:20 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* rcs.c (RCS_parse): If we can't open the file, give an error
	message (except for ENOENT in case callers rely on that).

Wed Apr 19 08:52:37 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* client.c (send_repository): Check for CVSADM_ENTSTAT in `dir', not
	in `.'.

	* sanity.sh: Add TODO list.  Revise some comments.  Add tests of
	one working directory adding a file and other updating it.

Sat Apr  8 14:52:55 1995  Jim Blandy  <jimb@totoro.bio.indiana.edu>

	* Makefile.in (CFLAGS): Let configure set the default for CFLAGS.
	Under GCC, we want -g -O.

Fri Apr  7 15:49:25 1995  J.T. Conklin  <jtc@rtl.cygnus.com>

	* root.c (Name_Root): merge identical adjacent conditionals.

	* create_admin.c (Create_Admin): Rearranged check for CVSADM and
	  OCVSADM directories so that CVSADM pathname is only built once.

	* update.c (update_dirleave_proc): Removed code to remove CVS
	  administration directory if command_name == "export" and to
	  create CVS/Root file if it is not present.  Identical code
	  in update_filesdone_proc() will perform these same actions.
	  Also removed code that read and verfied CVS/Root.  This is
	  expensive, and if it is necessary should happen in the 
	  general recursion processor rather than in the update
	  callbacks.

	* lock.c (masterlock): New variable, pathname of master lockdir.
	  (set_lock): removed lockdir argument, now constructs it itself
	  and stores it in masterlock.
	  (clear_lock): new function, removes master lockdir.
	  (Reader_Lock, write_lock): call clear_lock instead of removing
	  master lockdir.
	  (Reader_Lock, write_lock): #ifdef'd out CVSTFL code.

	* main.c (main): register Lock_Cleanup signal handler.
	* lock.c (Reader_Lock, write_lock): no longer register
	  Lock_Cleanup.

	* main.c (main): initialize new array hostname.
	* lock.c (Reader_Lock, write_lock): Use global hostname array.
	* logmsg.c (logfile_write): Likewise.

	* recurse.c (do_dir_proc, unroll_files_proc): Use open()/fchdir()
	  instead of getwd()/chdir() on systems that support the fchdir()
	  system call.

Fri Apr  7 06:57:20 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* server.c: Include the word "server" in error message for memory
	exhausted, so the user knows which machine ran out of memory.

	* sanity.sh: For remote, set CVS_SERVER to test the right server,
	rather than a random one from the PATH.

	* commit.c [DEATH_STATE]: Pass -f to `ci'.

Thu Apr  6 13:05:15 1995  Jim Blandy  <jimb@totoro.bio.indiana.edu>

	* commit.c (checkaddfile): If we didn't manage to fopen the file,
	don't try to fclose it.

	* client.c (handle_m, handle_e): Use fwrite, rather than a loop of
	putc's.  Sometimes these streams are unbuffered.

Tue Apr  4 11:33:56 1995  Jim Blandy  <jimb@totoro.bio.indiana.edu>

	* (DISTFILES): Include cvsbug.sh, ChangeLog, NOTES, RCS-patches,
	README-rm-add, ChangeLog.fsf, sanity.sh, sanity.el, and
	.cvsignore.

Mon Mar 27 08:58:42 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* rcs.c (RCS_parsercsfile_i): Accept `dead' state regardless of
	DEATH_STATE define.  Revise comments regarding DEATH_STATE versus
	CVSDEA versus the scheme which uses a patched RCS.
	* README-rm-add, RCS-patches: Explain what versions of CVS need
	RCS patches.

Sat Mar 25 18:51:39 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* server.c (server_cleanup): Only do the abysmal kludge of waiting
 	for command and draining the pipe #ifdef sun.  The code makes
 	assumptions not valid on all systems, and is only there to
 	workaround a SunOS bug.

Wed Mar 22 21:55:56 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* server.c (mkdir_p): Call stat only if we get the EACCES.  Faster
	and more elegant.

Tue Jan 31 20:59:19 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* server.c: Try to avoid starting the "rm -rf" at cleanup time
	until after subprocesses have finished.
	(command_fds_to_drain, max_command_fd): New variables.
	(do_cvs_command): Set them.
	(command_pid_is_dead): New variable.
	(wait_sig): New function.
	(server_cleanup): If command_pid is nonzero, wait for it to die,
	draining output from it in the meantime.  If nonzero SIG was
	passed, send a signal to the subprocess, to encourage it to die
	soon.

	* main.c (usage): Argument is now `const char *const *'.
	* cvs.h (usage): Changed prototype.
	(USE): Make new variable `const'.
	* add.c (add_usage), admin.c (admin_usage), checkout.c
	(checkout_usage, export_usage, checkout), commit.c (commit_usage),
	diff.c (diff_usage), history.c (history_usg), import.c
	(import_usage, keyword_usage), log.c (log_usage), main.c (usg),
	patch.c (patch_usage), release.c (release_usage), remove.c
	(remove_usage), rtag.c (rtag_usage), server.c (server), status.c
	(status_usage), tag.c (tag_usage), update.c (update_usage): Usage
	messages are now const arrays of pointers to const char.

	* import.c (comtable): Now const.
	* main.c (rcsid): Now static.
	(cmd): Now const.
	(main): Local variable CM now points to const.
	* server.c (outbuf_memory_error): Local var MSG now const.

	* client.c (client_commit_usage): Deleted.

Sat Dec 31 15:51:55 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* logmsg.c (do_editor): Allocate enough space for trailing '\0'.

Fri Mar  3 11:59:49 1995  Jim Blandy  <jimb@totoro.bio.indiana.edu>

	* cvsbug.sh: Call it "Cyclic CVS" now, not "Remote CVS".  Call it
	version C1.4A, not 1.4A2-remote.  Send bugs to cyclic-cvs, not
	remote-cvs.

	* classify.c (Classify_File): Put check for dead file inside
	"#ifdef DEATH_SUPPORT".

Thu Feb 23 23:03:43 1995  Jim Blandy  <jimb@totoro.bio.indiana.edu>

	* update.c (join_file): Don't pass the -E option to rcsmerge here,
	either (see Jan 22 change).

Mon Feb 13 13:28:46 1995  Jim Blandy  <jimb@totoro.bio.indiana.edu>

	* cvsbug.sh: Send bug reports to remote-cvs@cyclic.com, rather
	than to the ordinary CVS bug address.  This does mean we'll have
	to wade through GNATS-style bug reports, sigh.

Wed Feb  8 06:42:27 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* server.c: Don't include <sys/stat.h>; system.h already does, and
 	4.3BSD can't take it twice.

	* subr.c [! HAVE_VPRINTF] (run_setup, run_args): Don't use va_dcl
 	in declaration.  Declare the a1..a8 args which are used in the
 	sprintf call.
	* cvs.h [! HAVE_VPRINTF] (run_setup, run_args): Don't prototype
 	args, to avoid conflicting with the function definitions
 	themselves.

Tue Feb  7 20:10:00 1995  Jim Blandy  <jimb@totoro.bio.indiana.edu>

	* client.c (update_entries): Pass the patch subprocess the switch
	"-b ~", not "-b~"; the latter form seems not to work with patch
	version 2.0 and earlier --- it takes the next argv element as the
	backup suffix, and thus doesn't notice that the patch file's name
	has been specified, thus doesn't find the patch, thus...  *aargh*

Fri Feb  3 20:28:21 1995  Jim Blandy  <jimb@totoro.bio.indiana.edu>

	* log.c (log_option_with_arg): New function.
	(cvslog): Use it and send_arg to handle the rlog options that take
	arguments.  The code used to use send_option_string for
	everything, which assumes that "-d1995/01/02" is equivalent to
	"-d -1 -9 -9 -5 ...".

Tue Jan 31 15:02:01 1995  Jim Blandy  <jimb@floss.life.uiuc.edu>

	* server.c: #include <sys/stat.h> for the new stat call in mkdir_p.
	(mkdir_p): Don't try to create the intermediate directory if it
	exists already.  Some systems return EEXIST, but others return
	EACCES, which we can't otherwise distinguish from a real access
	problem.

Sun Jan 22 15:25:45 1995  Jim Blandy  <jimb@totoro.bio.indiana.edu>

	* update.c (merge_file): My rcsmerge doesn't accept a -E option,
	and it doesn't look too important, so don't pass it.

Fri Jan 20 14:24:58 1995  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* client.c (do_deferred_progs): Don't try to chdir to toplevel_wd
	if it has not been set.
	(process_prune_candidates): Likewise.

Mon Nov 28 09:59:14 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* client.c (client_commit): Move guts of function from here...
	* commit.c (commit): ...to here.

Mon Nov 28 15:14:36 1994  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* server.c (buf_input_data, buf_send_output): Start cpp directives
	in column 1, otherwise Sun 4 pcc complains.

Mon Nov 28 09:59:14 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* client.c (add_prune_candidate): Don't try to prune ".".

Tue Nov 22 05:27:10 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* server.c, client.c: More formatting cleanups.

	* client.h, client.c: New variable client_prune_dirs.
	* update.c (update), checkout.c (checkout): Set it.
	* client.c (add_prune_candidate, process_prune_candidates): New
	functions.
	(send_repository, call_in_directory, get_responses_and_close):
	Call them.

Wed Nov 23 01:17:32 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* server.c (do_cvs_command): Don't select on STDOUT_FILENO unless
	we have something to write.

Tue Nov 22 05:27:10 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* remove.c (remove_fileproc): Only call server_checked_in if we
	actually are changing the entries file.

	* server.c (server_write_entries): New function.
	(dirswitch, do_cvs_command): Call it.
	(serve_entry, serve_updated): Just update in-memory data
	structures, don't mess with CVS/Entries file.

Mon Nov 21 10:15:11 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* server.c (server_checked_in): Set scratched_file to NULL after
	using it.

	* checkin.c (Checkin): If the file was changed by the checkin,
	call server_updated not server_checked_in.

Sun Nov 20 08:01:51 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* client.c (send_repository): Move check for update_dir NULL to
	before where we check last_update_dir.  Check for "" here too.

	* client.c (send_repository): Use new argument dir.

	* client.c: Pass new argument dir to send_repository and
	send_a_repository.

	* server.c, server.h (server_prog): New function.
	* modules.c (do_modules): Call it if server_expanding.
	* client.c: Support Set-checkin-prog and Set-update-prog responses.
	* server.c, client.c: Add Checkin-prog and Update-prog requests.

Fri Nov 18 14:04:38 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* client.c (get_short_pathname, is_cvsroot_level,
	call_in_directory): Base whether this is new-style or
	old-style based on whether we actually used the Directory request,
	not based on whether the pathname is absolute.  Rename
	directory_supported to use_directory.
	* server.c: Rename use_relative_pathnames to use_dir_and_repos.
	* client.c (send_a_repository): If update_dir is absolute, don't
	use it to try to reconstruct how far we have recursed.

	* server.c, server.h, client.c, client.h, vers_ts.c, update.h:
	More cosmetic changes (identation, PARAMS vs. PROTO, eliminate
	alloca, etc.) to remote CVS to make it more like the rest of CVS.

	* server.c: Make server_temp_dir just the dir name, not the name
	with "%s" at the end.
	* server.c, client.c: Add "Max-dotdot" request, and use it to make
	extra directories in server_temp_dir if needed.

Thu Nov 17 09:03:28 1994  Jim Kingdon  <kingdon@cygnus.com>

	* client.c: Fix two cases where NULL was used and 0 was meant.

Mon Nov 14 08:48:41 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* server.c (serve_unchanged): Set noexec to 0 when calling Register.

	* update.c (merge_file): Don't call xcmp if noexec.

Fri Nov 11 13:58:22 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* client.c (call_in_directory): Deal with it if reposdirname is
	not a subdirectory of toplevel_repos.

Mon Nov  7 09:12:01 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* patch.c: If file is removed and we don't have a tag or date,
	just print "current release".

	* classify.c (Classify_File): Treat dead files appropriately.

Fri Nov  4 07:33:03 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* main.c (main) [SERVER_SUPPORT]: Move call to getwd past where we
	know whether we are the server or not.  Set CurDir to "<remote>"
	if we are the server.

	* client.c: Remove #if 0'd function option_with_arg.
	Remove #if 0'd code pertaining to the old way of logging the
	session.

	* client.c (start_rsh_server): Don't invoke the server with the
	-d option.
	* server.c (serve_root): Test root for validity, just like main.c
	does for non-remote CVS.
	* main.c (main): If `cvs server' happens with a colon in the
	CVSroot, just handle it normally; don't make it an error.

Wed Nov  2 11:09:38 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* client.c (send_dirent_proc): If dir does not exist, just return
	R_SKIP_ALL.

	* server.c, client.c: Add Directory request and support for
	local relative pathnames (along with the repository absolute
	pathnames).
	* update.c, add.c, checkout.c, checkin.c, cvs.h, create_adm.c,
	commit.c, modules.c, server.c, server.h, remove.c, client.h:
	Pass update_dir to server_* functions.  Include update_dir in
	more error messages.

Fri Oct 28 08:54:00 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* client.c: Reformat to bring closer to cvs standards for brace
	position, comment formatting, etc.

	* sanity.sh: Remove wrong "last mod" line.  Convert more tests to
	put PASS or FAIL in log file.  Change it so arguments to the
	script specify which tests to run.

	* client.c, client.h, server.c, checkout.c: Expand modules in
	separate step from the checkout itself.

Sat Oct 22 20:33:35 1994  Ken Raeburn  (raeburn@kr-pc.cygnus.com)

	* update.c (join_file): When checking for null return from
	RCS_getversion, still do return even if quiet flag is set.

Thu Oct 13 07:36:11 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* client.c (send_files): Call send_repository even if
	toplevel_repos was NULL.

	* server.c (server_updated): If joining, don't remove file.

	* update.c (join_file): If server and file is unmodified, check it
	out before joining.  After joining, call server_updated.  New
	argument repository.

	* server.c, server.h (server_copy_file): New function.
	* update.c (update_file_proc, join_file): Call it.
	* client.c (copy_file, handle_copy_file): New functions.
	* client.c (responses): Add "Copy-file".

	* client.c, client.h: Make toplevel_wd, failed_patches and
	failed_patches_count extern.
	* client.c (client_update): Move guts of function from here...
	* update.c (update): ...to here.

	* client.c, checkout.c: Likewise for checkout.

	* client.c (is_cvsroot_level): New function.
	(handle_set_sticky, handle_clear_sticky,
	handle_clear_static_directory): Call it, instead of checking
	short_pathname for a slash.

	* client.c, client.h (client_process_import_file,
	client_import_done): New functions.
	* import.c (import, import_descend): Use them.
	* import.c (import_descend): If server, don't mention ignored CVS
	directories. 
	* import.c (import_descend_dir): If client, don't print warm
	fuzzies, or make directories in repository.  If server, print warm
	fuzzies to stdout not stderr.
	* client.c (send_modified): New function, broken out from
	send_fileproc.
	(send_fileproc): Call it.

	* client.c (handle_clear_sticky, handle_set_sticky,
	handle_clear_static_directory, handle_set_static_directory): If
	command is export, just return.
	(call_in_directory, update_entries): If command is export, don't
	create CVS directories, CVS/Entries files, etc.
	* update.c (update_filesdone_proc): Don't remove CVS directories if
	client_active. 

	* client.c (send_a_repository): Instead of insisting that
	repository end with update_dir, just strip as many pathname
	components from the end as there are in update_dir.

	* Makefile.in (remotecheck): New target, pass -r to sanity.sh.
	* sanity.sh: Accept -r argument which means to test remote cvs.

	* tag.c (tag), rtag.c (rtag), patch.c (patch), import.c (import),
	admin.c (admin), release.c (release): If client_active, connect to
	the server and send the right requests.
	* main.c (cmds): Add these commands.
	(main): Remove code which would strip hostname off cvsroot and try
	the command locally.  There are no longer any commands which are
	not supported.
	* client.c, client.h (client_rdiff, client_tag, client_rtag,
	client_import, client_admin, client_export, client_history,
	client_release): New functions.
	* server.c (serve_rdiff, serve_tag, serve_rtag, serve_import,
	serve_admin, serve_export, serve_history, serve_release): New
	functions.
	(requests): List them.
	* server.c: Declare cvs commands (add, admin, etc.).
	* cvs.h, server.h: Don't declare any of them here.
	* main.c: Restore declarations of cvs commands which were
	previously removed.

	* cvs.h: New define DEATH_STATE, commented out for now.
	* rcs.c (RCS_parsercsfile_i), commit.c (remove_file, checkaddfile)
	[DEATH_STATE]: Use RCS state to record a dead file.

Mon Oct  3 09:44:54 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* status.c (status_fileproc): Now that ts_rcs is just one time,
	don't try to print the second time from it.  (Same as raeburn 20
	Aug change, it accidentally got lost in 1.4 Alpha-1 merge).

	* cvs.h (CVSDEA): Added (but commented out for now).
	* rcs.c (RCS_parsercsfile_i) [CVSDEA]: Also look in CVSDEA to see if
	something is dead.
	* commit.c (ci_new_rev, mark_file) [CVSDEA]: New functions.
	(remove_file, checkaddfile) [CVSDEA]: Use them instead of ci -K.
	* find_names.c (find_dirs) [CVSDEA]: Don't match CVSDEA directories.
	* update.c (checkout_file): Check RCS_isdead rather than relying
	on co to not create the file.

	* sanity.sh: Direct output to logfile, not /dev/null.

	* subr.c (run_exec): Print error message if we are unable to exec.

	* commit.c (remove_file): Call Scratch_Entry when removing tag
	from file.  The DEATH_SUPPORT ifdef was erroneous.

Sun Oct  2 20:33:27 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* commit.c (checkaddfile): Instead of calling isdir before
	attempting to create the directory, just ignore EEXIST errors from
	mkdir.  (This removes some DEATH_SUPPORT ifdefs which actually had
	nothing to do with death support).

Thu Sep 29 09:23:57 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* diff.c (diff): Search attic too if we have a second tag/date.
	(diff_fileproc): If we have a second tag/date, don't do all the
	checking regarding the user file.

Mon Sep 26 12:02:15 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* checkin.c (Checkin): Check for error from unlink_file.

Mon Sep 26 08:51:10 1994  Anthony J. Lill  (ajlill@ajlc.waterloo.on.ca)

	* rcs.c (getrcskey): Allocate space for terminating '\0' if
	necessary. 

Sat Sep 24 09:07:37 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* commit.c (commit_fileproc): Set got_message = 1 when calling
	do_editor (accidentally omitted from last change).

Fri Sep 23 11:59:25 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	Revert buggy parts of Rich's change of 1 Nov 1993 (keeping the
	dynamic buffer allocation, which was the point of that change).
	* logmsg.c (do_editor): Reinstate message arg, but make it char
	**messagep instead of char *message.  Change occurances of message
	to *messagep.  Char return type from char * back to void.
	* cvs.h: Change do_editor declaration.
	* commit.c: Reinstate got_message variable
	(commit_filesdoneproc, commit_fileproc, commit_direntproc): Use it.
	* import.c (import), commit.c (commit_fileproc,
	commit_direntproc): Pass &message to do_editor; don't expect it to
	return a value.
	* client.c (client_commit): Likewise.
	* import.c (import): Deal with it if message is NULL.

Wed Sep 21 09:43:25 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* server.c (server_updated): If the file doesn't exist, skip it.

	* diff.c, client.h, client.c: Rename diff_client_senddate to
	client_senddate and move from diff.c to client.c.
	* client.c (client_update, client_checkout): Use it.

Sat Sep 17 08:36:58 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* checkout.c (checkout_proc): Don't pass NULL to Register for
	version.  (should fix "cvs co -r <nonexistent-tag> <file>"
	coredump on Solaris).

Fri Sep 16 08:38:02 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* diff.c (diff_fileproc): Set top_rev from vn_user, not vn_rcs.
	Rename it to user_file_rev because it need not be the head of any
	branch. 
	(diff_file_nodiff): After checking user_file_rev, if we have both
	use_rev1 and use_rev2, compare them instead of going on to code
	which assumes use_rev2 == NULL.

Thu Sep 15 08:20:23 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* status.c (status): Return a value in client_active case.

Thu Sep 15 15:02:12 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* server.c (serve_modified): Create the file even if the size is
	zero.

Thu Sep 15 08:20:23 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* lock.c (readers_exist): Clear errno each time around the loop,
	not just the first time.

	* client.c (start_server): Don't send Global_option -q twice.

	* no_diff.c (No_Difference): Check for error from unlink.

	* no_diff.c, cvs.h (No_Difference): New args repository,
	update_dir.  Call server_update_entries if needed.  Use update_dir
	in error message.
	* classify.c (Classify_File): Pass new args to No_Difference.

	* server.c (server_update_entries, server_checked_in,
	server_updated): Don't do anything if noexec.

	* client.c (send_fileproc): Rather than guessing how big the gzip
	output may be, just realloc the buffer as needed.

Tue Sep 13 13:22:03 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* lock.c: Check for errors from unlink, readdir, and closedir.

	* classify.c (Classify_File): Pass repository and update_dir to
	sticky_ck.
	(sticky_ck): New args repository and update_dir.
	* server.c, server.h (server_update_entries): New function.
	* classify.c (sticky_ck): Call it.
	* client.c: New response "New-entry".
	* client.c (send_fileproc): Send tag/date from vers->entdata, not
	from vers itself.

Mon Sep 12 07:07:05 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* server.c: Clean up formatting ("=  (errno)" -> "= errno").

	* cvs.h: Declare strerror.

	* client.c: Add code to deal with Set-sticky and Clear-sticky
	responses, and Sticky request.
	* server.c: Add code to deal with Sticky request.
	* server.c, server.h (server_set_sticky): New function.
	* create_adm.c (Create_Admin), update.c (update, update_dirent_proc),
	commit.c (commit_dirleaveproc): Call it.
	* client.c, client.h (send_files): Add parameter aflag.
	* add.c (add), diff.c (diff), log.c (cvslog), remove.c (cvsremove),
	status.c (status),
	client.c (client_commit, client_update, client_checkout): Pass it.
	* client.c (client_update): Add -A flag.

Fri Sep  9 07:05:35 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* entries.c (WriteTag): Check for error from unlink_file.

	* server.c (server_updated): Initialize size to 0.  Previously if
	the file was zero length, the variable size got used without being
	set.

Thu Sep  8 14:23:05 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* server.c (serve_repository): Check for error from fopen on
	CVSADM_ENT. 

	* update.c (update, update_dirent_proc): Check for errors when
	removing Entries.Static.

	* client.c: Add code to deal with Set-static-directory and
	Clear-static-directory responses, and Static-directory request.
	* server.c, server.h (server_clear_entstat, server_set_entstat):
	New functions.
	* update.c, checkout.c, modules.c: Call them.
	* server.c: Add code to deal with Static-directory request.

	* server.c, client.c: Use strchr and strrchr instead of index and
	rindex. 

	* server.c (serve_unchanged, serve_lost): Change comments which
	referred to changing timestamp; we don't always change the
	timestamp in those cases anymore.

Wed Sep  7 10:58:12 1994  J.T. Conklin  (jtc@rtl.cygnus.com)

	* cvsrc.c (read_cvsrc): Don't call getenv() three times when one
	  time will do.

	* subr.c (xmalloc, xrealloc): Change type of bytes argument from
	  int to size_t and remove the test that checks if it is less than
	  zero.
	* cvs.h (xmalloc, xrealloc): Update prototype.

Thu Sep  1 12:22:20 1994  Jim Kingdon  (kingdon@cygnus.com)

	* update.c (merge_file, join_file): Pass -E to rcsmerge.
	(merge_file): If rcsmerge doesn't change the file, say so.

	* recurse.c, cvs.h (start_recursion): New argument wd_is_repos.
	* recurse.c (start_recursion): Use it instead of checking whether
	command_name is rtag to find out if we are cd'd to the repository.
	* client.c, update.c, commit.c, status.c, diff.c, log.c, admin.c,
	remove.c, tag.c: Pass 0 for wd_is_repos.
	* rtag.c, patch.c: Pass 1 for wd_is_repos.

	* classify.c, cvs.h (Classify_File): New argument pipeout.
	* classify.c (Classify_File): If pipeout, don't complain if the
	file is already there.
	* update.c, commit.c, status.c: Change callers.

	* mkmodules.c (main): Don't print "reminders" if commitinfo,
	loginfo, rcsinfo, or editinfo files are missing.

Mon Aug 22 23:22:59 1994  Ken Raeburn  (raeburn@kr-pc.cygnus.com)

	* server.c (strerror): Static definition replaced by extern
	declaration.

Sun Aug 21 07:16:27 1994  Ken Raeburn  (raeburn@kr-pc.cygnus.com)

	* client.c (update_entries): Run "patch" with input from
	/dev/null, so if it's the wrong version, it fails quickly rather
	than waiting for EOF from terminal before failing.

Sat Aug 20 04:16:33 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* server.c (serve_unchanged): Instead of creating a file with a
	zero timestamp, rewrite the entries file to have "=" in the
	timestamp field.
	* vers_ts.c (mark_lost, mark_unchanged): New macros.
	(time_stamp_server): Use them, for clarity.  Interpret "="
	timestamp as an unchanged file.  A zero-timestamp file should
	never be encountered now in use_unchanged mode.

	* client.c (start_server): If CVS_CLIENT_PORT indicates a
	non-positive port number, skip straight to rsh connection.

	* status.c (status_fileproc): Fix ts_rcs reference when printing
	version info, to correspond to new Entries file format.  Don't
	print it at all if server_active, because it won't have any useful
	data.

Thu Aug 18 14:38:21 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* cvs.h (status): Declare.
	* client.c (client_status): New function.

	* client.h (client_status): Declare.
	* main.c (cmds): Include it.
	* server.c (serve_status): New function.
	(requests): Add it.
	* status.c (status): Do the remote thing if client_active.

	* client.c (supported_request): New function.
	(start_server): Use it.

	* server.c (receive_partial_file): New function, broken out from
	serve_modified.  Operate with fixed-size local buffer, instead of
	growing stack frame by entire file size.
	(receive_file): New function, broken out from serve_modified.
	(serve_modified): Call it.
	(server): Print out name of unrecognized request.

	More generic stream-filtering support:
	* client.c (close_on_exec, filter_stream_through_program): New
	functions.
	(server_fd): New variable.
	(get_responses_and_close): Direct non-rsh connection is now
	indicated by server_fd being non-negative.  File descriptors for
	to_server and from_server may now be different in case "tee"
	filtering is being done.  Wait for rsh_pid specifically.
	(start_server): Use filter_stream_through_program for "tee"
	filter, and enable it for direct Kerberos-authenticated
	connections.  Use dup to create new file descriptors for server
	connection if logging is enabled.
	(start_rsh_server): Disable code that deals with logging.

	Per-file compression support:
	* cvs.h (gzip_level): Declare.
	* main.c (usg): Describe new -z argument.
	(main): Recognize it and set gzip_level.
	* client.c (filter_through_gzip, filter_through_gunzip): New
	functions to handle compression.
	(update_entries): If size starts with "z", uncompress 
	(start_server): If gzip_level is non-zero and server supports it,
	issue gzip-file-contents request.
	(send_fileproc): Optionally compress file contents.  Use a
	slightly larger buffer, anticipating the worst case.
	* server.c (gzip_level): Define here.
	(receive_file): Uncompress file contents if needed.
	(serve_modified): Recognize "z" in file size and pass receive_file
	appropriate flag.
	(buf_read_file_to_eof, buf_chain_length): New functions.
	(server_updated): Call them when sending a compressed file.
	(serve_gzip_contents): New function; set gzip_level.
	(requests): Added gzip-file-contents request.

Wed Aug 17 09:37:44 1994  J.T. Conklin  (jtc@cygnus.com)

	* find_names.c (find_dirs): Use 4.4BSD filesystem feature (it
	  contains the file type in the dirent structure) to avoid
	  stat'ing each file.

	* commit.c (remove_file,checkaddfile): Change type of umask
	  variables from int to mode_t.
	* subr.c (): Likewise.

Tue Aug 16 19:56:34 1994  Mark Eichin  (eichin@cygnus.com)

	* diff.c (diff_fileproc): Don't use diff_rev* because they're
	invariant across calls -- add new variable top_rev.
	(diff_file_nodiff): After checking possible use_rev* values, if
	top_rev is set drop it in as well (if we don't already have two
	versions) and then clear it for next time around.

Wed Aug 10 20:50:47 1994  Mark Eichin  (eichin@cygnus.com)

	* diff.c (diff_fileproc): if ts_user and ts_rcs match, then the
	file is at the top of the tree -- so we might not even have a
	copy. Put the revision into diff_rev1 or diff_rev2.	

Wed Aug 10 14:55:38 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* server.c (do_cvs_command): Use waitpid.

	* subr.c (run_exec): Always use waitpid.

	* Makefile.in (CC, LIBS): Define here, in case "make" is run in
	this directory instead of top level.

Wed Aug 10 13:57:06 1994  Mark Eichin  (eichin@cygnus.com)

	* client.c (krb_get_err_text): use HAVE_KRB_GET_ERR_TEXT to
	determine if we need to use the array or the function.
	* main.c: ditto.

Tue Aug  9 16:43:30 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* entries.c (ParseEntries): If timestamp is in old format, rebuild
	it in the new format.  Fudge an unmatchable entry that won't
	trigger this code next time around, if the file is modified.

	* vers_ts.c (time_stamp): Only put st_mtime field into timestamp,
	and use GMT time for it.  With st_ctime or in local time, copying
	trees between machines in different time zones makes all the files
	look modified.
	(time_stamp_server): Likewise.

Tue Aug  9 19:40:51 1994  Mark Eichin  (eichin@cygnus.com)

	* main.c (main): use krb_get_err_text function instead of
	krb_err_txt array.

Thu Aug  4 15:37:50 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* main.c (main): When invoked as kserver, set LOGNAME and USER
	environment variables to the remote user name.

Thu Aug  4 07:44:37 1994  Mark Eichin  (eichin@cygnus.com)

	* client.c: (handle_valid_requests): if we get an option that has
	rq_enableme set, then send that option. If it is UseUnchanged, set
	use_unchanged so that the rest of the client knows about
	it. (Could become a more general method for dealing with protocol
	upgrades.)
	(send_fileproc): if use_unchanged didn't get set, send an
	old-style "Lost" request, otherwise send an "Unchanged" request.
	* server.c (serve_unchanged): new function, same as serve_lost,
	but used in the opposite case.
	(requests): add new UseUnchanged and Unchanged requests, and make
	"Lost" optional (there isn't a good way to interlock these.)
	* server.h (request.status): rq_enableme, new value for detecting
	compatibility changes.
	* vers_ts.c (time_stamp_server): swap meaning of zero timestamp if
	use_unchanged is set.

Tue Jul 26 10:19:30 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* sanity.sh: Separate CVSROOT_FILENAME, which must be the filename
	of the root, from CVSROOT, which can include a hostname for
	testing remote CVS.  (but the tests aren't yet prepared to deal
	with the bugs in remote CVS).

	* import.c (update_rcs_file): Change temporary file name in TMPDIR
	from FILE_HOLDER to cvs-imp<process-id>.

	* sanity.sh: Add ">/dev/null" and "2>/dev/null" many places to
	suppress spurious output.  Comment out tests which don't work (cvs
	add on top-level directory, cvs diff when non-committed adds or
	removes have been made, cvs release, test 53 (already commented as
	broken), retagging without deleting old tag, test 63).  Now 'make
	check' runs without any failures.

Fri Jul 15 12:58:29 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* Makefile.in (install): Do not depend upon installdirs.

Thu Jul 14 15:49:42 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* client.c, server.c: Don't try to handle alloca here; it's
	handled by cvs.h.

Tue Jul 12 13:32:40 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* client.c (update_entries): Reset stored_checksum_valid if we
	quit early because of a patch failure.

Fri Jul  8 11:13:05 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* client.c (responses): Mark "Remove-entry" as optional.

Thu Jul  7 14:07:58 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* server.c (server_updated): Add new checksum argument.  If it is
	not NULL, and the client supports the "Checksum" response, send
	it.
	* server.h (server_updated): Update prototype.
	* update.c: Include md5.h.
	(update_file_proc): Pass new arguments to patch_file and
	server_updated.
	(patch_file): Add new checksum argument.  Set it to the MD5
	checksum of the version of the file being checked out.
	(merge_file): Pass new argument to server_updated.
	* client.c: Include md5.h.
	(stored_checksum_valid, stored_checksum): New static variables.
	(handle_checksum): New static function.
	(update_entries): If a checksum was received, check it against the
	MD5 checksum of the final file.
	(responses): Add "Checksum".
	(start_server): Clear stored_checksum_valid.
	* commit.c (commit_fileproc): Pass new argument to server_updated.

	* client.h (struct response): Move definition in from client.c,
	add status field.
	(responses): Declare.
	* client.c (struct response): Remove definition; moved to
	client.h.
	(responses): Make non-static.  Initialize status field.
	* server.c (serve_valid_responses): Check and record valid
	responses, just as in handle_valid_requests in client.c.

	* diff.c (diff_client_senddate): New function.
	(diff): Use it to send -D arguments to server.

Wed Jul  6 12:52:37 1994  J.T. Conklin  (jtc@phishhead.cygnus.com)

	* rcs.c (RCS_parsercsfile_i): New function, parse RCS file
	referenced by file ptr argument.
	(RCS_parsercsfile): Open file and pass its file ptr to above function.
	(RCS_parse): Likewise.

Wed Jul  6 01:25:38 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* client.c (update_entries): Print message indicating that an
	unpatchable file will be refetched.
	(client_update): Print message when refetching unpatchable files.

Fri Jul  1 07:16:29 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* client.c (send_dirent_proc): Don't call send_a_repository if
	repository is "".

Fri Jul  1 13:58:11 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* client.c (last_dirname, last_repos): Move out of function.
	(failed_patches, failed_patches_count): New static variables.
	(update_entries): If patch program fails, save short_pathname in
	failed_patches array, only exit program if retcode is -1, and
	return out of the function rather than update the Entries line.
	(start_server): Clear toplevel_repos, last_dirname, last_repos.
	(client_update): If failed_patches is not NULL after doing first
	update, do another update, but remove all the failed files first.

Thu Jun 30 09:08:57 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* server.c (requests): Add request "Global_option".
	(serve_global_option): New function, to handle it.
	* client.c (start_server): Deal with global options.  Check for
	errors from fprintf.

	* client.c (send_fileproc): Split out code which sends repository
	into new function send_a_repository.  Also, deal with update_dir
	being ".".
	(send_dirent_proc): Call send_a_repository.
	* add.c (add): If client_active, do special processing for
	directories.
	(add_directory): If server_active, don't try to create CVSADM
	directory.

Thu Jun 30 11:58:52 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* client.c (update_entries): If patch succeeds, remove the backup
	file.
	* server.c (server_updated): Add new argument file_info.  If it is
	not NULL, use it rather than sb to get the file mode.
	* server.h (server_updated): Update prototype for new argument.
	* update.c (update_file_proc): Pass new arguments to patch_file
	and server_updated.
	(patch_file): Add new argument file_info.  Don't use -p to check
	out new version, check it out into file and rename that to file2.
	If result is not readable, assume file is dead and set docheckout.
	Call xchmod on file2.  Close the patch file after checking for a
	binary diff.  Set file_info to the results of stat on file2.
	(merge_file): Pass new argument to server_updated.
	* commit.c (commit_fileproc): Pass new argument to server_updated.

Wed Jun 29 13:00:41 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* client.c (krb_realmofhost): Declare, since it's not the current
	<krb.h>.
	(start_server): Save the name returned by gethostbyname.  Call
	krb_realmofhost to get the realm.  Pass the resulting realm to
	krb_sendauth.  Pass the saved real name to krb_sendauth, rather
	than server_host.

	* update.c (update_file_proc): Pass &docheckout to patch_file.  If
	it is set to 1, fall through to T_CHECKOUT case.
	(patch_file): Add docheckout argument.  Set it to 1 if we can't
	make a patch.  Check out the files and run diff rather than
	rcsdiff.  If either file does not end in a newline, we can't make
	a patch.  If the patch starts with the string "Binary", assume
	one or the other is a binary file, and that we can't make a patch.

Tue Jun 28 11:57:29 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* client.c (update_entries): If the patch file is empty, don't run
	patch program; avoids error message.

	* classify.c (Classify_File): Return T_CHECKOUT, not T_PATCH, if
	the file is in the Attic.

	* cvs.h (enum classify_type): Add T_PATCH.
	* config.h (PATCH_PROGRAM): Define.
	* classify.c (Classify_File): If user file exists and is not
	modified, and using the same -k options, return T_PATCH instead of
	T_CHECKOUT.
	* update.c (patches): New static variable.
	(update): Add u to gnu_getopt argument.  Handle it.
	(update_file_proc): Handle T_PATCH.
	(patch_file): New static function.
	* server.h (enum server_updated_arg4): Add SERVER_PATCHED.
	* server.c (server_updated): Handle SERVER_PATCHED by sending
	"Patched" command.
	(serve_ignore): New static function.
	(requests): Add "update-patches".
	(client_update): If the server supports "update-patches", send -u.
	* client.c (struct update_entries_data): Change contents field
	from int to an unnamed enum.
	(update_entries): Correponding change.  If contents is
	UPDATE_ENTRIES_PATCH, pass the input to the patch program.
	(handle_checked_in): Initialize contents to enum value, not int.
	(handle_updated, handle_merged): Likewise.
	(handle_patched): New static function.
	(responses): Add "Patched".
	* commit.c (check_fileproc): Handle T_PATCH.
	* status.c (status_fileproc): Likewise.

	* client.c (start_server): If CVS_CLIENT_PORT is set in the
	environment, connect to that port, rather than looking up "cvs" in
	/etc/services.  For debugging.

Tue Jun 21 12:48:16 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* update.c (joining): Return result of comparing pointer with
	NULL, not result of casting (truncating, on Alpha) pointer to int.

	* main.c (main) [HAVE_KERBEROS]: Impose a umask if starting as
	Kerberos server, so temp directories won't be world-writeable.

	* update.c (update_filesdone_proc) [CVSADM_ROOT]: If environment
	variable CVS_IGNORE_REMOTE_ROOT is set and repository is remote,
	don't create CVS/Root file.
	* main.c (main): If env var CVS_IGNORE_REMOTE_ROOT is set, don't
	check CVS/Root.

Fri Jun 10 18:48:32 1994  Mark Eichin  (eichin@cygnus.com)

	* server.c (O_NDELAY): use POSIX O_NONBLOCK by default, unless it
	isn't available (in which case substitute O_NDELAY.)

Thu Jun  9 19:17:44 1994  Mark Eichin  (eichin@cygnus.com)

	* server.c (server_cleanup): chdir out of server_temp_dir before
	deleting it (so that it works on non-BSD systems.) Code for choice
	of directory cloned from server().

Fri May 27 18:16:01 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* client.c (update_entries): Add return type of void.
	(get_responses_and_close): If using Kerberos and from_server and
	to_server are using the same file descriptor, use shutdown, not
	fclose.  Close from_server.
	(start_server): New function; most of old version renamed to
	start_rsh_server.
	(start_rsh_server): Mostly renamed from old start_server.
	(send_fileproc): Use %lu and cast sb.st_size in fprintf call.
	(send_files): Remove unused variables repos and i.
	(option_no_arg): Comment out; unused.
	* main.c (main): Initialize cvs_update_env to 0.  If command is
	"kserver", authenticate and change command to "server".  If
	command is "server", don't call Name_Root, don't check access to
	history file, and don't assume that CVSroot is not NULL.
	* server.c (my_memmove): Removed.
	(strerror): Change check from STRERROR_MISSING to HAVE_STRERROR.
	(serve_root): Likewise for putenv.
	(serve_modified): Initialize buf to NULL.
	(struct output_buffer, buf_try_send): Remove old buffering code.
	(struct buffer, struct buffer_data, BUFFER_DATA_SIZE,
	allocate_buffer_datas, get_buffer_data, buf_empty_p,
	buf_append_char, buf_append_data, buf_read_file, buf_input_data,
	buf_copy_lines): New buffering code.
	(buf_output, buf_output0, buf_send_output, set_nonblock,
	set_block, buf_send_counted, buf_copy_counted): Rewrite for new
	buffering code.
	(protocol, protocol_memory_error, outbuf_memory_error,
	do_cvs_command, server_updated): Rewrite for new buffering code.
	(input_memory_error): New function.
	(server): Put Rcsbin at start of PATH in environment.
	* Makefile.in: Add @includeopt@ to DEFS.

Fri May 20 08:13:10 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* cvs.h, classify.c (Classify_File): New argument update_dir.
	Include it in user messages.
	* commit.c (check_fileproc), status.c (status_fileproc), update.c
	(update_file_proc): Pass update_dir to Classify_File.
	* commit.c (check_fileproc), update.c (checkout_file):
	Include update_dir in user messages.
	* commit.c (check_fileproc) update.c (update_file_proc): Re-word
	"unknown status" message.

	* server.c (server_checked_in): Deal with the case where
	scratched_file is set rather than entries_line.

	* entries.c (Register): Write file even if server_active.
	* add.c (add): Add comment about how we depend on above behavior.

Tue May 17 08:16:42 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* mkmodules.c: Add dummy server_active and server_cleanup, to go
	with the dummy Lock_Cleanup already there.

	* server.c (server_cleanup): No longer static.

Sat May  7 10:17:17 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	Deal with add and remove:
	* commit.c (checkaddfile): If CVSEXT_OPT or CVSEXT_LOG file does
	not exist, just	silently keep going.
	(remove_file): If server_active, remove file before creating
	temporary file with that name.
	* server.c (serve_remove, serve_add): New functions.
	(requests): Add them.
	* server.c (server_register): If options is NULL, it means there
	are no options.
	* server.c, server.h (server_scratch_entry_only): New function.
	New variable kill_scratched_file.
	(server_scratch, server_updated): Deal with kill_scratched_file.
	* commit.c (commit_fileproc): If server_active, call
	server_scratch_entry_only and server_updated.
	* add.c (add): Add client_active code.
	(add): If server_active, call server_checked_in for each file added.
	* remove.c (remove): Add client_active code.
	(remove_fileproc): If server_active, call server_checked_in.
	* main.c (cmds), client.c, client.h: New functions client_add and
	client_remove.
	* Move declarations of add, cvsremove, diff, and cvslog from
	main.c to cvs.h.
	* client.c (call_in_directory): Update comment regarding Root and
	Repository files.
	(send_fileproc): Only send Entries line if Version_TS really finds
	an entry.  If it doesn't find one, send Modified.
	(update_entries): If version is empty or starts with 0 or -,
	create a dummy timestamp.

Thu May  5 19:02:51 1994  Per Bothner  (bothner@kalessin.cygnus.com)

	* recurse/c (start_recursion):  If we're doing rtag, and thus
	have cd'd to the reporsitory, add ,v to a file name before stat'ing.

Wed Apr 20 15:01:45 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* client.c (client_commit): Call ign_setup.
	(client_update, client_checkout): Likewise.
	* diff.c (diff): If client, call ign_setup.
	* log.c (cvslog): Likewise.
	* update.h (ignlist): Change definition to declaration to avoid
	depending upon common semantics (not required by ANSI C, and not
	the default on Irix 5).
	* update.c (ignlist): Define.

Tue Apr 19 00:02:54 1994  John Gilmore  (gnu@cygnus.com)

	Add support for remote `cvs log'; clean up `cvs diff' a bit.

	* client.c (send_arg):  Make external.
	(send_option_string): New function.
	(client_diff_usage):  Remove, unused.
	(client_diff):  Just call diff, not do_diff.
	(client_log):  Add.
	* client.h (client_log, send_arg, send_option_string):  Declare.
	* cvs.h (cvslog):  Declare.
	* diff.c (do_diff):  Fold back into diff(), distinguish by checking
	client_active.
	(diff):  Remove `-*' arg parsing crud; use send_option_string.
	* log.c (cvslog):  If a client, start the server, pass options
	and files, and handle server responses.
	* main.c (cmds):  Add client_log.
	(main):  Remove obnoxious message every time CVS/Root is used.
	Now CVS will be quiet about it -- unless there is a conflict
	between $CVSROOT or -d value versus CVS/Root.
	* server.c (serve_log):  Add.
	(requests):  Add "log".

Mon Apr 18 22:07:53 1994  John Gilmore  (gnu@cygnus.com)

	Add support for remote `cvs diff'.

	* diff.c (diff):  Break guts out into new fn do_diff.
	Add code to handle starting server, writing args, 
	sending files, and retrieving responses.
	(includes): Use PARAMS for static function declarations.
	* client.c (to_server, from_server, rsh_pid,
	get_responses_and_close, start_server, send_files,
	option_with_arg):  Make external.
	(send_file_names):  New function.
	(client_diff):  New function.
	* client.h (client_diff, to_server, from_server,
	rsh_pid, option_with_arg, get_responses_and_close, start_server,
	send_file_names, send_files):  Declare.
	* cvs.h (diff):  Declare.
	* main.c (cmds):  Add client_diff to command table.
	* server.c (serve_diff):  New function.
	(requests):  Add serve_diff.
	(server):  Bug fix: avoid free()ing incremented cmd pointer.
	* update.h (update_filesdone_proc):  Declare with PARAMS.

Sat Apr 16 04:20:09 1994  John Gilmore  (gnu@cygnus.com)

	* root.c (Name_root):  Fix tyop (CVSroot when root meant).

Sat Apr 16 03:49:36 1994  John Gilmore  (gnu@cygnus.com)

	Clean up remote `cvs update' to properly handle ignored
	files (and files that CVS can't identify), and to create
	CVS/Root entries on the client side, not the server side.

	* client.c (send_fileproc):  Handle the ignore list.
	(send_dirent_proc):  New function for handling ignores.
	(send_files):  Use update_filesdone_proc and send_dirent_proc
	while recursing through the local filesystem.
	* update.h:  New file.
	* update.c:  Move a few things into update.h so that client.c
	can use them.

Fri Mar 11 13:13:20 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* server.c: If O_NDELAY is not defined, but O_NONBLOCK is, define
	O_NDELAY to O_NONBLOCK.

Wed Mar  9 21:08:30 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	Fix some spurious remote CVS errors caused by the CVS/Root patches:
	* update.c (update_filesdone_proc): If server_active, don't try to
	create CVS/Root.
	* root.c (Name_Root): Make error messages which happen if root is
	not an absolute pathname or if it doesn't exist a bit clearer.
	Skip them if root contains a colon.

Mon Nov  1 15:54:51 1993  K. Richard Pixley  (rich@sendai.cygnus.com)

	* client.c (client_commit): dynamically allocate message.

Tue Jun  1 17:03:05 1993  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)

	* server.h: remove alloca cruft

	* server.c: replace with better alloca cruft

Mon May 24 11:25:11 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* entries.c (Scratch_Entry):  Update our local Entries file even if
	server_active.

	* server.c (server_scratch, server_register): If both Register
	and Scratch_Entry happen, use whichever one happened later.
	If neither happen, silently continue.

	* client.c (client_checkout): Initialize tag and date (eichin and
	I independently discovered this bug at the same time).

Wed May 19 10:11:51 1993  Mark Eichin (eichin@cygnus.com)

	* client.c (update_entries): handle short reads over the net
	(SVR4 fread is known to be broken, specifically for short
	reads off of streams.)	

Tue May 18 15:53:44 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* server.c (do_cvs_command): Fix fencepost error in setting
	num_to_check.

	* server.c (do_cvs_command): If terminated with a core dump, print
	message and set dont_delete_temp.
	(server_cleanup): If dont_delete_temp, don't delete it.

	* client.c (get_server_responses): Don't change cmd since we
	are going to "free (cmd)".

	* server.c: Rename memmove to my_memmove pending a real fix.

	* server.c (do_cvs_command): Set num_to_check to largest descriptor
	we try to use, rather than using (non-portable) getdtablesize.

Wed May 12 15:31:40 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	Add CVS client feature:
	* client.{c,h}: New files.
	* cvs.h: Include client.h.
	* main.c: If CVSROOT has a colon, use client commands instead.
	* vers_ts.c (Version_TS): If repository arg is NULL, don't worry
	about the repository.
	* logmsg.c (do_editor): If repository or changes is NULL, just don't
	use those features.
	* create_adm.c (Create_Admin), callers:  Move the test for whether
	the repository exists from here to callers.
	* repos.c (Name_Repository): Don't test whether the repository exists
	if client_active set (might be better to move test to callers).

	Add CVS server feature:
	* server.{c,h}: New files.
	* cvs.h: Include server.h.
	* checkin.c (Checkin): Call server_checked_in.
	* update.c (update_file_proc, merge_files): Call server_updated.
	* entries.c (Register): Call server_register.
	(Scratch_Entry): Call server_scratch.
	* main.c: Add server to cmds.
	* vers_ts.c (Version_TS): If server_active, call new function
	time_stamp_server to set ts_user.

