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/