Short: Concurrent version control system Author: Various; ported by Olaf Barthel Uploader: Olaf Barthel Type: util/gnu CVS 1.11 Amiga port (updated 08 February 2001) ============================================== Introduction ------------ This is a somewhat rough port of GNU CVS 1.11, a version control system, which allows you to keep old versions of files (usually source code), keep a log of who, when, and why changes occurred, etc., like RCS or SCCS. It handles multiple developers, multiple directories, triggers to enable/log/control various operations, and can work over a wide area network. The following tasks are not included; they can be done in conjunction with CVS but will tend to require some script-writing and software other than CVS: bug-tracking, build management (that is, make and make-like tools), and automated testing. (Quoted from the CVS documentation.) I call this a 'rough port' since it is not as polished as, say Heinz Wrobel's excellent 'RCS' port. It does what it needs to do, but a few features are sorely lacking, such as support for Amiga file protection bits and code to communicate with CVS servers via secure channels (Kerberos, SSH). On the other hand, however, you get everything, and perhaps more, you got with the previous Amiga ports of CVS: this port does not require 'ixemul.library' to work and it does not require an RCS installation as it is completely self contained. The port also probably would win a price as the largest 'pure' executable; it can be made resident. What's in this package? ----------------------- This distribution contains the Amiga port, the Amiga specific source code and most of the original GNU CVS 1.11 distribution. 'Most' in this case means that only the original source code has been omitted in order to keep the distribution archive small; the documentation and support files are all provided. The original source code can be downloaded from the Internet at 'ftp://ftp.cvshome.org/pub/cvs-1.11/cvs-1.11.tar.gz'. I have added two more files which are converted from the original Unix man pages, namely 'cvs.1.man' and 'cvs.5.man' whose sources can be found in the 'cvs-1.11/man' directory. Installation ------------ Almost everything you need to get CVS up and running is contained in the archive which also included the 'README.AMIGA' file you are currently reading. And that means the 'cvs' executable. You will also need a working 'queue-handler' (the one that ships with Workbench 3.1 and beyond is, unfortunately, broken) which can be found on Aminet (you can find the archive at 'http://us.aminet.net/pub/aminet/util/sys/HWGQueue.lha'). A TCP/IP stack like Miami or AmiTCP is supported but not strictly required: you can perfectly well keep your CVS repository on your local machine. Since CVS may ask you to edit the log entries associated with the files to store, you may want to configure the 'EDITOR' environment variable. Last, but not least, you must set up an environment variable which allows CVS to associate you with the changes you made; this should be the 'USER', 'LOGUSER' or 'USERNAME' variable. Most importantly, this port requires Kickstart 2.04 or higher. Here is how you could set up CVS on your machine. We start by creating two drawers on the 'Work:' volume: MakeDir Work:CVS-Root MakeDir Work:CVS-Home Next, we add two lines to the 'S:User-Startup' file: Assign CVSHOME: Work:CVS-Home Path CVSHOME: Add The CVS program will need to be copied: Copy cvs Work:CVS-Home CLONE And the path to the CVS repository needs to be set: SetEnv CVSROOT :local:Work:CVS-Root Copy ENV:CVSROOT ENVARC: Two environment variables need to be set up. Most importantly, CVS will need your ID to write it into the log and revision files it creates. The Amiga port will query three environment variables for that information, in the following order: 'USER', 'LOGUSER' and 'USERNAME'. This means if the variable 'USER' is not set, it will proceed to check whether 'LOGUSER' is set, and so forth. You may have already configured these variables, but if you haven't, I suggest you set up the 'LOGUSER' variable, like this: SetEnv LOGUSER Copy ENV:LOGUSER ENVARC: Note that should be replaced by a mnemonic, nick name or short name that must not contain any blank space characters. You may want to configure the 'EDITOR' environment variable to invoke your preferred text editor when CVS requests that log messages are added for an update. If this variable is not set, CVS will default to invoke the 'Ed' editor. This can be problematic if you have installed 'CygnusEd' whose 'Ed' program detaches from the Shell that invoked it. When CVS invokes the editor, it expects it to return only when the user has finished editing the respective file. Here is an example configuration for CygnusEd: SetEnv EDITOR Ed -keepio And here is one for TurboText: SetEnv EDITOR TTX WAIT Don't forget to save the environment variable setting to make it permanent, like this: Copy ENV:EDITOR ENVARC: Finally, install the 'queue-handler' from Aminet and reboot your machine. When the system is again up and running, initialize the CVS repository like this: cvs init And that's all. Well, maybe you want to add a few default options to the configuration file CVS reads upon startup. That file should be placed in the 'CVSHOME:' directory and called '.cvsrc': Usage ----- I personally found the default CVS documentation to be rather confusing. If you don't know rather well what CVS is good for, the examples, the terminology, all this doesn't seem to make great sense. My introduction to CVS followed with Karl Fogel's book "Open Source Development with CVS" which describes in compact form what CVS is and how it may be used. I suggest that you consult the book (portions of which are available from 'www.coriolis.com') and/or the CVS documentation (which has been included with this archive in the 'cvs-1.11/doc' drawer) for hints and ideas on how to use the program. What many people fail to realize and what keeps them from using CVS in place of the revision control system they have used for years is that you do not need a networked CVS repository in order to use CVS. A local repository will do. In fact, I switched over most of my current software development projects to use a single local repository after I realized that CVS does much better what I had previously used RCS for. Notes on the implementation --------------------------- The Amiga port implements only the client side of the CVS system. This means that you can check out projects on remote servers but your local Amiga cannot be a CVS server itself. This feature was omitted deliberately since I could not find a safe and useful way to make CVS server mode work on the Amiga. AmigaOS is not a server operating system and shoehorning the code to make it work somehow would not have helped. If you need a CVS server, try a dedicated solution using, for example, 'NetBSD'. The Amiga port can communicate with the server using the remote shell protocol (rsh), and I have verified that the process works reasonably well with, for example, the public 'Samba' CVS repository. If you need a more secure method to communicate with the server ('rsh' is notoriously insecure and many systems no longer support it for precisely that reason) such as 'Kerberos IV' or 'Secure Shell' (ssh), you'll have a problem because there are no Amiga ports of these facilities available yet. CVS does not have a very sophisticated porting layer. Its file name semantics all stem from the Unix world and the 'OS/2', 'VMS' and 'Windows NT' ports merely resort to flipping slashes in file names, if necessary, when it comes to make a name fit the local system's semantics. I had to find a similar way to make the semantics work on the Amiga. What I did was to add a translation service in the Amiga specific code which knows how to translate names like '.' or '..'. But that's where it ends. Any more sophisticated naming schemes like 'foo/.././bar' may fail to translate properly. But then, those complex patterns should be pretty rare anyway. Unlike Heinz Wrobel's excellent 'RCS' port, this CVS port does not preserve Amiga file protection bits for files checked in. When you check in a project and check it out again, all file and directory protection bits will default to 'rwed', losing the 'archived', 'pure' and 'script' bits. The Amiga port will expand wild card patterns for file and directory names specified as command line parameters, such as "#?.c". The wild card pattern syntax is that of AmigaDOS. It is *not* the syntax of the standard regular expressions other GNU tools will use. You can access remote CVS repositories by means of a properly configured TCP/IP stack. This port requires that the stack complies to the AmiTCP V3 API definition, which all modern Amiga TCP/IP stacks do. It does not work with the INet-225 TCP/IP stack, though. When CVS resorts to calling external programs, a working 'PIPE:' device is required, which is not yet part of the AmigaOS Workbench distribution. Do not underestimate this. The program will fail or behave erratically without a working 'PIPE:' device. It is strongly recommended to download a working 'queue-handler', such as from Aminet. The source code for the Amiga port is included in this distribution. All you need to know before you can recompile this CVS port is described in the file 'README.AMIGA' which you can find in the 'source' directory. This is a 'single user' CVS port. There is just one single home directory (referred to as 'CVSHOME:') and your login name and ID are assumed to be the same (set in the 'USER', 'LOGUSER' or 'USERNAME' environment variables). There is no 'cvsbug' shell script or program included with this port. Contacting the author --------------------- If you have any further questions on this port, feel free to contact me: olsen@sourcery.han.de Or use my postal address: Olaf Barthel Brabeckstr. 35 D-30559 Hannover Federal Republic of Germany History ------- 08 February 2001: - Whoops. The fstat() replacement function did not get called and thus ended up trashing the protection bits of files checked out. - The current signal handler was not properly restored in the password entry routine. 07 February 2001: - The password query routine failed to store the password entered, rendering cvs almost entirely useless. The code was also vulnerable when receiving a ^C break signal. - Rewrote stat(), fstat(), lstat() and chmod() from scratch since the original implementations turned out to be fundamentally incompatible with how CVS would use file attribute bits. - Worked around another potential pitfall with the access() implementation. ============================= Archive contents ============================= Original Packed Ratio Date Time Name -------- ------- ----- --------- -------- ------------- 459204 240660 47.5% 08-Feb-01 10:28:16 cvs 10018 3286 67.1% 13-May-99 17:49:24 +BUGS 102665 35554 65.3% 08-Sep-00 13:28:02 +ChangeLog 28657 28657 0.0% 03-Dec-94 01:09:12 +ChangeLog.zoo 14981 5912 60.5% 08-Sep-00 13:28:02 +ChangeLog 3342 1434 57.0% 09-Jul-95 21:26:26 +clmerge.pl 1923 925 51.8% 12-Feb-97 10:34:52 +cln_hist.pl 5518 2236 59.4% 12-Feb-97 10:34:54 +commit_prep.pl 4530 1793 60.4% 12-Feb-97 10:34:54 +cvs2vendor.sh 5239 2368 54.8% 12-Feb-97 10:34:56 +cvs_acls.pl 1389 696 49.8% 12-Feb-97 10:34:56 +cvscheck.man 2264 841 62.8% 12-Feb-97 10:34:58 +cvscheck.sh 14003 5121 63.4% 12-Feb-97 10:35:00 +cvshelp.man 2447 1224 49.9% 12-Feb-97 10:35:00 +descend.man 2532 968 61.7% 12-Feb-97 10:35:02 +descend.sh 11398 4224 62.9% 09-Jul-95 21:26:36 +dirfns.shar 4002 1764 55.9% 08-Jun-95 17:42:02 +intro.doc 4263 1852 56.5% 25-Feb-00 13:47:34 +log.pl 14692 5030 65.7% 25-Feb-00 13:47:34 +log_accum.pl 2915 1303 55.3% 08-Sep-00 13:28:02 +Makefile.in 1875 1004 46.4% 12-Feb-97 10:35:04 +mfpipe.pl 4647 1842 60.3% 20-Feb-97 22:44:46 +rcs-to-cvs.sh 17623 6942 60.6% 10-Sep-98 08:41:40 +rcs2log.sh 3946 1276 67.6% 12-Feb-97 10:35:06 +rcs2sccs.sh 6573 2793 57.5% 09-Jul-95 21:02:06 +rcslock.pl 5029 2365 52.9% 14-Oct-98 15:52:18 +README 8294 3019 63.6% 24-Jan-00 12:08:38 +sccs2rcs.csh 12559 4982 60.3% 12-Jan-99 15:37:20 +COPYING 25337 9300 63.2% 12-Jan-99 15:37:20 +COPYING.LIB 2775 1133 59.1% 29-Aug-00 20:16:32 +DEVEL-CVS 127402 40870 67.9% 08-Sep-00 13:28:02 +ChangeLog 1253 673 46.2% 03-Dec-94 01:09:24 +ChangeLog.fsf 37553 13575 63.8% 12-Jan-99 15:37:04 +cvs-paper.ms 85412 33077 61.2% 19-Sep-00 12:01:40 +cvs-paper.ps 25401 4799 81.1% 19-Sep-00 16:19:04 +cvs.aux 6417 2609 59.3% 19-Sep-00 16:19:04 +cvs.info 49248 17174 65.1% 19-Sep-00 16:19:04 +cvs.info-1 48788 16652 65.8% 19-Sep-00 16:19:04 +cvs.info-2 49690 15591 68.6% 19-Sep-00 16:19:04 +cvs.info-3 50811 17458 65.6% 19-Sep-00 16:19:04 +cvs.info-4 50441 17233 65.8% 19-Sep-00 16:19:04 +cvs.info-5 40354 13326 66.9% 19-Sep-00 16:19:04 +cvs.info-6 48529 13063 73.0% 19-Sep-00 16:19:04 +cvs.info-7 42968 15539 63.8% 19-Sep-00 16:19:04 +cvs.info-8 35902 7356 79.5% 19-Sep-00 16:19:04 +cvs.info-9 920167 318198 65.4% 19-Sep-00 16:19:04 +cvs.ps 480547 161604 66.3% 29-Aug-00 20:16:32 +cvs.texinfo 2618 639 75.5% 19-Sep-00 16:19:06 +cvsclient.aux 867 464 46.4% 19-Sep-00 16:19:06 +cvsclient.info 24926 9269 62.8% 19-Sep-00 16:19:06 +cvsclient.info-1 39481 12130 69.2% 19-Sep-00 16:19:06 +cvsclient.info-2 28442 10034 64.7% 19-Sep-00 16:19:06 +cvsclient.info-3 226409 87329 61.4% 19-Sep-00 16:19:06 +cvsclient.ps 92910 31109 66.5% 29-Aug-00 20:16:32 +cvsclient.texi 16 16 0.0% 19-Sep-00 16:19:00 +CVSvn.texi 11325 4728 58.2% 23-Dec-98 11:16:24 +RCSFILES 345335 119816 65.3% 29-Aug-00 20:16:32 +FAQ 8912 4055 54.4% 29-Aug-00 20:16:32 +HACKING 16466 6551 60.2% 06-Dec-99 13:56:24 +INSTALL 8485 3582 57.7% 08-Sep-00 13:28:02 +ChangeLog 60139 20244 66.3% 03-May-00 13:47:46 +cvs.1 13383 4558 65.9% 13-Mar-96 17:59:10 +cvs.5 7127 3034 57.4% 29-Nov-99 15:26:02 +cvsbug.8 2822 1422 49.6% 02-Dec-97 17:15:06 +MINOR-BUGS 48167 18018 62.5% 30-Aug-00 16:58:24 +NEWS 2388 1188 50.2% 12-Nov-97 15:54:46 +PROJECTS 8219 3765 54.1% 29-Aug-00 20:16:32 +README 7227 3279 54.6% 05-May-00 10:00:34 +TESTS 40097 16418 59.0% 16-May-00 13:01:02 +TODO 954 513 46.2% 09-Sep-98 13:11:36 +ChangeLog 1516 810 46.5% 09-Sep-98 13:11:36 +Makefile.in 476 292 38.6% 09-Sep-98 13:11:36 +README 80207 23208 71.0% 03-Feb-01 14:44:20 cvs.1.man 17517 5120 70.7% 03-Feb-01 14:44:10 cvs.5.man 10689 4685 56.1% 08-Feb-01 10:29:56 README.AMIGA 17661 4947 71.9% 03-Feb-01 12:00:40 +amiga.diffs 7166 2051 71.3% 03-Feb-01 14:22:20 +_assert.c 4157 1379 66.8% 03-Feb-01 14:22:24 +_assert.h 48769 13085 73.1% 08-Feb-01 10:27:34 +amiga.c 6933 1801 74.0% 07-Feb-01 18:37:04 +amiga.h 1364 708 48.0% 03-Feb-01 12:01:32 +grp.h 1465 754 48.5% 03-Feb-01 12:01:40 +pwd.h 1406 729 48.1% 03-Feb-01 12:01:44 +signal.h 587 293 50.0% 03-Feb-01 12:02:12 +commifmt.h 970 576 40.6% 03-Feb-01 12:02:18 +file.h 1338 681 49.1% 03-Feb-01 12:02:26 +types.h 1232 639 48.1% 03-Feb-01 12:02:30 +wait.h 1307 678 48.1% 03-Feb-01 12:01:20 +utime.h 296 193 34.7% 07-Feb-01 16:35:12 +smakefile 8731 2253 74.1% 07-Feb-01 09:44:38 +config.h 2895 1502 48.1% 07-Feb-01 16:35:02 +smakefile 3682 1709 53.5% 07-Feb-01 16:34:56 +smakefile 1706 873 48.8% 03-Feb-01 15:00:58 +README.AMIGA 295 170 42.3% 03-Feb-01 12:40:24 +smakefile 23141 8065 65.1% 07-Feb-01 08:46:48 +filesubr.c 8065 3567 55.7% 01-Feb-01 17:44:24 +options.h 12198 4203 65.5% 18-Dec-00 20:58:44 +run.c 5710 2445 57.1% 07-Feb-01 16:35:08 +smakefile 4108 1717 58.2% 07-Feb-01 16:35:26 +smakefile -------- ------- ----- --------- -------- 4157825 1540595 62.9% 09-Feb-101 03:06:46 99 files