package VCS::File; my $PREFIX = 'VCS'; use Carp; use File::Basename; sub new { my $container_classtype = shift; $container_classtype =~ s#^$PREFIX##; my ($hostname, $impl_class, $path, $query) = VCS->parse_url(@_); VCS->class_load($impl_class); my $this_class = "$impl_class$container_classtype"; return $this_class->new(@_); } sub init { my ($class, $url) = @_; my ($hostname, $impl_class, $path, $query) = VCS->parse_url($url); my $self = {}; $self->{URL} = $url; $self->{PATH} = $path; bless $self, $class; } sub url { my $self = shift; $self->{URL}; } sub tags { } sub versions { } sub path { my $self = shift; $self->{PATH}; } 1; __END__ =head1 NAME VCS::File - module for access to a file under version control =head1 SYNOPSIS use VCS; my $f = VCS::File->new($url); print $f->url . "\n"; foreach my $v ($f->versions) { print "\tversion: " . $v->version . "\t" . ref($v) . "\n"; } =head1 DESCRIPTION C abstracts access to a file under version control. =head1 METHODS Methods marked with a "*" are not yet finalised/implemented. =head2 VCS::File-Ecreate_new($name) * C<$name> is a file name, absolute or relative. Creates data as appropriate to convince the VCS that there is a file, and returns an object of class C, 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 (an exception ("C") will result). =head2 VCS::File-Eintroduce($version_args) * C<$version_args> is a hash-ref, see L for details. Implementation classes are expected to use something similar to this code, to call create_new in the right C subclass: sub introduce { my ($class, $version_args) = @_; my $call_class = $class; $call_class =~ s/[^:]+$/Version/; return $call_class->create_new($version_args); } This is a pure virtual method, which must be over-ridden, and cannot be called directly in this class (a C will result). =head2 VCS::File-Enew($url) C<$url> is a file URL. Returns an object of class C, or throws an exception if it fails. Normally, an override of this method will call Cinit($url)> to make an object, and then add to it as appropriate. =head2 VCS::File-Etags() Returns a reference to a hash that has keys that are any tags attached to the file and the values are the corresponding versions which the tags refer to. =head2 VCS::File-Etags_hash() Cvs ONLY Same as for -E. =head2 VCS::File-Etags_array() Cvs ONLY Returns an array of tags that are connected with the file, this is useful alongside tags_hash() as it allows you to inspect the order in which tags were applied. =head2 VCS::File-Einit($url) C<$url> is a file URL. Returns an object of class C. This method calls Cparse_url> to make sense of the URL. =head2 $file-Eurl Returns the C<$url> argument to C. =head2 $file-Eversions Returns a list of objects of class C, in order of ascending revision number. If it is passed an extra (defined) argument, it only returns the last version as a C. =head2 $file-Epath Returns the absolute path of the file. =head1 SEE ALSO L. =head1 COPYRIGHT This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut