 ------
 SCM Implementation: CVS
 ------
 Wim Deblauwe
 ------
 2008-09-02
 ------

~~ Licensed to the Apache Software Foundation (ASF) under one
~~ or more contributor license agreements.  See the NOTICE file
~~ distributed with this work for additional information
~~ regarding copyright ownership.  The ASF licenses this file
~~ to you under the Apache License, Version 2.0 (the
~~ "License"); you may not use this file except in compliance
~~ with the License.  You may obtain a copy of the License at
~~
~~   http://www.apache.org/licenses/LICENSE-2.0
~~
~~ Unless required by applicable law or agreed to in writing,
~~ software distributed under the License is distributed on an
~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
~~ KIND, either express or implied.  See the License for the
~~ specific language governing permissions and limitations
~~ under the License.

~~ NOTE: For help with the syntax of this file, see:
~~ http://maven.apache.org/doxia/references/apt-format.html

SCM Implementation: CVS

* General Info

    Link: {{https://www.cvshome.org/}}

    License: GPL

* SCM URL

  The general format for a CVS SCM URL is

-------
scm:cvs<delimiter><method>[<delimiter>username_password_servername_port]<delimiter>path_to_repository<delimiter>module_name
-------

  As delimiter you can use either colon ':' or, if you use a colon for one
  of the variables (e.g. a windows path), a pipe '|'.

  The following methods are supported:

  * <<<ext>>>, connecting to a server using an external rsh program

  * <<<local>>>, connecting to the local file system

  * <<<lserver>>>, connecting to a local server

  * <<<pserver>>>, connecting to a password-authenticating server

  * <<<sspi>>>, secure authentication (less supported by clients and servers, may require using native implementation, for more details see "How to choose the CVS provider implementation")

  * <<<sserver>>>, SSL connection method for CVS (only if cvs_native is used i.e. using -Dmaven.scm.provider.cvs.implementation=cvs_native with Maven)

  []

  Here are the format for each of the supported methods, using colon as
  delimiter.

-------
scm:cvs<delimiter>local<delimiter>path_to_repository<delimiter>module_name
scm:cvs<delimiter>lserver<delimiter>[username@]servername[<delimiter>port]<delimiter>path_to_repository<delimiter>module_name
scm:cvs<delimiter>pserver<delimiter>[username[<delimiter>password]@]servername[<delimiter>port]<delimiter>path_to_repository<delimiter>module_name
scm:cvs<delimiter>ext<delimiter>[username@]servername[<delimiter>port]<delimiter>path_to_repository<delimiter>module_name
scm:cvs<delimiter>sspi<delimiter>[username@]host<delimiter>path<delimiter>module
-------

* Examples

-------
scm:cvs:pserver:anoncvs:@cvs.apache.org:/cvs/root:module
scm:cvs|pserver|username@localhost|C:/Program Files/cvsnt/repositories|module_name
scm:cvs:ext:username@cvs.apache.org:/cvs/root:module
scm:cvs:local:/cvs/root:module
scm:cvs:sspi:cvs.apache.org:2222:/cvs/root:module
-------

  If you use anonymous access, with an empty password, you need to add a colon (:) between the username and "@" like it's done in the first example.
  This tells the SCM provider that there is a password and that it is empty.

* How to choose the CVS provider implementation

  By default, the pure java CVS provider is used (which may not support SSPI protocol), so you don't need a cvs client installed on your machine.
  In some case, you can want to use the installed CVS client (for example, CVSNT). To do it, you can change the implementation to use by settings the
  '<<<maven.scm.provider.cvs.implementation>>>' system property:

-------
-Dmaven.scm.provider.cvs.implementation=cvs_native
-------

* Provider Configuration

  The provider configuration is defined in <<<${user.home}/.scm/cvs-settings.xml>>>

** Compression level

  You can define the compression level in the provider configuration file (default value is 3). If compression level is equals to 0, there won't be any compression.

-------
<cvs-settings>
  <compressionLevel>5</compressionLevel>
</cvs-settings>
-------

  If you don't want compression, you can define the system property '<<<maven.scm.cvs.use_compression>>>'.

-------
mvn -Dmaven.scm.cvs.use_compression=true scm:changelog
-------

** .cvsrc file

  By default, maven-scm doesn't use <<<.cvsrc>>> file. If you want to use it, you should allow it inprovider configuration file.

-------
<cvs-settings>
  <useCvsrc>true</useCvsrc>
</cvs-settings>
-------

** Trace CVS commands

  By default, maven-scm doesn't use '<<<-t>>>' global option of cvs command line to trace. If you want to use it, add the following lines in your provider configuration file:

-------
<cvs-settings>
  <traceCvsCommand>true</traceCvsCommand>
</cvs-settings>
-------

** Temporary CVS files

  If you want to store CVS temporary files in a specific directory instead of default or value define in <<<$TMPDIR>>>, add the following lines in your provider configuration file:

-------
<cvs-settings>
  <temporaryFilesDirectory>your_directory</temporaryFilesDirectory>
</cvs-settings>
-------

** Internal CVS variables

  If you want to add some internal CVS variables to the cvs command line, add the following lines in your provider configuration file:

-------
<cvs-settings>
  <cvsVariables>
    <key1>value1</key1>
    <key2>value2</key2>
  </cvsVariables>
</cvs-settings>
-------
