TODO #26

  • //
  • guest/
  • perforce_software/
  • revml/
  • TODO
  • View
  • Commits
  • Open Download .zip Download (8 KB)
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.

- 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
- reorder the t/9*cvs.t so t/90revml2cvs builds the repository and
  t/91cvs2revml and t/95cvs2p4 use it.
- split t/90p4.t so t/90revml2p4.t builds the repository and
  t/91p42revml.t and t/95p42cvs use it.
- p42revml.t (with TESTNUM and FATALTEST support?)
- 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)
- minimize or eliminate $self->stderr_filter, $self->ok_result_codes use
- minimize $self->command_chdir use.
- 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.
- Add an "Options:" section to .vcp files, or add individual options for
  each of the global options.
- 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
- 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 <quinot@inf.enst.fr>
  - Check for p4 >= 99.2 at runtime, since filelog -m is needed
  - Carry executable bit through (Nick Ing-Simmons)
  - Make <rev_root> and <name> escape their characters
  - VCP::Dest::cvs needs to set the binary mode properly on files it creates
    and checks in
  - VCP::Source::cvs needs to deduce binary modes correctly
  - Make test suite use an alternate port for p4d so multiple make test
    instances can be run in parallel
  - Make test suite skip cvs tests if cvs is not present (like it skips p4
    tests if p4 is not present).
  - 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
  - id= values should be the entire path-to-file, not relative to rev_root.

- Feature Adds
  - Need to make the transfers more transactional, so we can recover from where
    we left off when something fails.
  - Need to save some sort of state as to where the last export ended so the
    next one can start from there.
  - Offer compressed output for revml files a la tar's "z" option.
  - Consider offering <char code=0x00 repeat=34234> (david d zuhn
    <zoo@bravara.com>)
  - Allow revml to output in non-indented mode (need to see if this
    actually saves much space when compressed) (+)
  - 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.
  - An option to prefix all labels with some user-defined string Steve James
    <SJames@ariba.com>
  - Limit the number of NtLkLy queries per command to prevent server lockup.
    Steve James <SJames@ariba.com>  (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::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.
  - 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.
  - 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.

- Tests
  - rerooting 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.

- Cleanup
  - Where command_stderr_filter is used to save/restore the filter, use
    stderr_filter => instead.
  - Do same for command_ok_result_codes();
  - 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.
# 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.