VCP::Dest - A base class for VCP destinations
These methods are intended to support subclasses.
- digest
-
$self->digest( "/tmp/readers" ) ;
Returns the Base64 MD5 digest of the named file. Used to compare a base rev
(which is the revision *before* the first one we want to transfer) of a
file from the source repo to the existing head rev of a dest repo.
The Base64 version is returned because that's what RevML uses and we might
want to cross-check with a .revml file when debugging.
- compare_base_revs
-
$self->compare_base_revs( $rev, $work_path ) ;
Checks out the indicated revision from the destination repository and
compares it (using digest()) to the file from the source repository
(as indicated by $work_path). Dies with an error message if the base
revisions do not match.
Calls $self->checkout_file( $rev ), which the subclass must
implement.
- header
- Gets/sets the $header data structure passed to
handle_header().
- rev_map
- Returns a reference to the RevMapDB for this backend and repository.
Creates an empty one if need be.
- head_revs
- Returns a reference to the HeadRevsDB for this backend and repository.
Creates an empty one if need be.
- main_branch_id
- Returns a reference to the MainBranchIdDB for this backend and repository.
Creates an empty one if need be.
- files
- Returns a reference to the FilesDB for this backend and repository.
Creates an empty one if need be.
These methods are overloaded by subclasses.
- backfill
-
$dest->backfill( $rev ) ;
Checks the file indicated by VCP::Rev $rev out of the target repository if
this destination supports backfilling. Currently, only the revml and the
reporting & debugging destinations do not support backfilling.
The $rev->workpath must be set to the filename the backfill was put in.
This is used when doing an incremental update, where the first revision of a
file in the update is encoded as a delta from the prior version. A digest
of the prior version is sent along before the first version delta to
verify it's presence in the database.
So, the source calls backfill(), which returns TRUE on success, FALSE
if the destination doesn't support backfilling, and dies if there's an
error in procuring the right revision.
If FALSE is returned, then the revisions will be sent through with no
working path, but will have a delta record.
MUST BE OVERRIDDEN.
- sort_filter
-
sub sort_filter {
my $self = shift;
my @sort_keys = @_;
return () if @sort_keys && $sort_keys[0] eq "change_id";
require VCP::Filter::changesets;
return ( VCP::Filter::changesets->new(), );
}
This is passed a sort specification string and returns any filters needed to
presort data for this destination. It may return the empty list (the
default), or one or more instantiated filters.
- require_change_id_sort
- Destinations that care about the sort order usually want to use the
changesets filter, so they can overload the sort filter like so:
sub sort_filters { shift->require_change_id_sort( @_ ) }
- handle_footer
-
$dest->handle_footer( $footer ) ;
Does any cleanup necessary. Not required. Don't call this from the
override.
- handle_header
-
$dest->handle_header( $header ) ;
Stows $header in $self->header. This should only rarely be overridden,
since the first call to handle_rev() should output any header
info.
- rev_count
-
$dest->rev_count( $number_of_revs_forthcoming );
Sent by the last aggregating plugin in the filter chain just before the
first revision is sent to inform us of the number of revs to expect.
- skip_rev
- Sent by filters that discard revisions in line.
- handle_rev
-
$dest->handle_rev( $rev ) ;
Outputs the item referred to by VCP::Rev $rev. If this is the first call,
then $self->none_seen will be TRUE and any preamble should be emitted.
MUST BE OVERRIDDEN. Don't call this from the override.
- last_rev_in_filebranch
-
my $rev_id = $dest->last_rev_in_filebranch(
$source_repo_id,
$source_filebranch_id
);
Returns the last revision for the file and branch indicated by
$source_filebranch_id. This is used to support --continue.
Returns undef if not found.
Several fields are jury rigged for "base revisions": these are fake
revisions used to start off incremental, non-bootstrap transfers with the MD5
digest of the version that must be the last version in the target repository.
Since these are "faked", they don't contain comments or timestamps,
so the comment and timestamp fields are treated as "" and 0 by the
sort routines.
Copyright 2000, Perforce Software, Inc. All Rights Reserved.
This module and the VCP package are licensed according to the terms given in the
file LICENSE accompanying this distribution, a copy of which is included in
vcp.
Barrie Slaymaker <barries@slaysys.com>