---
name: "cvssuck"
section: "1"
platform: "linux"
package: "cvssuck"
version: "0.3.cvs20060124-2"
release: "Debian 7 (Wheezy)"
platforms: ["linux"]
url: "https://new.carta.tech/cvssuck"
---

# cvssuck(1)

inefficient cvs repository grabber using cvs command

## NAME

cvssuck - inefficient cvs repository grabber using cvs command

## SYNOPSIS

**cvssuck** \[**-h**\] \[**-b**\] \[**-s**\] \[**-v**\] \[**-D** *debug-option*,...\] *cvsroot* \[**-o** *output-directory\|**-O*** *output-base*\] \[**-l** *lock-directory\|**-L*** *lock-base*\] *module ...*

## DESCRIPTION

**CVSsuck** is a mirroring tool for cvs repositories. Unlike other tools such as CVSup or rsync, it uses cvs command to access the repository. So, it works well with remote repositories without a special server or shell account. However it is inefficient and not perfect because cvs client/server protocol is not designed for mirroring. If a server provides special way to grab a repository, you shouldn't use **CVSsuck**.

## OPTIONS

- **-h**

  prints help message.

- **-b**

  makes **CVSsuck** to traverse directories in breadth first. **CVSsuck** traverses directory in depth first by default.

- **-s**

  specifies skeleton mode. In this mode, **CVSsuck** grabs only  first revision of the trunk, 1.1, branchpoints, head of branches and tagged revisions. Note that first two (first revision of the trunk and 1.1) is identical in usual case.

- **-v**

  makes CVSsuck verbosely. This is same as  \`**-D command,attic,leavetmp**'.

- **-D** *debug-option***\\f1,...**

  specifies debug options. Available debug options are listed by \`**cvssuck -h**'.

- **-o** *output-directory*

  specifies the directory to store grabbed repository. A remote RCS file  *module*/*dir*/*file*,v in *cvsroot* will be stored in *output-directory*/*dir*/*file*,v.

- **-O** *output-base*

  specifies the base directory to store grabbed repository. A remote RCS file  *module*/*dir*/*file*,v in *cvsroot* will be stored in *output-base*/*module*/*dir*/*file*,v. **-o** and **-O** is exclusive. The last specified before *module* is effective. By default, **CVSsuck** behaves as that current directory is specified with **-O**.

- **-l** *lock-directory*

  specifies the directory of CVS style lock.

- **-L** *lock-base*

  specifies the base directory of CVS style lock. **-l** and **-L** is exclusive. A lock directory should be specified after an output directory. The last specified before *module* after an output directory is effective. By default, **CVSsuck** assumes a lock directory is same as output directory.

## EXAMPLES

**% cvssuck :pserver:anonymous@cvs.m17n.org:/cvs/cvs cvssuck**

grabs the module **cvssuck** in the repository **:pserver:anonymous@cvs.m17n.org:/cvs/cvs** into the directory **cvssuck.**

**% cvssuck :pserver:anonymous@cvs.m17n.org:/cvs/cvs cvssuck cvs-info**

grabs the modules **cvssuck** and **cvs-info.**

**% cvssuck :pserver:anonymous@cvs.m17n.org:/cvs/cvs -O $HOME/.cvsroot cvssuck**

grabs the module **cvssuck** into **$HOME/.cvsroot/cvssuck.**

**% cvssuck :pserver:anonymous@cvs.m17n.org:/cvs/cvs -O $HOME/.cvsroot -L $HOME/.cvslock cvssuck**

grabs the module **cvssuck** into **$HOME/.cvsroot/cvssuck** with the lock directory  **$HOME/.cvslock/cvssuck.**

**% cvssuck :pserver:anonymous@cvs.m17n.org:/cvs/cvs -o $HOME/.cvsroot/cvs/suck cvssuck**

grabs the module **cvssuck** into **$HOME/.cvsroot/cvs/suck.**

**% cvssuck -s :pserver:anonymous@cvs.m17n.org:/cvs/cvs cvssuck**

grabs needy revisions (skeleton) of the module **cvssuck.**

## SEE ALSO

http://cvs.m17n.org/~akr/cvssuck/

**cvs**(**1**), **rcs**(**1**), **cvsup**(**1**), **rsync**(**1**)

## AUTHORS

Tanaka Akira \<akr@m17n.org\>.

## BUGS

It's inefficient.

It's not perfect because revisions stated as \`dead' cannot be retrieved. However it is not observable until the state is changed by \`cvs admin -s'.
