CVSup-15.2 is now available

John Polstra jdp at
Sun Sep 28 15:15:34 PDT 1997

                     Announcing CVSup 15.2
Release 15.2 of CVSup, the CVS-aware network distribution system, is now

Where to Get CVSup
CVSup is free software.  It is available from the following FTP sites:             (California) (Germany)     (slow; avoid if possible)

Full sources as well as FreeBSD binaries are available:

  cvsup-bin-15.2.tar.gz		FreeBSD static binaries for the client + GUI
  cvsup.nogui-bin-15.2.tar.gz	FreeBSD static binaries for the client (no GUI)
  cvsupd-bin-15.2.tar.gz	FreeBSD static binaries for the server
  cvsup-15.2.tar.gz		Sources **

The MD5 file signatures for these files are:

  MD5 (cvsup-bin-15.2.tar.gz) = e92c5afa6fc51894d8edd97d2b29247c
  MD5 (cvsup.nogui-bin-15.2.tar.gz) = 00a8a2911cd7e4caf8a8c3d7c5dac961
  MD5 (cvsupd-bin-15.2.tar.gz) = 1801d60628dbd7b731402a24faa5e6b8
  MD5 (cvsup-15.2.tar.gz) = c6db5e798f8136a646947d4beefe6e35

An updated port will appear in the FreeBSD ports and packages
collections soon:



The FreeBSD package now depends only on the "modula-3-lib" package,
a subset of the Modula-3 installation consisting of only the shared
libraries.  Because of this, you can now install and use the "cvsup"
package in a reasonable amount of disk space.  The package is much
smaller than the statically linked binary distribution, so updates
to new versions of CVSup should be more convenient now.  The package
is the recommended distribution for binary-only users.  The static
binary distributions may be phased out soon.

If you want SOCKS support, you must also install the "modula-3-socks"
port or package:



SOCKS is supported only under FreeBSD, and only with dynamically linked
executables.  The static binary distributions do not support SOCKS.

** If you wish to build CVSup from the sources, be sure to read the
discussion further on in this announcement.

Compatibility with Previous Releases
This version is believed to interoperate properly with all earlier
public releases of CVSup.  It is always a good idea to upgrade to
the latest release.  Bugs are fixed, features are added, and
robustness is improved.  Otherwise, I wouldn't bother with it.

What Has Changed Since the Previous Release?
Notable changes in release 15.2:

  Changed the expansion of the "CVSHeader" RCS keyword so that
  it deletes "Attic/" from the pathname if it is present.  This
  prevents the expansion from changing on a branch simply because
  the file was killed or brought back to life on the main branch.  A
  similar change has been made to FreeBSD's RCS and CVS systems.

  Fixed the handling of file permissions in checkout mode.  Now each
  checked out file's execute bits are set based on the permissions
  of the corresponding RCS file and the client's umask setting.
  This means that checked out shell scripts and similar files will
  be executable as they should be.

  Fixed the general policy for dealing with file permissions when
  "preserve" is not set in the supfile.  Formerly, the permissions
  were set when CVSup first created each file, and then ignored
  after that.  Now, CVSup checks the permissions on each update, and
  sets them properly within the restrictions imposed by the client's
  umask setting.

  Made checkout-mode updates more robust against evil manipulations
  of RCS files by CVS repository administrators.  The client now
  records the revision date as well as the revision number for each
  checkout-mode file.  If the CVS administrator replaces an RCS file
  with a completely different RCS file, CVSup will notice that the
  dates of corresponding revision numbers are different and realize
  that the client's revision m.n doesn't correspond to the server's
  idea of what revision m.n is.  It will do a full checkout of the
  affected file instead of trying to edit it based on bad information.
  Formerly, this sort of thing could cause assertion failures and
  other embarrassments.

  Fixed a bug in the negotiation of file attribute support which could
  cause an assertion failure if "preserve" mode was used between a
  server [or client] running under FreeBSD and a client [or server]
  running under a non-FreeBSD OS such as Linux.

  Eliminated this server warning message: "Could not generate edits
  for foo,v -> 36: Non-existent revision number -- attempting full checkout".  The message was too scary,
  and it typically didn't represent a situation that required human

  Fixed several portability problems, based on experiences with HP-UX
  10.20, Linux, Digital Unix, and SunOS.

  Improved the error messages emitted by the client when a corrupted
  or truncated "checkouts" file is detected.  They now suggest what
  to do about it.  Also eliminated an assertion failure that could
  arise in this situation.

  Added extra validity checks for the deltas received from the server,
  to ensure that the edits will apply cleanly to the client's file
  before attempting to apply them.  This eliminates a few potential
  assertion failures.

What Is CVSup?
CVSup is a software package for distributing and updating collections
of files across a network.  CVSup is specifically tailored to
distributing CVS repositories.  By taking advantage of the special
properties of the files contained in CVS repositories, CVSup is
able to perform updates much faster than traditional systems.  It is
especially valuable for people with slow Internet connections.

CVSup parses and understands the RCS files making up a CVS repository.
When updates occur, CVSup extracts new deltas directly from the RCS
files on the server and edits them into the client's RCS files.
Likewise, CVSup notes the addition of new symbolic tags to the files
on the server and sends only the new tags to the client.

CVSup is able to merge new deltas and tags from the server with deltas
and tags added locally on the client machine.  This makes it possible
for the client to check local modifications into his repository
without their being obliterated by subsequent updates from the server.
Note: Although this feature is fully implemented in CVSup, it will
probably not be practical to use it until some small changes have been
made to CVS.

In addition to distributing the RCS files themselves, CVSup is able to
distribute specific checked-out versions.  The client can specify a
symbolic tag, a date, or both and CVSup will extract the appropriate
versions from the server's CVS repository.  Checked-out versions do
not need to be stored on the server since CVSup can extract any
version directly from the CVS repository.

If the client has an existing checked-out tree, CVSup will apply the
appropriate edits to update the tree or transform it into the
requested version.  Only the differences between the existing version
and the desired version are sent across the network.

To update non-RCS files, CVSup uses the highly efficient rsync
algorithm, developed by Andrew Tridgell and Paul Mackerras.

CVSup uses lightweight processes (threads) to implement a streaming
protocol across the network.  This completely eliminates the delays
associated with the lock-step, request-reply form of communication
used by many existing protocols, such as sup and NNTP.  Information
is transferred at the full available speed of the network in both
directions at once.  Network latency and server response delays
are rendered practically irrelevant.

CVSup uses the "zlib" compression package to optionally compress all
communications.  This provides an additional 65-75% compression, on
top of the diff-based compression already built into CVSup.

For efficiency, all processing is built into the CVSup package
itself.  Neither the client nor the server executes any other

For further information about how CVSup works, see the (somewhat out
of date) "Blurb" document in the CVSup distribution.

Using CVSup to Maintain FreeBSD Sources
CVSup servers are currently running at about 20 mirror sites around
the world.  For an up-to-date list of them, see:

Using CVSup, you can easily receive or update any of the standard
FreeBSD source releases, namely, "cvs", "current", and "stable".
The manual page for cvsup(1) describes how to do that.  For more detailed
instructions, see the section on CVSup in the FreeBSD Handbook:

Building CVSup from the Sources
CVSup is written in Modula-3, a modern, compiled, object-oriented
language.  Modula-3 integrates threads, exceptions, and garbage
collection, providing an ideal vehicle for this sort of application.
Without Modula-3, CVSup would almost certainly not exist today.

If you wish to build CVSup from the sources, you will first need
to install the free Modula-3 compiler and runtime libraries from
DEC SRC.  A port is available in the FreeBSD ports collection, in
"lang/modula-3".  The corresponding package is, of course, available
in the packages collection.

You will also need version 1.0.4 or later of the "zlib" library.
In FreeBSD-2.1.6 and later releases, this library has been incorporated
into the system sources, in "src/lib/libz".  Prior to that, a
FreeBSD port was available in "devel/libz" of the FreeBSD ports
collection.  For other sources of this library, see the "Install"
file.  Do not try to use versions earlier than 1.0.4.

To build the entire system from source under FreeBSD, simply type
"make" in the top-level directory.  (That's the directory that has
sub-directories named "client" and "server", among others.)  To
force the executables to be statically linked, set the environment
variable "M3FLAGS" to "-DSTATIC".  To build the client without the
GUI (e.g., if you don't have the X Window System installed on your
machine), set it to "-DNOGUI".  To do both of these things, set the
environment variable to "-DSTATIC -DNOGUI".

On non-FreeBSD platforms, you will probably need to build each
component by hand.  (The Makefiles are quite FreeBSD-specific.)
Simply chdir into each of the following subdirectories in the given
order and type "m3build":


To build statically linked executables, add "-DSTATIC" to each
"m3build" command.  To build the client without the GUI (e.g., if
you don't have the X Window System installed on your machine) add

Portability Issues
I intend for CVSup to be portable to most POSIX systems.  Earlier
releases have been run on a number of different platforms, including
FreeBSD, Linux, HP-UX, SunOS, Solaris, and DEC OSF/1 ALPHA.  In the
current release I have attempted to increase rather than decrease

Anybody who succeeds in porting CVSup to other systems is encouraged
to send his changes to <cvsup-bugs at>.  As long as the
changes are reasonably palatable, they will be incorporated into
future CVSup releases.

CVSup uses several POSIX-specific functions which may make it more
of an effort to port the package to non-POSIX systems such as Win32.
These functions include mmap, fork, syslog, stat, and chmod, among

Status of this Release
CVSup was first released publicly in August of 1996.  Since then
it has seen heavy use, and it has been quite stable.  Like all
software, though, it is not perfect.  Please be prepared to find
bugs -- without a doubt, there are some.  Please report bugs to
<cvsup-bugs at>.

John Polstra, <jdp at>

Copyright 1996-1997 John D. Polstra
$Id: Announce,v 1.28 1997/09/27 20:43:27 jdp Exp $

More information about the freebsd-announce mailing list