TODO for VCP *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. - Bugfixes - get placeholder revs to have correct times and user ids for branches in CVS. - can't exe p4 argument list too long Run3.pm 428. I had done a xc/doc/hardcopy/... and a xc/doc/man/... conversion. <gerry@perforce.com> - Port VCP::*::vss to use state files - Implement branching in VCP::*::vss - Port to Win32 (ie tweak IPC::Run3 to work there) - Make it so that a dest of cvs:blah:foo is either an error or is just like cvs:blah:foo/... (if it looks like a directory given the source revs or the target repository topology) - Prevent keyword expansion on all checkouts. Found by Thomas Quinot <quinot@inf.enst.fr> - Get detailed spec of legal names (filenames, branch spec/label names) for p4. * Carry executable bit through (Nick Ing-Simmons) * Make <rev_root>, <name>, 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]] - there should be an option to detect collisions between underscorified tags in VCP::Dest::cvs. Perhaps enabled by default. - 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. Warn about metadata loss when using older p4. - Review cvs2p4 and (in the guest depot) vss2p4 for gotchas they catch that we should [[STATUS: tag underscorification is done and we've checked that cvs does not limit its tag lengths]] - get p4 forms parsing to lex *exactly* like p4 does it. * 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. - Testing * Test the VCP::Source::cvs -r and -d options (-r *was* tested before --continue was added; now its not tested at all. Plus, -d was never tested and is not fully implemented in the RCS file scanning code. - VCP::TestUtils & all tests to using IPC::Run3, for speed and portability's sake. * use get_vcp_output() in the test suite whereever we're extracting revml. * test -r options in t/91cvs2revml.t. Need to test each of (start, end, start+end) with both rev numbers and tags - Test VCP::Source::cvs branching corner conditions, perhaps all corner conditions for this sort of thing. - when the first rev on a branch is a delete - when the first rev on a branch occurs as the first change in an incremental export - when a file is added on a branch - Test importing two bootstrap imports one on top of the other - should VCP warn when it detects this? - Test CVS vendor tags in cvs->p4 and cvs->cvs; not sure how to do this best; there is no VCP internal designation of a vendor branch. Such a flag would also have to be visible in RevML and would be needed for testing purposes. Right now, CVS seems to make vendor branches appear as branches of rev 1.1, which is OK, I think, but it means that the first p4 integrate looks backwards. - Feature Adds - Transfer and translate branch specs and other metadata on p4->p4 transfers. - Handle differently localized timestamps. RevML should be in GMT or use ISO8601's tz indicators. - Allow vcp to log *everything* it outputs to make it easier for the user to capture things, and log it all by default. Right now, the user needs to use some external redirect or tee utility, which might not be available. - branch_label fields in the <branch> sections to allow cvs branch labels to be carried through to p4 and, possibly, p4 branch spec names to be assigned and used as directory names for branches. - VCP::Filter::branchmap to allow <branch> elements to be altered, for instance by assigning names to p4 branches' <branch_label> elements given their <branch_id> elements (which are a path to the parent directory of each file). - VCP::Filter::usermap to allow usernames to be altered - VCP::Filter::commentedit to allow comments to be edited (post-sort but pre change aggregation); this is to allow cvs2p4-like comments. - VCP::Filter::changes to allow change numbers to be created, edited, or removed. - warn when a *Map filter is used and the default <<keep>> action fires, because this indicates a possible missing or faulty rule. - 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. - in foo->p4 (where foo != p4), try to integrate - in p4->foo suppress revs with empty deltas immediately after an integrate so as to not introduce changless revs in other repos, including ->p4 conversions when --change-branch-rev-1 not specified. - give better diagnostics when the state file appears to be out of date: - when --continue is specified we can't. - when --continus is not specified and a revision already exists in the destination state files (but not in the destination rep). We could keep track of the last known change to the destination in the state file and probe to see if that file is at the indicated revision. Or just watch for revisions coming along that should be in the dest (according to the state file) but aren't. - Add a --skip-unchanged-revs option or VCP::Filter that skips unchanged revisions; all children of such a revision become children of that revision's parent. - 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. This might be done already with --bootstrap specified on the source, but is completely untested - reports and queries against the state files to show: - head rev of each filebranch - what source revs ended up where (path & rev_id) - how branches got mapped - what the main branch_id is for foo->cvs imports. - Need to make the transfers more transactional, so we can recover from where we left off when something fails. We're part way there with the --continue support, but VCP needs to log what it's about to submit and sniff out how far the submittal got before it blew up. This would allow recovery by updating the state files to the correct state and not trying to double commit files. - Allow the state files to be checked in to the destination. Probably as text, in order to avoid sdbm byte ordering issues if they are checked out on a differently byte ordered system. - 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 <quinot@inf.enst.fr>. - Add a link checker to vcp html * An option to not bring over deleted files Steve James <SJames@ariba.com> - A report destination that offers a preview of what a transfer will do, with summary and long views. - Limit the number of NtLkLy queries per command to prevent server lockup. Steve James <SJames@ariba.com> (possibly URGENT, need to test). - VCP::Source::cvs guess what you mean when you specify a starting and/or ending tag using -r. The underlying cvs implementation emits all revisions for files that don't match the -r (assuming, I guess, that all of the file's is within the tagged limits). So VCP::Source::cvs looks through the files that did match the tags for the oldest and newest times of revisions and throws away revisions from files that *didn't* match and are older or newer than the oldest or newest. TODO: perhaps do this culling after change aggregation somehow so that an untagged file's rev that gets associated with a particular change gets included. * 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. - finish off VCP::Source::cvs's simulation of the cvs (rlog) -r option - implement VCP::Source::cvs -d option when scanning files - PERHAPS checksum all non-binary files line by line, removing all \r's in order to reduce sensitivity to varying platform settings between the source and the destination. - 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. - Efficiency - Batch cvs checkouts somehow (they're cvs prints now). - Batch p4 integrates by using a temporary branch spec - 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. - in --continue mode, VCP::Source::p4 could do a p4 files to get all the source_filebranch_ids and then get the last_rev_in_filebranch for each, which would probably be a lot quicker than running a full filelog and throwing away most of the data (ie for a --continue on a large tree with lots of changes, but only one or two files have changed since the last export). * Consider offering <char code=0x00 repeat=34234> (david d zuhn <zoo@bravara.com>) - benchmark different strategies for IPC::Run3's buffers, see if we can patch it to be faster by using a pipe. - the RevMapDB should be purged of any revisions descended from a revision being 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. - 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. - use parent/child nomenclature instead of previous/next - have VCP::Rev use a next pointer, perhaps in a %next, as VCP::Dest does, to ensure garbage collection. - Centralize underscorification of tag names for VSS. * factor the full sorting code out of VCP::Dest in to a VCP::Sort and only use it in VCP::Dest::revml. Modify t/01sort.t to suit. * remove all instances of launch_p4d from t/*.t and delete it from VCP::TestUtils; this is to increase the consistency of the test suite and prevent "fix it twice" issues. - 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) - An option to prefix all labels with some user-defined string Steve James <SJames@ariba.com> (this is no longer necessary, as vcp does not add its own labels by default).
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#105 | 5404 | Barrie Slaymaker |
- SVN support added - Makefile gives clearer notices about missing optional prereqs. - VCP::Filter::labelmap and VCP::Filter::map: <<skip>> replaces deprecated <<delete>> to be clearer that no revisions are deleted from either repository but some just are skipped and not inserted. - VCP::Filter::map: support added for SVN-like branch labels - VCP::Source: support added for ISO8601 timestamps emitted by SVN. |
||
#104 | 5344 | Barrie Slaymaker | - Add test for time parsing fixed bug in VCP::Source. | ||
#103 | 4557 | Barrie Slaymaker | - VCP::Source::p4 uses "filelog -t" if p4d >= 2002.2 | ||
#102 | 4513 | Barrie Slaymaker | - <earlier_id> need noted in TODO | ||
#101 | 4507 | Barrie Slaymaker |
- RevML: - added <action>, removed <delete>, <placeholder> and <move> - added <from_id> for clones (and eventually merge actions) - Simplified DTD (can't branch DTD based on which action any more) - VCP::Source::cvs, VCP::Filter::changesets and VCP::Dest::p4 support from_id in <action>clone</action> records - VCP::Dest::perl_data added - VCP::Rev::action() "branch" added, no more undefined action strings - "placeholder" action removed |
||
#100 | 4495 | Barrie Slaymaker | - record some ideas to better handle VSS branching perfidy | ||
#99 | 4481 | Barrie Slaymaker | - VCP::Filter::map calls skip_rev when deleting a rev (spotted by clkao) | ||
#98 | 4467 | Barrie Slaymaker | - Noted need to execute cleanup code in END{} in a stable order | ||
#97 | 4305 | Barrie Slaymaker | - Note FreeBSD unexpected output failure | ||
#96 | 4175 | Matt Attaway | Update with purged revision bug | ||
#95 | 4086 | Barrie Slaymaker | - TODO list updated | ||
#94 | 4038 | Barrie Slaymaker | - TODO cleaned up | ||
#93 | 3993 | Barrie Slaymaker | - Fold in changes from clkao's SVN work | ||
#92 | 3930 | Barrie Slaymaker |
- VCP::Source::cvs and VCP::Dest::p4 handle cloning deletes - "placeholder" actions and is_placeholder_rev() deprecated in favor of is_branch_rev() and is_clone_rev(). - Misc cleanups and minor bugfixes |
||
#91 | 3858 | Barrie Slaymaker | - Final tweaks for 0.5 release | ||
#90 | 3814 | Barrie Slaymaker | - TODO items cleaned up a bit | ||
#89 | 3781 | Barrie Slaymaker | - Note some testing TODOs | ||
#88 | 3752 | Barrie Slaymaker | - TODO: --cd testing, renaming | ||
#87 | 3720 | Barrie Slaymaker | - Note some future feature adds in TODO | ||
#86 | 3692 | Barrie Slaymaker | - assert_eq() is deprecated | ||
#85 | 3681 | Barrie Slaymaker | - VCP now scans much more of real_vss_1 and converts it to revml | ||
#84 | 3679 | Barrie Slaymaker | - VCP::Source::vss respects --case-sensitive in more places | ||
#83 | 3673 | Barrie Slaymaker | - rev_root sanity check is now case insensitive on Win32 | ||
#82 | 3670 | Barrie Slaymaker | - Note new TODO | ||
#81 | 3666 | Barrie Slaymaker | - vcp can now edit existing .vcp files, for VSS sources and revml dests | ||
#80 | 3659 | Barrie Slaymaker | - Minor merges from crashed HD | ||
#79 | 3554 | John Fetkovich |
added p42cvs_default_filters sub. Corrected documentation. |
||
#78 | 3533 | John Fetkovich | remove completed rel2abs items | ||
#77 | 3520 | John Fetkovich | add item | ||
#76 | 3484 | John Fetkovich | fix a prompt name | ||
#75 | 3483 | John Fetkovich | removed done item | ||
#74 | 3482 | John Fetkovich | done item removed | ||
#73 | 3468 | Barrie Slaymaker |
- get --output-config-file working with ui (if ui completes, which may not happen if the user enters invalid input). - Note various UI issue in TODO. |
||
#72 | 3460 | Barrie Slaymaker |
- Revamp Plugin/Source/Dest hierarchy to allow for reguritating options in to .vcp files |
||
#71 | 3434 | Barrie Slaymaker | Note important testing TODOs | ||
#70 | 3432 | Barrie Slaymaker | - "p4 print" to "p4 sync" | ||
#69 | 3413 | Barrie Slaymaker |
- Delete some completed TODOs - Note s/$^O.*Win32/is_win32()/g cleanup needed |
||
#68 | 3405 | John Fetkovich | added item | ||
#67 | 3401 | Barrie Slaymaker |
- Note that VCP::Source::cvs should deal gracefully with "/module" (as opposed to "module") |
||
#66 | 3395 | John Fetkovich | various ui refinements | ||
#65 | 3392 | Barrie Slaymaker | Note TODO to document need for VSS cleanup prior to conversion | ||
#64 | 3375 | John Fetkovich | more ui changes | ||
#63 | 3372 | Barrie Slaymaker | Note gerry's concerns about UI as must-do items | ||
#62 | 3336 | Barrie Slaymaker | Add API TODO to add RunWait() calls | ||
#61 | 3222 | Barrie Slaymaker | HTML build process tweak TODO | ||
#60 | 3180 | Barrie Slaymaker | Add to TODOs | ||
#59 | 3098 | Barrie Slaymaker |
Convert all length p4 command line calls to us p4 -x -. All hail p4 -x -. |
||
#58 | 3088 | Barrie Slaymaker | Note p4->cvs problem | ||
#57 | 3078 | Barrie Slaymaker |
Note more CVS oddities we really should be testing for but aren't. |
||
#56 | 3066 | Barrie Slaymaker |
Set time correctly on integrate and pre-delete add changes. |
||
#55 | 3060 | Barrie Slaymaker | Note arglist too long error in p4->p4 conversion | ||
#54 | 3048 | Barrie Slaymaker | Note some tweaks | ||
#53 | 3030 | Barrie Slaymaker |
Note cleanup needed for placeholder revs on empty branches for CVS. |
||
#52 | 3021 | Barrie Slaymaker |
Force integrate to branch from proper revision and allow it to branch from the predecessor of a deleted file (CVS allows file deletes). |
||
#51 | 3009 | John Fetkovich | removed completed TODO item | ||
#50 | 3007 | Barrie Slaymaker | Read CVS vendor branche tags | ||
#49 | 3006 | Barrie Slaymaker | Note the bugs Gerry found. | ||
#48 | 2954 | John Fetkovich | removed completed item | ||
#47 | 2917 | Barrie Slaymaker | Reorganize TODO | ||
#46 | 2911 | Barrie Slaymaker | Document changes, add a few TODOs | ||
#45 | 2898 | Barrie Slaymaker | More TODO | ||
#44 | 2861 | Barrie Slaymaker | Note need to test -r and -d options. | ||
#43 | 2838 | John Fetkovich | Use parse_options rather than using Getopt::Long directly. | ||
#42 | 2823 | John Fetkovich | removed already done item | ||
#41 | 2809 | Barrie Slaymaker |
Implement --repo-id in Plugin.pm, refactor source & dest options parsing starting in VCP::Source::cvs (need to roll out to other sources and dests), get t/91cvs2revml.t passing again (first time in months! branching and --continue support works in cvs->foo!). |
||
#40 | 2802 | John Fetkovich |
Added a source_repo_id to each revision, and repo_id to each Source and Dest. The repo_ids include repository type (cvs,p4,revml,vss,...) and the repo_server fields. Changed the $self->...->set() and $self->...->get() lines in VCP::Dest::* to pass in a conglomerated key value, by passing in the key as an ARRAY ref. Also various restructuring in VCP::DB.pm, VCP::DB_file.pm and VCP::DB_file::sdbm.pm related to this change. |
||
#39 | 2776 | Barrie Slaymaker | Note need to test -r in test suite. | ||
#38 | 2775 | Barrie Slaymaker | Note possible future culling improvement | ||
#37 | 2773 | Barrie Slaymaker | TODO | ||
#36 | 2772 | Barrie Slaymaker | TODO | ||
#35 | 2771 | Barrie Slaymaker | Note need for source_repo_id in each rev & what to do with it | ||
#34 | 2768 | John Fetkovich |
Allow revml to be output in non-indented form with --no-indent option on dest::revml |
||
#33 | 2764 | John Fetkovich |
add --compress switch to dest::revml add --uncompress switch to source::revml use gzip to compress/uncompress revml files |
||
#32 | 2763 | John Fetkovich |
test a rerooted revml->p4 to someplace deep in the p4 tree, to make sure that VCP is configuring p4 to map the files to the right place. |
||
#31 | 2758 | John Fetkovich | Check contents of t/cvsroot_2 in t/91revml2cvs.t | ||
#30 | 2755 | John Fetkovich | Completed coversion of tests to IPC::Run3 | ||
#29 | 2746 | Barrie Slaymaker | Make current and flag things that are now feasible | ||
#28 | 2721 | Barrie Slaymaker | VCP::Dest::p4 now uses RevMapDB | ||
#27 | 2707 | Barrie Slaymaker | todo items | ||
#26 | 2706 | Barrie Slaymaker | Interim checkin | ||
#25 | 2682 | Barrie Slaymaker | more underscorification documentation. | ||
#24 | 2307 | Barrie Slaymaker | get VCP::Filter::map working, update docs | ||
#23 | 2293 | Barrie Slaymaker | Update CHANGES, TODO, improve .vcp files, add --init-cvs | ||
#22 | 2281 | Barrie Slaymaker | foo | ||
#21 | 2267 | Barrie Slaymaker | factor out cvs2revml, test both --use-cvs and direct modes, with times | ||
#20 | 2242 | Barrie Slaymaker | add forthcoming p4 filelog -t | ||
#19 | 2233 | Barrie Slaymaker | debug | ||
#18 | 2229 | Barrie Slaymaker | reminders to self | ||
#17 | 2042 | Barrie Slaymaker | Basic source::p4 branching support | ||
#16 | 2017 | Barrie Slaymaker |
Interim checkin of id=/base_version_id for revml: and branch_diagram: |
||
#15 | 2009 | Barrie Slaymaker |
lots of fixes, improve core support for branches and VCP::Source::cvs now supports branches. |
||
#14 | 2006 | Barrie Slaymaker |
more preparations for branching support, handling of cvs :foo:... CVSROOT specs, misc fixes, improvements |
||
#13 | 2005 | Barrie Slaymaker | Add code cleanup note | ||
#12 | 1855 | Barrie Slaymaker |
Major VSS checkin. Works on Win32 |
||
#11 | 1809 | Barrie Slaymaker | VCP::Patch should ignore lineends | ||
#10 | 1448 | Barrie Slaymaker | suggestions for NtLkly hack cleanups, reporting. | ||
#9 | 1367 | Barrie Slaymaker | lots of docco updates | ||
#8 | 1358 | Barrie Slaymaker | Win32 changes | ||
#7 | 1330 | Barrie Slaymaker | Ignore cvs lock mgmt warnings in VCP::Source::cvs. | ||
#6 | 824 | Barrie Slaymaker | Fix p4 backfilling path math to not mangle paths. | ||
#5 | 719 | Barrie Slaymaker | vcp 0.221 | ||
#4 | 695 | Barrie Slaymaker |
Cleaned up support for binary files in VCP::Dest::revml and altered test suite to deal with it better. Added some thoughts to the TODO file. |
||
#3 | 628 | Barrie Slaymaker | Cleaned up POD in bin/vcp, added BSD-style license. | ||
#2 | 620 | Barrie Slaymaker |
Underscorify CVS tags, only warn about undeleted files if debugging. |
||
#1 | 478 | Barrie Slaymaker |
0.05 Mon Dec 18 07:27:53 EST 2000 - Use `p4 labels //...@label` command as per Rober Cowham's suggestion, with the '-s' flag recommended by Christopher Siewald and Amaury.FORGEOTDARC@atsm.fr. Though it's actually something like vcp: running /usr/bin/p4 -u safari -c safari -p localhost:5666 -s files //.../NtLkly //...@compiler_a3 //.../NtLkly //...@compiler_may3 and so //on //for 50 parameters to get the speed up. I use the //.../NtLkly "file" as //a separator between the lists of files in various //revisions. Hope nobody has any files named that :-). What I should do is choose a random label that doesn't occur in the labels list, I guess. - VCP::Source::revml and VCP::Dest::revml are now binary, control code, and "hibit ASCII" (I know, that's an oxymoron) clean. The <comment>, <delta>, and <content> elements now escape anything other than tab, line feed, space, or printable chars (32 <= c <= ASCII 126) using a tag like '<char code="0x09">'. The test suite tests all this. Filenames should also be escaped this way, but I didn't get to that. - The decision whether to do deltas or encode the content in base64 is now based on how many characters would need to be escaped. - We now depend on the users' diff program to have a "-a" option to force it to diff even if the files look binary to it. I need to use Diff.pm and adapt it for use on binary data. - VCP::Dest::cvs now makes sure that no two consecutive revisions of the same file have the same mod_time. VCP::Source::p4 got so fast at pulling revisions from the repositories the test suite sets up that CVS was not noticing that files had changed. - VCP::Plugin now allows you to set a list of acceptable result codes, since we now use p4 in ways that make it return non-zero result codes. - VCP::Revs now croaks if you try to add two entries of the same VCP::Rev (ie matching filename and rev_id). - The <type> tag is now limited to "text" or "binary", and is meant to pass that level of info between foreign repositories. - The <p4_info> on each file now carries the one line p4 description of the file so that p4->p4 transferes can pick out the more detailed info. VCP::Source::p4, VCP::Dest::p4 do this. - VCP::{Source,Dest}::{p4,cvs} now set binaryness on added files properly, I think. For p4->p4, the native p4 type is preserved. For CVS sources, seeing the keyword substitution flag 'o' or 'b' implies binaryness, for p4, seeing a filetype like qr/u?x?binary/ or qr/x?tempobj/ or "resource" implies binaryness (to non-p4 destinations). NOTE: Seeing a 'o' or 'b' in a CVS source only ends up setting the 'b' option on the destination. That should be ok for most uses, but we can make it smarter for cvs->cvs transfers if need be. |