TODO for VCP - Centralize underscorification of tag names for VSS. - Get detailed spec of legal names for p4. - VCP::TestUtils & all tests to using IPC::Run3, for speed and portability's sake. - Port VCP::*::vss to use RevMapDB *NOTE* Doing a `grep -r TODO lib bin` will find lots of small things and future feature ideas. This file will grow to include the more important of those. - there should be an option to detect collisions between underscorified tags in VCP::Dest::cvs. Perhaps enabled by default. - Handle differently localized timestamps - the RevMapDB should be purged of any revisions descended from a revision begin transferred. Right now, if you restore the set repository from an earlier backup and don't rewind the vcp_state directory, you will end up with a mix of RevMapDB entries from the prior transfer and the current. Fo now, a warning is generated. - use the upcoming -t option for p4 filelog (expected in 2002.2) to extract times with dates. Issue a warning recommending an upgrade or enabling a metadata reading mode if not present. - get all test suites converted from IPC::Run to TestUtils::Run - finish off VCP::Source::cvs's simulation of the cvs (rlog) -r option - put FATALTEST=1 support in 90p4.t and 90vss.t (see 90cvs.t) - implement VCP::Source::cvs -d option - Make it so that a dest of cvs:blah:foo is either an error or is just like cvs:blah:foo/... - revml2cvs.t should use (and thus test) the new --init-cvsroot option. - get p4 forms parsing to lex *exactly* like p4 does it. - Allow vcp to log *everything* it outputs to make it easier for the user to capture things, and log it all by default. - Store revisions on disk in db files * populate HeadRevDB * use HedRevDB for incremental exports unless a user has specified a revision range. - improve error reporting for .vcp files. Either use recursive descent to delegate each value to the appropriate object or capture line and column with each value for error reporting. - Enable an "--append-revs" flag to allow a bootstrap file to be added. This is dangerous (there's no checking to be sure that the first new version is the first version after the existing version in the repository) but useful. - Review cvs2p4 and (in the guest depot) vss2p4 for gotchas they catch that we should. - allow VCP::{Source,Dest}::* to "sniff" at unknown directories / files to see if they can detect what kind of repository is there. This will make schemes optional, so tab completion will work again. * VCP should record its starting directory early on and then use it as a base directory for rel2abs(). Thinking specifically of cvsroot absolutification, but the sources should be grepped. - PERHAPS checksum all non-binary files line by line, removing all \r's - Bugfixes - Prevent keyword expansion on all checkouts. Found by Thomas Quinot - Check for p4 >= 99.2 at runtime, since filelog -m is needed * Carry executable bit through (Nick Ing-Simmons) * Make , , etc. use binary escapes when needed * VCP::Dest::cvs needs to set the binary mode properly on files it creates and checks in [[check status]] * VCP::Source::cvs needs to deduce binary modes correctly [[check status]] * Make test suite skip cvs tests if cvs is not present (like it skips p4 tests if p4 is not present). [[check status]] * Set CVS_PASSFILE for all cvs invocations to prevent mucking with the users' current .cvspass - Use ptys to handle CVS login, if available. Recomend installing IO::Pty if needed but not installed. This all must wait until IPC::Run deals better with IO::Pty - Feature Adds - Need to make the transfers more transactional, so we can recover from where we left off when something fails. * Consider offering (david d zuhn ) - Perhaps allow keyword expansion, but convert the expanded texts so that they are no longer seens as RCS style keywords. This would allow imported files to have a "stamp of origin" in them. Would also need an option to leave the keywords in place in this case, since the user might presumably want expansion to work correctly in the new repository too. Suggested by Thomas Quinot . - Add a link checker to vcp html * An option to not bring over deleted files Steve James - A report destination that offers a preview of what a transfer will do, with summary and long views. - An option to prefix all labels with some user-defined string Steve James - Limit the number of NtLkLy queries per command to prevent server lockup. Steve James (possibly URGENT, need to test). - Efficiency - extend VCP::Source::cvs to build revisions directly from the RCS files, this will probably mean memorizing the offsets of the delta or full text chunk for each version in the RCS file, then applying them all as needed to get the desired version. They may need to be reversed as a speed hack since RCS files tend to store the most recent revision in full text and uses deltas from that to encode older revisions, and we'll probably want the oldest revision first. This means that we can build the more recent revisions from the older revisions by reversing the deltas as we apply them to build the older revisions, then apply those reversed deltas. Or something; not sure what's best here. - VCP::Source::revml should only keep on hand the versions it needs at each moment in order to conserve disk space. The problem with this is that the RevML may be coming from a non-seek()able byte stream, like STDIN, so we need to patch as we go. One alternative is to cache the revml off to the side and rescan it if this happens. Another is to only patch- as-you-go if the input is non-seek()able. NOTE: P'haps VCP::Source::revml and VCP::Source::cvs can share the RCS file scanner. NOTE: P'haps VCP::Source::revml and VCP::Source::cvs can share the an internal file revision format; RCS is bass ackwards for our needs. - Once a version has been used, it should be cleaned up out of the source directory unless it will be needed again. This used to be the way things were done, but it has been changed to support branching. STATUS: partially implemented. Revs now refer directly to their ancestor revs, and thus revs may be freed willy-nilly and needed revs won't disappear. TODO: Have each ::Dest do $r->previous( undef ) as aggressively as possible so that older revs will be garbage collected as needed. - Rejected - VCP::Source::p4 should be able to create and read a metadata dump as an option. Watch out for different schemas in different p4d versions. Q: Read the btree files directly? 'twould be faster and more space efficient. (rejected by Perforce so as to not tie VCP to p4d's schema; this may still be contributed as OSS by others, but will not be done by the core team any time soon unless the plans change) - VCP::Dest::p4 should write a metadata file directly, and be able to merge new data in to a destination's exported metafile for reimport. Q: Write the btree files directly? This would bypass any checking p4d does on recovering from a metadata file. (rejected by Perforce so as to not tie VCP to p4d's schema; this may still be contributed as OSS by others, but will not be done by the core team any time soon unless the plans change) - Cleanup * create an init() phase after new() so new() can give immediate feedback on bogus command line options. As it is, sourcing a CVS pserver causes a password prompt before the dest even gets a crack at the options.