---
name: "VCS"
section: "3pm"
platform: "linux"
package: "libvcs-perl"
version: "0.14-4"
release: "Debian 4.0 (Etch)"
platforms: ["linux"]
url: "https://new.carta.tech/VCS"
---

# VCS(3pm)

VCS - Library for generic Version Control System access in Perl

```
    use VCS;
    $file = VCS::File->new($ARGV[0]);
    print $file->url, ":\n";
    for $version ($file->versions) {
        print $version->version,
              ' was checked in by ',
              $version->author,
              "\n";
    }
```

`"VCS"` is an API for abstracting access to all version control systems from Perl code. This is achieved in a similar fashion to the `"DBI"` suite of modules. There are "container" classes, `"VCS::Dir"`, `"VCS::File"`, and `"VCS::Version"`, and "implementation" classes, such as `"VCS::Cvs::Dir"`, `"VCS::Cvs::File"`, and `"VCS::Cvs::Version"`, which are subclasses of their respective "container" classes. The container classes are instantiated with URLs. There is a URL scheme for entities under version control. The format is as follows:

```
    vcs://localhost/VCS::Cvs/fs/path/?query=1
```

The "query" part is ignored for now. The path must be an absolute path, meaningful to the given class. The class is an implementation class, such as `"VCS::Cvs"`. The "container" classes work as follows: when the `"new"` method of a container class is called, it will parse the given URL, using the `"VCS->parse_url"` method. It will then call the `"new"` of the implementation's appropriate container subclass, and return the result. For example,

```
    VCS::Version->new('vcs://localhost/VCS::Cvs/fs/path/file/1.2');
```

will return a `"VCS::Cvs::Version"`. An implementation class is recognised as follows: its name starts with `"VCS::"`, and `"require "VCS/Classname.pm""` will load the appropriate implementation classes corresponding to the container classes.\
 **VCS-\>parse\_url** This returns a four-element list:

```
    ($hostname, $classname, $path, $query)
```

For example,

```
    VCS->parse_url('vcs://localhost/VCS::Cvs/fs/path/file/1.2');
```

will return

```
    (
        'localhost',
        'VCS::Cvs',
        '/fs/path/file/1.2',
        ''
    )
```

This is mostly intended for use by the container classes, and its interface is subject to change.\
 **VCS-\>class\_load** This loads its given implementation class. This is mostly intended for use by the container classes, and its interface is subject to change. Please refer to the documentation for VCS::Dir, VCS::File, and VCS::Version; as well as the implementation specific documentation as in VCS::Cvs, VCS::Rcs. Much of this information is incorrect, the current up to date version of VCS is held on a different CVS server now, i'm going to make things a little more public and then update the below information - thanks for your patience. VCS.pm and its friends are available from CPAN.  There is a web page at:

```
    http://www.astray.com/VCS/
```

as well as a sourceforge project page at:

```
    http://sourceforge.net/projects/vcs/
```

There is currently a mailing list about VCS. Go to the following webpage to subscribe to it:

```
    http://www.astray.com/mailman/listinfo/vcs
```

There is a web archive of the mailing list at:

```
    http://www.astray.com/pipermail/vcs/
```

General queries should be made directly to the mailing list. Greg McCarroll \<greg@mccarroll.org.uk\> Leon Brocard Thanks to the following for patches,

```
    Richard Clamp
    Pierre Denis
    Slaven Rezic
```

Copyright (c) 1998-2003 Leon Brocard & Greg McCarroll. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. VCS::Cvs, VCS::Dir, VCS::File, VCS::Rcs, VCS::Version.
