                               CVSU - CVS Utilities

PLEASE NOTE, THAT ALTHOUGH THIS SOFTWARE WORKS FOR ITS AUTHOR, IT MAY OR
MAY NOT WORK FOR YOU. PLEASE BE CAREFUL. SOME OF THE INCLUDED FILES MAY
REMOVE RESULTS OF YOUR WORK.
PLEASE MAKE SURE THAT YOU UNDERSTAND HOW THEY WORK BEFORE YOU USE THEM.

CVSU is licensed under the terms of the GNU Public License, version 2.
See http://www.gnu.org/copyleft/gpl.html for details.

The homepage of CVSU is
http://www.red-bean.com/cvsutils/

The original author of CVSU is
 Tom Tromey <tromey@cygnus.com>

Currently CVSU is maintained by
 Pavel Roskin <proski@gnu.org>


				Introduction

The idea of CVS Utilities is to facilitate working with the files in the
working directory of a developer using CVS (Concurrent Versions System)

From the point of view of CVS, working directories have low value,
since they can easily be recreated using the "cvs checkout" command.
Also the "cvs update" command will show the status of the files, i.e.
whether they have been modified, added or removed.

CVS in it's current state is a client-server system that does most of its
work on the server side. CVS provides only few (if any) means for managing
the working directory without communicating with the server.

There are, however, several reasons why such means are necessary.
- There is enough information on the client side to create fast tools
  for sorting and purging the working directory without contacting the
  CVS server
- Checking out a big module over a slow line can take too much time
- There should be support for disconnected operations
- CVS poses certain unnecessary restrictions on read-only users, e.g.
  "cvs add" command doesn't work for them

Following scripts are included:


				cvsu

cvsu is "cvs update offline"
It lists the files found in the current directory (or in the directories
which you specify).
Following is taken into account:

Attributes of the file
Information about the file in CVS/Entries
Timestamp of the file compared to the timestamp stored in CVS/Entries

Run "cvsu --help" to see supported command line options.
The options can be abbreviated. This functionality is provided by Perl,
and can vary from one machine to another.


				cvsco

cvsco is "cruel checkout"
 In other words, it removes results of compilation and discards local
changes.
 It deletes all the files except listed unmodified ones and checks out
everything which seems to be missing.
 Please note, that cvsco doesn't update files which haven't been modified
locally. It only reloads missing files and files which it erases.


				cvsdiscard

cvsdiscard is "discard my changes"
 In other words, it discard local changes but keeps results of compilation
 It works like "cvsco", but it only deletes files which are likely to cause
merge conflicts


				cvspurge

cvspurge is cvs-based "make maintainer-clean"
 In other words, it removes results of compilation but keeps local changes
intact
 It removes unknown files, but keeps changes in the files known to CVS.
Unknown directories are also kept


				cvsdiff

cvsdiff is an offline "cvs diff"
 "cvsdiff" tries to locate the backup copies of the modified files. If they
can be found, cvsdiff compares them with the current version using "diff"
 Only those backup copies are used, that have the modification date equal
the date listed in CVS/Entries for the modified file
 "cvsdiff" patches the diff output to make it more robust to apply.
An exception is made for files named "ChangeLog" - in this case "diff" will
be instructed to omit all context lines, so that the patch can be applied
even if other changes have been written to the ChangeLog.
 Also the added files are handled properly. The header of the "diff" output
is patched in such way, that at least GNU patch will create a new file when
the resulting patch is applied and remove that file when the patch is
reverted


				cvschroot

cvschroot makes it possible to change CVS/Root in all subdirectories to
the given value.
Currently the only argument accepted is the new CVSROOT value.
Old-style CVS/Repository files that contain the full path to the repository
are updated to reflect the change. New-style CVS/Repository don't need to
be changed.
If the environment variable CVSROOT is defined, it overrides the contents of
CVS/Root. In other words, it is treated as the _old_ CVS root


				cvsrmadm

cvsrmadm removes all CVS directories in the project
It is safer if you occasionally make mistakes in the "find" commands


				cvsdo

cvsdo simulates some of the CVS commands (currently add and remove) without
any access to the CVS server.
You can now create diffs with "cvs diff -N", and all removed and added
files will be mentioned there as such, even if you only have read-only
access to the repository
