Dest.html #1

  • //
  • guest/
  • perforce_software/
  • revml/
  • product/
  • release/
  • 0.90/
  • html/
  • VCP/
  • Dest.html
  • View
  • Commits
  • Open Download .zip Download (7 KB)
<html><head><title>VCP::Dest - A base class for VCP destinations</title></head><body><h1><a name="NAME">NAME

</a></h1><p>VCP::Dest - A base class for VCP destinations

<p><hr><h1><a name="SYNOPSIS">SYNOPSIS

</a></h1><p><hr><h1><a name="DESCRIPTION">DESCRIPTION

</a></h1><p><hr><h1><a name="SUBCLASSING">SUBCLASSING

</a></h1><p>This class uses the fields pragma, so you'll need to use base and 
possibly fields in any subclasses.

<h2><a name="SUBCLASS_API">SUBCLASS API

</a></h2><p>These methods are intended to support subclasses.

<dl><pre>
</pre><dt><a name="digest_"><strong><p>digest

</strong></a><pre>    $self-&gt;digest( &quot;/tmp/readers&quot; ) ;

</pre><dd>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.

<p>The Base64 version is returned because that's what RevML uses and we might
want to cross-check with a .revml file when debugging.

<dt><a name="compare_base_revs_"><strong><p>compare_base_revs

</strong></a><pre>   $self-&gt;compare_base_revs( $rev, $work_path ) ;

</pre><dd>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.

<p>Calls $self-&gt;checkout_file( $rev ), which the subclass must implement.

<dt><a name="header_"><strong><p>header

</strong></a><dd>Gets/sets the $header data structure passed to handle_header().

<dt><a name="rev_map_"><strong><p>rev_map

</strong></a><dd>Returns a reference to the RevMapDB for this backend and repository.
Creates an empty one if need be.

<dt><a name="head_revs_"><strong><p>head_revs

</strong></a><dd>Returns a reference to the HeadRevsDB for this backend and repository.
Creates an empty one if need be.

<dt><a name="main_branch_id_"><strong><p>main_branch_id

</strong></a><dd>Returns a reference to the MainBranchIdDB for this backend and repository.
Creates an empty one if need be.

<dt><a name="files_"><strong><p>files

</strong></a><dd>Returns a reference to the FilesDB for this backend and repository.
Creates an empty one if need be.

</dl><h2><a name="SUBCLASS_OVERLOADS">SUBCLASS OVERLOADS

</a></h2><p>These methods are overloaded by subclasses.

<dl><dt><a name="backfill_"><strong><p>backfill

</strong></a><pre>   $dest-&gt;backfill( $rev ) ;

</pre><dd>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 &amp; debugging destinations do not support backfilling.

<p>The $rev-&gt;workpath must be set to the filename the backfill was put
in.

<p>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.

<p>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.

<p>If FALSE is returned, then the revisions will be sent through with no
working path, but will have a delta record.

<p>MUST BE OVERRIDDEN.

<dt><a name="sort_filter_"><strong><p>sort_filter

</strong></a><pre>    sub sort_filter {
       my $self = shift;
       my @sort_keys = @_;
       return () if @sort_keys &amp;&amp; $sort_keys[0] eq &quot;change_id&quot;;
       require VCP::Filter::changesets;
       return ( VCP::Filter::changesets-&gt;new(), );
    }

</pre><dd>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.

<dt><a name="require_change_id_sort_"><strong><p>require_change_id_sort

</strong></a><dd>Destinations that care about the sort order usually want to use the
changesets filter, so they can overload the sort filter like so:

<pre>   sub sort_filters { shift-&gt;require_change_id_sort( @_ ) }

</pre><dt><a name="handle_footer_"><strong><p>handle_footer

</strong></a><pre>   $dest-&gt;handle_footer( $footer ) ;

</pre><dd>Does any cleanup necessary.  Not required.  Don't call this from the override.

<dt><a name="handle_header_"><strong><p>handle_header

</strong></a><pre>   $dest-&gt;handle_header( $header ) ;

</pre><dd>Stows $header in $self-&gt;header.  This should only rarely be overridden,
since the first call to handle_rev() should output any header info.

<dt><a name="rev_count_"><strong><p>rev_count

</strong></a><pre>   $dest-&gt;rev_count( $number_of_revs_forthcoming );

</pre><dd>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.

<dt><a name="skip_rev_"><strong><p>skip_rev

</strong></a><dd>Sent by filters that discard revisions in line.

<dt><a name="handle_rev_"><strong><p>handle_rev

</strong></a><pre>   $dest-&gt;handle_rev( $rev ) ;

</pre><dd>Outputs the item referred to by VCP::Rev $rev.  If this is the first call,
then $self-&gt;none_seen will be TRUE and any preamble should be emitted.

<p>MUST BE OVERRIDDEN.  Don't call this from the override.

<dt><a name="last_rev_in_filebranch_"><strong><p>last_rev_in_filebranch

</strong></a><pre>   my $rev_id = $dest-&gt;last_rev_in_filebranch(
      $source_repo_id,
      $source_filebranch_id
   );

</pre><dd>Returns the last revision for the file and branch indicated by
$source_filebranch_id.  This is used to support --continue.

<p>Returns undef if not found.

</dl><pre>
</pre><p><hr><h1><a name="NOTES">NOTES

</a></h1><p>Several fields are jury rigged for &quot;base revisions&quot;: 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 &quot;faked&quot;, they don't contain
comments or timestamps, so the comment and timestamp fields are treated as
&quot;&quot; and 0 by the sort routines.

<p><hr><h1><a name="COPYRIGHT">COPYRIGHT

</a></h1><p>Copyright 2000, Perforce Software, Inc.  All Rights Reserved.

<p>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
<a href="vcp.html">vcp</a>.

<p><hr><h1><a name="AUTHOR">AUTHOR

</a></h1><p>Barrie Slaymaker &lt;barries@slaysys.com&gt;

<p><hr><i><font size="-1">Last updated: Thu Jul 15 01:02:39 2004</font></i></body></html>
# Change User Description Committed
#1 4344 alan_teague Revised productization files updating to latest perl modules and
normalizing scripts to work on both linux and bsd platforms.