Sometimes you just don't have a gigabyte of RAM to spare. Sometimes you need vastly more space.
After git filter-branch, some leftover branches reference commits that aren't actually branching. These commits have a single parent and a single child. The parent's grandchild is the commit's child. The child's grandparent is the commit's parent.
…a pure-properly change This issue was encountered on r3671 of MediaWiki. A revision that only changed file properties: $ svn diff -r3670:3671 Index: trunk/phase3/stylesheets/monobook/null =================================================================== Property changes on: trunk/phase3/stylesheets/monobook/null ___________________________________________________________________ Added: svn:eol-style + native Added: svn:keywords + Author Date Id Revision With this patch it got changed like this: commit e1e84f202b34c3c87c4eb3e59f2d26f99de42639 Author: gabrielwicke <email@example.com> Date: Sun May 23 15:36:55 2004 +0100 bogus stylesheet for IE hack diff --git a/phase3/stylesheets/monobook/null b/phase3/stylesheets/monobook/null new file mode 100644 index 0000000..e69de29 And the backtrace before the change was: 2164 r3671 by gabrielwicke at 2004-05-23T15:36:55.000000Z Attribute (content) does not pass the type constraint because: Validation failed for 'Str' failed with value undef at /usr/local/lib/perl/5.10.1/Moose/Meta/Attribute.pm line 746 Moose::Meta::Attribute::_coerce_and_verify('Moose::Meta::Attribute=HASH(0x11f1ca0)', undef, 'SVN::Dump::Change::Mkfile=HASH(0x158ecfc0)') called at /usr/local/lib/perl/5.10.1/Moose/Meta/Attribute.pm line 398 Moose::Meta::Attribute::initialize_instance_slot('Moose::Meta::Attribute=HASH(0x11f1ca0)', 'Moose::Meta::Instance=HASH(0x1203fa0)', 'SVN::Dump::Change::Mkfile=HASH(0x158ecfc0)', 'HASH(0x158efbf8)') called at /usr/local/lib/perl/5.10.1/Class/MOP/Class.pm line 364 Class::MOP::Class::_construct_instance('Moose::Meta::Class=HASH(0x1198050)', 'HASH(0x158efbf8)') called at /usr/local/lib/perl/5.10.1/Class/MOP/Class.pm line 351 Class::MOP::Class::new_object('Moose::Meta::Class=HASH(0x1198050)', 'HASH(0x158efbf8)') called at /usr/local/lib/perl/5.10.1/Moose/Meta/Class.pm line 255 Moose::Meta::Class::new_object('Moose::Meta::Class=HASH(0x1198050)', 'HASH(0x158efbf8)') called at /usr/local/lib/perl/5.10.1/Moose/Object.pm line 25 Moose::Object::new('SVN::Dump::Change::Mkfile', 'path', 'trunk/phase3/stylesheets/monobook/null', 'content', undef, 'analysis', 'SVN::Analysis::Change::Add=HASH(0x1e5c2948)', 'entity', 'SVN::Analysis::Change::Add=HASH(0x1deb1028)') called at lib/SVN/Dump/Arborist.pm line 102 SVN::Dump::Arborist::add_new_node('SVN::Dump::Arborist=HASH(0x10e9960)', 3671, 'trunk/phase3/stylesheets/monobook/null', 'file', undef) called at lib/SVN/Dump/Replayer.pm line 133 SVN::Dump::Replayer::on_node_add('SVN::Dump::Replayer::Git=HASH(0x10fe720)', 3671, 'trunk/phase3/stylesheets/monobook/null', 'file', undef) called at lib/SVN/Dump/Walker.pm line 161 SVN::Dump::Walker::walk('SVN::Dump::Replayer::Git=HASH(0x10fe720)') called at ./snerp line 150 See also http://github.com/rcaputo/snerp-vortex/issues#issue/15 which is the bug for the issue.
svnadmin load checks the MD5 summaries for text and rejects the dump if they don't match what's actually in the file. Still to do, however, are the SHA1 summaries (if present) and the summaries for copy sources. Some of them are compensated for, but there are still edge cases. Shouldn't be a problem for the snerp toolchain, but it's an issue when loading into svn for comparison.
Snub discards file contents from Subversion dump files. Huge dumps should be much quicker to debug against, and much easier to gzip up for collaborative debugging.
At least one big Subversion dump I've seen contains a replace action for a directory node. Considering it a "change" does it no justice, since all the subdirectories remain in the analysis. It must be analyzed as a delete/add pair, or we'll need a special "replace" action. This change implements the delete/add pair. It's experimental and untested until I can find or make a small dump file that reproduces the offending directory replacement.
Copy source depot snapshots accumulate rapidy. We don't need them if the copy destinations are entities, since those represent tagging and branching operations. Make Analysis track actual destinations so replayers can decide whether they should be saved.
This commit loses the ability to extract just a part of the subversion repository. I'm not entirely sure how to implement it in this brave new refactored world.