Introduction:
-------------

cvsfs is a filesystem which allows to mount a CVS repository like any other
filesystem. This allows access to the files managed in CVS using any tool
which is capable accessing files. There is no need to modify the tools to
be CVS capable.


Usage:
------

cvsfs-fuse uses the kernel module and link library provided by FUSE. To be
able to use it you must first load the fuse kernel module. Refer to the
FUSE documentation on how to do that.

Then you can mount the file system:

  cvsfs-fuse <mountpoint> <options>

Start cvsfs-fuse without any parameters to get a explanation which options
can be used.

After the filesystem was mounted you get a writeable space at the mount
point. No repository is linked in.

To link in a CVS repository a seperate tool is provided - cvsfsctl. The
execution prototype is:

  cvsfsctl setview <mountpoint> <repository> [<module> [<label>]]

A repository is defined like done via the cvs-utility in the '-d' option
or in the CVSROOT environment variable. The specification is:

  [:<method>:][<userid>[:<password>]@]<server>[:port]<cvsroot>

A sample may look like this:

  :pserver:anonymous@127.0.0.1/var/cvsroot

If the <module> parameter is not given '.' will be used.
The default for <label> (if omitted) is 'HEAD'.

After executing the cvsfsctl command you should see the contents of the
CVS repository you have specified.

If any errors occur they will be posted to the system log. Under Linux this
file usually is named /var/log/messages.


Background:
-----------

cvsfs-fuse uses a directory ('.cvsfs') in the users home for caching
purposes. 

Layers:

2: Checked-Out files --> ~/.cvsfs/<server>/<cvsroot>/checkout
1: CVS files         --> ~/.cvsfs/<server>/<cvsroot>/cvs
0: private files     --> ~/.cvsfs/private


Refresh cycle:
--------------

The CVS tree reading is executed in a background thread. The CVS tree is read
periodically. The period is dependent on the time required the thread needed
to read the tree the last time. The delay is actually hard code to be ten times
the last tree read took.
For example: If reading the tree took 1.7 seconds the background thread waits
20 seconds (1.7 seconds rounded up --> 2 * 10 = 20) before the next CVS tree
reading attempt was started.
