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

# VCS::Dir(3pm)

VCS::Dir - module for access to a VCS directory

```
    use VCS;
    my $d = VCS::Dir->new($url);
    print $d->url . "\n";
    foreach my $x ($d->content) {
        print "\t" . $x->url . "\t" . ref($x) . "\n";
    }
```

`"VCS::Dir"` abstracts access to a directory under version control. Methods marked with a "\*" are not yet finalised/implemented.\
 **VCS::Dir-\>create\_new($url) \*** `$url` is a file-container URL.  Creates data as appropriate to convince the VCS that there is a file-container, and returns an object of class `"VCS::Dir"`, or throws an exception if it fails. This is a pure virtual method, which must be over-ridden, and cannot be called directly in this class (a `"die"` will result).\
 **VCS::Dir-\>introduce($name, $create\_class) \*** `$name` is a file or directory name, absolute or relative. `$create_class` is either `"File"` or `"Dir"`, and implementation classes are expected to use something similar to this code, to call the appropriate create\_new:

```
    sub introduce {
        my ($class, $name, $create_class) = @_;
        my $call_class = $class;
        $call_class =~ s/[^:]+$/$create_class/;
        return $call_class->create_new($name);
    }
```

This is a pure virtual method, which must be over-ridden, and cannot be called directly in this class (a `"die"` will result).\
 **VCS::Dir-\>new($url)** `$url` is a file-container URL.  Returns an object of class `"VCS::Dir"`, or throws an exception if it fails. Normally, an override of this method will call `"VCS::Dir->init($url)"` to make an object, and then add to it as appropriate.\
 **VCS::Dir-\>init($url)** `$url` is a file-container URL.  Returns an object of class `"VCS::Dir"`. This method calls `"VCS->parse_url"` to make sense of the URL.\
 **$dir-\>tags** \* THIS METHOD WORKS RECURSIVELY ON THE DIRECTORY AT HAND \* Returns all the tags inside a directory and a little bit more information. The actual datstructure is a hash of hashes. The first level hash is a hash keyed on tag names, in other words it lists as its keys every single tag name in or below a directory. Each of these tag names point to another hash with has filenames as keys and version numbers as values.\
 **$dir-\>url** Returns the `$url` argument to `"new"`.\
 **$dir-\>content** Returns a list of objects, either of class `"VCS::Dir"` or `"VCS::File"`, corresponding to files and directories within this directory.\
 **$dir-\>path** Returns the absolute path of the directory.\
 **$dir-\>read\_dir($dir)** Returns the contents of the given filesystem directory. This is intended as a utility method for subclasses. VCS. This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
