CVS FOR NeXTSTEP
Distribution 1, based on
	cvs		1.3
	rcs		5.6.0.1
	diffutils	2.7
	tar		1.11.2

1										INTRODUCTION

One day, quite a while ago, while working for OTI (Objective Technologies, Inc., in NY) I found myself wanting to use CVS to manage a NeXTSTEP development project (The Impress (r) * report writer).  The problem was that CVS, as distributed, does not correctly handle wrappers/bundles/etc.  That is, it doesn't know how to deal with the concept of directories which are really supposed to be treated like files.  Existing solutions were not satisfactory to me, since they did not address all types of wrappers (e.g., rtfd's, etc.) and did not prevent rcsmerge in certain cases.

I decided to modify CVS so that it would be able to deal with wrappers.  The files in this distribution consist the GNU cvs, rcs, diff and tar packages modified so that CVS can be used as an effective source code control system under NeXTSTEP.  The modifications made are summarized in the diffs contained in the directory "diffs."  This CVS package has been used in two rather large software development efforts to date, so a good number of problems have been ironed out.

The changes I made are rather small but I had to touch quite a number of files.  The changes consisted of calling various functions implemented within cvs1-3/src/wrapper.c from appropriate places within the rest of CVS.  The top of wrapper.c has a comment which explains what's going on.

The changes actually apply more generally than just wrapper-handling.  Specifically, I added capability for CVS to pre and post process files/directories before applying some action.  The file cvswrappers, which should live within $CVSROOT/CVSROOT allows you to define filename patterns and how to pre and post process matched files.  It also allows you to specify that files matching a pattern should not be put through the rcsmerge process when conflicts exist during an update, and that instead, the repository version should be copied in (the user's version is backed up in the usual way, e.g. as .#foobar.nib.1.3)

The diff & rcs packages are unmodified (except perhaps the Makefiles ... to make installation possible).  The tar package is modified to provide some additional tar options which ensure that tarred up wrapper directories only differ when the contents of the tarred up directory have changed ... i.e., not when the owner of some file has changed.

2										SUPPORT

I don't have a heck of a lot of time to support this software, however, if you find bugs and/or have any comments, please forward them to me at athan@morgan.com.  Please include the word "cvs" in the subject.  Also, please see section 4.

This is not a "CVS for Dummies" distribution.  I have not had time to write extensive documentation, nor am I likely to find the time.  However, you should be able to learn a lot from the example cvswrappers, script files and source code (especially /usr/cvs/src/cvs-1.3/wrappers.c).  I have usually placed a comment containing the word "ACA" near any changes that I've made.

3										INSTALLATION & SOME HINTS

You may wish to follow these directions.  If you don't think you should, then you'll have to either edit the src/install script, or hand install each of the packages.  Make sure that you look ath rcs5.6.0.1/src/Makefile and modify the right variable (see especially the ones that currently refer to EXEC_PREFIX).

	Log in as root

	mkdirs /usr/cvs

	cd /usr/cvs

	gnutar zxvf /tmp/CVS_for_NeXTSTEP.1.tar.gz

	./install

This will install the binaries and other files in /usr/cvs, which can then be exported and mounted on appropriate machines.  You should add /usr/cvs/sparc/bin (replace sparc with whatever executing the "arch" program shows) to your path.  You will then need to define a repository and do the other usual CVS things.  I use CVSROOT=/usr/cvs/Repository, EDITOR=emacsclient.  You should look at the /usr/cvs/examples directory for an example cvswrappers file and pre/post processing scripts which will work with nibs/rtfd's/etc.

4										LEGAL

This software is provided "as-is", without warranty of any kind, not even a warranty of merchantability or fitness for a particular purpose.  In no event shall I (Andrew Athan) be held liable for any damages, including lost profits, lost data, or any special, incidental or consequential damages arising from the use of these modified GNU packages, even if I (Andrew Athan) have been advised of the possibility of such damages.

* "Impress" is a registered trademark of Objective Technologies, Inc.