I am sponsoring this FastTrack for Maxim Kartashev. Mans pages are included in the case's materials directory.
Thanks pete 1. Introduction This project proposes to add the source code management (SCM) system CVS[1] to the SFW consolidation for delivery on OpenSolaris/Indiana. Since CVS is externally maintained open source software, the SFW consolidation is a natural choice. This project requests a Minor release binding. 2. Background and motivation One of Indiana's (a.k.a OpenSolaris Developer Preview)[2] targets is to support software development on Solaris OS. The latter almost always requires use of SCM. CVS is an open-source version control system, widely used by many software developers, including Sun (for example, NetBeans developers used CVS to manage sources until recently). Being in development for about 20 years, CVS is rather stable and platform-independent. Although loosing popularity these days, it still provides familiar interface and services such as sourceforge.net[3] continue to support CVS-based development. The most recent version of CVS as the time of this writing is 1.12.13. The product was last updated by the community 2005-10-03 and latest changes are limited to bug fixes only. 3. Architecture CVS uses client-server architecture: server stores project files and history of changes (the repository), clients connect to the server in order to obtain (check out) a complete copy of the project and, after modifying files, check them back in. Typically, the client and server connect over a LAN or over the Internet, but client and server may both run on the same machine. When remote repository is used (most common case), clients can connect to it and perform authentication using two methods - "external" and "pserver". External means that cvs will use external program specified in $CVS_RSH environment variable (default is 'ssh') to start a program specified by $CVS_SERVER (default is 'cvs') on a remote machine. The command line looks like this: $CVS_RSH -l <username> <hostname> $CVS_SERVER server After cvs is started on the remote machine, data are transmitted through standard input and output. The other connection method, "pserver" or password server, requires cvs daemon started on a remote machine. The same executable is used on both sides. Clients connect to port 2401 (configurable) and server performs authentication based on passwd file located in the repository client wishes to connect to. This file contains passwords encrypted according to standard crypt(3C) function. Common practice is to log in to a repository first, in which case CVS stores password (trivially scrambled) in $HOME/.cvspass. Upon successul login, subsequent cvs commands won't ask for a password. CVS is about 70,000 lines of C code. It is released under version 1 of the GPL. This project depends on PSARC/2006/537[4] to provide (optional) compression of the data being transmitted. It also uses ssh (PSARC/2001/212) and rsh; both are theoretically optional, but used frequently in real life. 4. Documentation CVS comes with manual pages describing commands and providing examples. These manual pages are installed in /usr/share/man/man{1,5} The other source of documentation is a book named "Version Management with CVS"[5]. 5. Interfaces Exported Interface Stability Notes ------------------ --------- ----- SUNWcvs Committed Package name. /usr/bin/cvs Committed Executable location. $HOME/.cvsrc Committed Path to user config file. <repository>/CVSROOT Committed Path to the repository config files. <working dir>/*/*/CVS Committed Path to the working directory information files. <working dir>/*/*/CVS/Root Committed Path to the file that contains the path to the current repository. <working dir>/*/*/CVS/Repository Committed Path to the file containing the directory within the repository, which the current directory corresponds with. <working dir>/*/*/CVS/Entries Committed Contains the file/dir list of the current directory. <working dir>/*/*/CVS/Entries.Log Committed Backup copy of Entries file. <working dir>/*/*/CVS/Entries.Backup Committed Backup copy of Entries file. <working dir>/*/*/CVS/Entries.Static Committed Backup copy of Entries file. <working dir>/*/*/CVS/Tag Committed Contains per-directory sticky tags or dates. <working dir>/*/*/CVS/Notify Committed Stores notifications which have not yet been sent to the server. <working dir>/*/*/CVS/Notify.tmp Committed Backup copy of Notify. <working dir>/*/*/CVS/Base/ Committed Stores the original copy of file that is being edited by "edit" command. <working dir>/*/*/CVS/Baserev Committed Contains the revision for each file stored in the Base/ directory. <working dir>/*/*/CVS/Baserev.tmp Committed Backup copy of Baserev file. <working dir>/*/*/CVS/Template Committed Contains the template specified by the rcsinfo file. <repository>/CVSROOT/cvsignore Committed Path to the file with per-repository list of ignored files. $HOME/.cvsignore Committed Path to the file with per-user list of files to ignore. <working dir>/*/*/.cvsignore Committed Path to the file with list of ignored files. Only applies to the directory that contains it. cvs commandline Volatile Options, cvs commands and their options. cvs add Volatile Command. cvs admin (rcs) Volatile Command. cvs annotate Volatile Command. cvs checkout (co, get) Volatile Command. cvs commit (ci) Volatile Command. cvs diff Volatile Command. cvs edit Volatile Command. cvs editors Volatile Command. cvs export Volatile Command. cvs history Volatile Command. cvs import Volatile Command. cvs init Volatile Command. cvs log Volatile Command. cvs login Volatile Command. cvs logout Volatile Command. cvs ls Volatile Command. cvs pserver Volatile Command. cvs rannotate Volatile Command. cvs rdiff (patch) Volatile Command. cvs release Volatile Command. cvs remove Volatile Command. cvs rlog Volatile Command. cvs rls Volatile Command. cvs rtag Volatile Command. cvs server Volatile Command. cvs status Volatile Command. cvs tag Volatile Command. cvs unedit Volatile Command. cvs update Volatile Command. cvs version Volatile Command. cvs watch Volatile Command. cvs watchers Volatile Command. CVSIGNORE Committed Environment variable. CVSWRAPPERS Committed Environment variable. CVSREAD Committed Environment variable. CVSREADONLYFS Committed Environment variable. CVSUMASK (client side) Uncommitted Environment variable. CVSUMASK (server side) Committed Environment variable. CVSROOT Committed Environment variable. CVSEDITOR Committed Environment variable. CVS_RSH Committed Environment variable. CVS_SERVER Committed Environment variable. CVS_PASSFILE Committed Environment variable. CVS_CLIENT_PORT Committed Environment variable. CVS_PROXY_PORT Committed Environment variable. CVS_RCMD_PORT Committed Environment variable. CVS_CLIENT_LOG Committed Environment variable. CVS_SERVER_SLEEP Committed Environment variable. CVS_IGNORE_REMOTE_ROOT Committed Environment variable. CVS_LOCAL_BRANCH_NUM Committed Environment variable. CVS_PID Committed Environment variable. Return status (except diff command) Committed Return status. Return status of diff command Volatile Return status. All commands are marked Volatile after ChangeLog examination. Command actions do not change at all, but every command has additional modifiers (or options) and interpretation of the latter could be changed (and actually did) in a minor release. One example is interpretation of '-r tag1::tag2' option of log command that changed in a minor release. Almost all environment variables are marked as Committed because they have not changed since they first appeared in CVS. Uncommitted environment variables are marked as such because the documentation ("Version Management with CVS") clearly stated that future versions might not use those. Imported Interface Specified in ------------------ ------------ zlib PSARC/2006/537 ssh PSARC/2001/212 6. References 1. http://cvs.nongnu.org/ 2. http://www.opensolaris.org/os/project/indiana/ 3. http://alexandria.wiki.sourceforge.net/CVS+-+Version+Control+for+Source+Code 4. PSARC/2006/537 Solaris libz (zlib) upgrade to 1.2.3 5. http://ximbiot.com/cvs/manual/