package VCS::Version; my $PREFIX = 'VCS'; 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 @path = split '/', $path; my $version = pop @path; my $filename = join '/', @path; my $self = { URL => $url, VERSION => $version, PATH => $filename, }; bless $self, $class; } sub url { my $self = shift; $self->{URL}; } sub version { my $self = shift; $self->{VERSION}; } sub tags { } sub text { } sub diff { } sub author { } sub date { } sub reason { } sub path { my $self = shift; $self->{PATH}; } 1; __END__ =head1 NAME VCS::Version - module for access to a VCS version =head1 SYNOPSIS use VCS; die "Usage: $0 file-url\ne.g.: vcs://localhost/VCS::Rcs/file/name/1.2\n" unless @ARGV == 1; my $version = VCS::Version->new(@ARGV); print "Methods of \$version:\n", "url: ", $version->url, "\n", "author: ", $version->author, "\n", "version: ", $version->version, "\n", ; =head1 DESCRIPTION VCS::Version abstracts a single revision of a file under version control. =head1 METHODS Methods marked with a "*" are not yet finalised/implemented. =head2 VCS::Version-Ecreate_new(@version_args) * C<@version_args> is a list which will be treated as a hash, with contents as follow: @version_args = ( name => 'a file name', version => 'an appropriate version identifier', tags => [ 'A_TAG_NAME', 'SECOND_TAG' ], author => 'the author name', reason => 'the reason for the checkin', text => 'either literal text, or a ref to the filename', ); 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::Version-Enew($url) C<$url> is a VCS URL, of the format: vcs://localhost/VCS::Rcs/file/name/1.2 The version is a version number, or tag. 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::Version-Einit($url) C<$url> is a version URL. Returns an object of class C. This method calls Cparse_url> to make sense of the URL. =head2 $version-Eurl Returns the C<$url> argument to C. =head2 $version-Eversion Returns the C<$version> argument to C. =head2 $version-Etags Returns a list of tags applied to this version. =head2 $version-Etext Returns the text of this version of the file. =head2 $version-Ediff($other_version) Returns the differences (in C format) between this version and the other version. Currently, the other version must also be a C object. =head2 $version-Eauthor Returns the name of the user who checked in this version. =head2 $version-Edate Returns the date this version was checked in. =head2 $version-Ereason Returns the reason given on checking in this version. =head2 $version-Epath Returns the absolute path of the file to which this version relates. =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