VCP.pm #1

  • //
  • guest/
  • perforce_software/
  • revml/
  • lib/
  • VCP.pm
  • View
  • Commits
  • Open Download .zip Download (3 KB)
package VCP ;

=head1 NAME

VCP - Versioned Copy, copying hierarchies of versioned files

=head1 SYNOPSIS

=head1 DESCRIPTION

This module copies hierarchies of versioned files between repositories, and
between repositories and RevML (.revml) files.

Stay tuned for more documentation.

=head1 EXPORTS

The following functions may be exported: L</debug>, L</enable_debug>,
L</disable_debug>, along with the tags ':all' and ':debug'.  Use the latter
to head off future namespace pollution in case :all gets expanded in the
future..

=head1 METHODS

=over

=cut

use strict ;
use File::Spec ;
use File::Path ;
use VCP::Debug ;
use vars qw( $VERSION ) ;

$VERSION = 0.1 ;

require VCP::Source ;
require VCP::Dest ;

use fields (
   'SOURCE',     # The VCP::Source to pull data from
   'DEST',       # The RevML::Writer instance
) ;


=item new

   $ex = VCP->new( $source, $dest ) ;

where

   $source  is an instance of VCP::Source
   $dest    is an instance of VCP::Dest

=cut

sub new {
   my $class = shift ;
   $class = ref $class || $class ;

   my ( $source, $dest ) = @_ ;

   my VCP $self ;
   {
      no strict 'refs' ;
      $self = bless [ \%{"$class\::FIELDS"} ], $class ;
   }

   $self->{SOURCE} = $source ;
   $self->{DEST}   = $dest ;

   return $self ;
}


=item dest

   $dest = $vcp->dest ;

Gets the dest object.  This object is set by passing it to
new(), so there's no need to set it.

=cut

sub dest {
   my VCP $self = shift ;
   return $self->{DEST} ;
}


=item copy_all

   $vcp->copy_all( $header, $footer ) ;

Calls $source->handle_header, $source->copy_revs, and $source->handle_footer.

=cut

sub copy_all {
   my VCP $self = shift ;

   my ( $header, $footer ) = @_ ;

   my VCP::Source $s = $self->source ;
   $s->dest( $self->dest ) ;

   $s->handle_header( $header ) ;
   $s->copy_revs() ;
   $s->handle_footer( $footer ) ;

   ## Removing this link allows the dest to be cleaned up earlier by perl,
   ## which keeps VCP::Rev from complaining about undeleted revs.
   $s->dest( undef ) ;
   return ;
}


=item source

   $source = $vcp->source ;

Gets the source object.  This object is set by passing it to
new(), so there's no need to set it.

=cut

sub source {
   my VCP $self = shift ;
   return $self->{SOURCE} ;
}


=head1 COPYRIGHT

Copyright 2000, Perforce Software, Inc.  All Rights Reserved.

This will be licensed under a suitable license at a future date.  Until
then, you may only use this for evaluation purposes.  Besides which, it's
in an early alpha state, so you shouldn't depend on it anyway.

=head1 AUTHOR

Barrie Slaymaker <barries@slaysys.com>

=cut

1
# Change User Description Committed
#19 4232 Barrie Slaymaker - bin/vcp now prints a version info banner
#18 4231 Barrie Slaymaker - See if the $Date:$ keyword updates
#17 4230 Barrie Slaymaker - VCP.pm now tracks its $CHANGE_ID
#16 4077 Barrie Slaymaker - VCP on Win32 no longer whines about permission denied errors
  for some disk file cleanup tasks.
#15 4021 Barrie Slaymaker - Remove all phashes and all base & fields pragmas
- Work around SWASHGET error
#14 4012 Barrie Slaymaker - Remove dependance on pseudohashes (deprecated Perl feature)
#13 3929 Barrie Slaymaker - Minor debugging aid
#12 3916 Barrie Slaymaker - Reduce memory consumption
#11 3912 Barrie Slaymaker - ChangeSets goes on the end of the filters, not the beginning
#10 3858 Barrie Slaymaker - Final tweaks for 0.5 release
#9 3855 Barrie Slaymaker - vcp scan, filter, transfer basically functional
    - Need more work in re: storage format, etc, but functional
#8 3824 Barrie Slaymaker - Better display of errors that occur while a progress bar is
  displayed
#7 3155 Barrie Slaymaker Convert to logging using VCP::Logger to reduce stdout/err spew.
       Simplify & speed up debugging quite a bit.
       Provide more verbose information in logs.
       Print to STDERR progress reports to keep users from wondering
       what's going on.
       Breaks test; halfway through upgrading run3() to an inline
       function for speed and for VCP specific features.
#6 3120 Barrie Slaymaker Move changeset aggregation in to its own filter.
#5 2301 Barrie Slaymaker A chain of plugins instead of source & dest
#4 2293 Barrie Slaymaker Update CHANGES, TODO, improve .vcp files, add --init-cvs
#3 628 Barrie Slaymaker Cleaned up POD in bin/vcp, added BSD-style license.
#2 468 Barrie Slaymaker - VCP::Dest::p4 now does change number aggregation based on the
  comment field changing or whenever a new revision of a file with
  unsubmitted changes shows up on the input stream.  Since revisions of
  files are normally sorted in time order, this should work in a number
  of cases.  I'm sure we'll need to generalize it, perhaps with a time
  thresholding function.
- t/90cvs.t now tests cvs->p4 replication.
- VCP::Dest::p4 now doesn't try to `p4 submit` when no changes are
  pending.
- VCP::Rev now prevents the same label from being applied twice to
  a revision.  This was occuring because the "r_1"-style label that
  gets added to a target revision by VCP::Dest::p4 could duplicate
  a label "r_1" that happened to already be on a revision.
- Added t/00rev.t, the beginnings of a test suite for VCP::Rev.
- Tweaked bin/gentrevml to comment revisions with their change number
  instead of using a unique comment for every revision for non-p4
  t/test-*-in-0.revml files.  This was necessary to test cvs->p4
  functionality.
#1 467 Barrie Slaymaker Version 0.01, initial checkin in perforce public depot.