http://qs321.pair.com?node_id=210489


in reply to Re: Re: CVS repository via Perl
in thread CVS repository via Perl

Hi again,
I think I have the solution I needed.
Using Apache::CVS::* modules directly seems to give me exactly what I need.

See the code below that brings me the last revision of a file:
use Apache::CVS::RcsConfig(); use Apache::CVS::PlainFile(); use Apache::CVS::Directory(); use Apache::CVS::File(); use Apache::CVS::Revision(); # /tmp/remote/ is the directory of my CVS module in the repository my $PATH = "/tmp/remote//VC_DB/utilities/pack_conf.pl"; my $RCSCONFIG = Apache::CVS::RcsConfig->new(); my $file = Apache::CVS::File->new($PATH, $RCSCONFIG); my $LAST = $file->revision('prev'); print $LAST->content;

In addition, all of the Apache::CVS::* modules can give a nice and working direct access to the CVS repository.
The main idea is - you don't need to know how it is done !

I believe those modules should be moved from below Apache.

Have a nice day,
shushu

Replies are listed 'Best First'.
Maybe a bug in Apache::CVS::Directory
by shushu (Scribe) on Nov 07, 2002 at 09:50 UTC
    Hi,
    Below is the mail I sent to John Barbee:

    Hi John,

    When working I am trying to get a directory object and go over all of its sub directories.
    I found out that when I am asking for the name of the subdir object, I get an error message.

    The error message is:
    Can't call method "extension" on an undefined value at /usr/lib/perl5/site_perl/5.6.1/Apache/CVS/File.pm line 231 (#1 +) (F) You used the syntax of a method call, but the slot filled by t +he object reference or package name contains an undefined value. Som +ething like this will reproduce the error:
    Looking on the subdir object I saw its rcsconfig object is undef.
    Looking in sub load in Apache::CVS::Directory I saw the following:
    foreach my $path ( @directories ) { $self->push('directory', Apache::CVS::Directory->new($self->path() . "/$pat +h")); }
    And:
    foreach my $path ( @files ) { if ( $path =~ /,v$/ ) { $self->push('file', Apache::CVS::File->new($self->path() . "/$path +", $self->rcs_confi +g())); } else { $self->push('plain_file', Apache::CVS::PlainFile->new($self->path() . "/ +$path")); } }

    The bottom line is - just by fixing the directory object creation to work like the file creation by sending the $self->rcsconfig object it seems I fixed the problem.
    Is it a bug ?
    Maybe you did this for a reason, and I harm something else by fixing it like that ?
    If it is a bug, and this is a good fix, how do we proceed to release a new version ?
    Thanks,
    And I will appriciate a quick response,
    shushu