package VCP::Source::metadb ; =head1 NAME VCP::Source::metadb - Read SCM metadata from a metadb file =head1 SYNOPSIS ## Mostly used internally by the vcp filter and vcp transfer commands =head1 DESCRIPTION This source driver allows L<vcp|vcp> to read a set of revisions from a metadata database written by VCP::Dest::metadb. NOTE: passing a reference in the options array to new: $s = VCP::Source::metadb->new( $spec, [ $real_source ] ); sets the metadb's source to point to the real repository it should get revisions from. This should only be necessary for a transfer operation, as filtering does not need to access the source repository. =cut use strict ; use VCP::Logger qw( pr BUG ); use VCP::Utils qw( empty ); use vars qw( $VERSION $debug ) ; $VERSION = 0.1 ; use base qw( VCP::Source VCP::Utils::metadb ) ; use fields ( 'META_DB', ## The bulk data file with the revisions 'REAL_SOURCE', ## The *real* source to use if transferring revs ) ; #=item new # #Creates a new instance. The only parameter is '-dtd', which overrides #the default DTD found by searching for modules matching RevML::DTD:v*.pm. # #=cut sub new { my $class = shift ; $class = ref $class || $class ; my VCP::Source::metadb $self = $class->SUPER::new( @_ ) ; my ( $spec, $options ) = @_ ; $self->parse_repo_spec( $spec ) unless empty $spec; ## grep out the REAL_SOURCE option @$options = grep !ref || ( ( $self->{REAL_SOURCE} = $_ ) && 0 ), @$options; $self->parse_options( $options ); return $self; } sub init { my VCP::Source::metadb $self = shift ; $self->SUPER::init; $self->real_source->init if $self->real_source; die "VCP::Source::metadb::repo_server not set" if empty $self->repo_server; $self->repo_id( "metadb:" . $self->repo_server ); $self->meta_db->open_db; return $self ; } sub dest { my VCP::Source::metadb $self = shift ; return $self->SUPER::dest( @_ ); } sub handle_header { my VCP::Source::metadb $self = shift ; $self->dest->handle_header( $self->read_header ) if $self->dest; } sub real_source { my VCP::Source::metadb $self = shift ; return $self->{REAL_SOURCE}; } sub get_rev { my VCP::Source::metadb $self = shift ; BUG "metadb can't get a rev without a real source" unless $self->{REAL_SOURCE}; return $self->{REAL_SOURCE}->get_rev( @_ ); } sub copy_revs { my VCP::Source::metadb $self = shift ; $self->meta_db->foreach_record_do( sub { my $r = VCP::Rev->deserialize( @_ ); $self->send_rev( $r ); } ); } =head1 AUTHOR Barrie Slaymaker <barries@slaysys.com> =head1 COPYRIGHT Copyright (c) 2000, 2001, 2002 Perforce Software, Inc. All rights reserved. See L<VCP::License|VCP::License> (C<vcp help license>) for the terms of use. =cut 1 ;
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#4 | 4021 | Barrie Slaymaker |
- Remove all phashes and all base & fields pragmas - Work around SWASHGET error |
||
#3 | 4012 | Barrie Slaymaker | - Remove dependance on pseudohashes (deprecated Perl feature) | ||
#2 | 3855 | Barrie Slaymaker |
- vcp scan, filter, transfer basically functional - Need more work in re: storage format, etc, but functional |
||
#1 | 3778 | Barrie Slaymaker |
- VCP::*::metadb allows metadata to be queued on disk - PRELIMINARY |