[p4] [ANNOUNCE] VCP 0.26

Barrie Slaymaker barries at slaysys.com
Tue Dec 18 03:19:39 PST 2001

VCP v0.26 should be on CPAN later this week (the CPAN upload servers
seem to be unreachable to me).  You can also get it from:


This release is a bugfix release and eliminates dependencies on the
command line patch and diff programs in the RevML source and destination
code.  Since IPC::Run now works on NT, this is the last "known issue"
preventing operation on NT; I'm sure there will be portability bugs to
be found as I test on NT over the next week.

The manpage for the VCP command can be found at:


The short version is that vcp ('version copy') copies versions and
version ranges of files from one repository to another, translating as
much as possible along the way.

This allows you to copy and translate ranges of revisions of files
between different vendors' revision storage systems.

Below are the changes sine 0.221.

- Barrie

CHANGES for vcp - Version CoPy

0.26 Tue Dec 18 05:21:09 EST 2001
   - switched to use Text::Diff, no more Unix diff dependency.
     Added VCP::DiffFormat.
   - Added VCP:Patch.  No more unix patch dependency

   - Switched to an all-perl Diff::Unified instead of exec()ing the systems'
     diff.  This is for NT as well as to avoid tripping over old, featureless
     diffs (which hasn't yet occurred, but...) 
   - Built framework for VCP::Patch, including test suite.
   - VCP::Dest::*::handle_footer() now handle things ok when no revisions are
   - VCP::Dest::p4 now backfills the base rev when receiving an incremental
     update from a source other than VCP::Source::revml.  VCP::Source::revml
     reaches out and does the backfill itself; other sources don't, so
     VCP::Dest::p4 now does a sync (like a CVS checkout) and compares it to the
     version the source provides. TODO: Do the same for V::D::cvs.  Reported by
     Jerry Harmon <JHarmon at digimarc.com>.
   - VCP::Dest::p4 now inits itself properly when backfilling
   - Fix a few Perl nits ("$foo\_" => "${foo}_..."), patch submitted by Peter
     Prymmer <PPrymmer at factset.com>.
   - VCP::Source::p4 now uses p4's -x option when getting all of the files in
     each label; no more huge command lines for that purpose.
   - VCP::Source::cvs tries to include revisions that -rTAG misses.  If a file
     has been added (or re-added) since the tag, "cvs log" will report all of
     it's revisions.  VCP::Source::cvs throws away any outside of the date
     range of the files that were tagged.  This is not perfect, but it had a
     bug and is now a little less imperfect.
   - Totally rewrite the sorting code, add --sort-by option for the revml
     destination so that the test suites can get vcp to generate .revml files
     in a sorted order matching that now generated by gentrevml (see below).
     This may seem trivial, but it's the only way to assure consistent output
     in test suites, which is a prerequisite for distributing this package.
     Could add it to other repositories, but not sure if that's needed, leaving
     it out for now to keep complexity and documentation simple and to reduce
     the number of features that future version might need to support for
     backcompat.  Can add it in as soon as a real world need shows up.
   - Added sort keys for (perldoc VCP::Dest for details):
     - change_id (happens to do a segment-wise compare just in case...)
     - time
     - comment
     - rev_id (using a segment-wise compare)
     - name (using a segment-wise relative path compare)
   - The rev_id and change_id sort keys both have several synonyms to make them
     mnemonic to people who happen to think of them differently.  The defaul
     sort keys are change_id, time, comment.  comment is useful for breaking
     apart mass commits in to changes.
   - Debug and optimize VCP::Dest::cvs.  `cvs commit` is very slow if files
     have been added or altered, so VCP::Dest::cvs now waits as long as
     possible before doing one.  It still needs to commit before (and after)
     deletes, among other things.  The result is a big speedup even on the test
     suite, which has a more abusive (more adds and deletes than normal)
     sequence of operations.
   - VCP::Dest::cvs now does not prematurely delete working files. This hints
     that VCP::Rev needs to not delete any file that is pointed to by another
     VCP::Rev instance, since VCP::Rev objects may not be DESTROYed quickly
     enough and may be deleting a newer version of a file they point to.
   - Add File::Temp to PREREQ_PM in Makefile.PL.  Older Perls don't come with
   - VCP::Source::cvs: beginnings of support for --cd to bypass the automatic
     workspace and use a user-supplied workspace.
   - Converted t/50revml.t to use VCP::TestUtils
   - Add revision number to the default sort comparison in VCP::Dest, remove
   - gentrevml now produces the test .revml files in name,rev_id order to make
     it easier for test scripts to compare them with the revml output generated
     during testing.
   - added t/01sort.t to test sorting
   - revamped t/90* and tweaked VCP::TestUtils to have slightly simpler p4 and
     cvs mgmt apis
   - added VCP::TestUtils::get_vcp_output to encapsulate the task of extracting
     revml files in gentrevml order.
   - Improved VCP::TestUtils::launch_p4d so it will hunt for a random numbered
     free port up to three times so that multiple test suites can be run at
   - Added VCP::Debug::explicitly_debugging() predicate to allow for
     low-priority but noisy debugging statements.  This predicate returns true
     only if the current package (or keywords passed in) exactly equal one of
     the debugging specs.  The more general predicage debugging() lets
     debugging specs be regexps, this one doesn't, meaning that you can
     sometimes get more detail by spelling out debugging specs instead of using
     that old standby ".*".  TODO: note on the list of possible specs that
     VCP::Debug can generate which words this is enabled for.
   - minor code consistency cleanups, include rename a few $r vars to $rev.

0.222 Tue Jul 31 08:49:00 EDT 2001
   - VCP::Dest::cvs now properly handles $r->comment being undef.  This can
     occur when there is no comment in the source repo (as opposed to a comment
     of ''). VCP::Source::p4 leaves $r->comment as undef when it can't parse
     some non-space chars out of the depot, which is a bit obnoxious, but
     VCP::Dest::cvs should handle it anyway.

More information about the perforce-user mailing list