SVN::Dumpfilter - Perl extension to filter Subversion dumpfiles
use SVN::Dumpfilter; sub my_filter (\%;$); my $dumpfile = shift @ARGV; # filename or '-' for STDIN my $outfile = shift @ARGV; # filename or '-' for STDOUT Dumpfilter($dumpfile, $outfile, \&my_filter); sub my_filter (\%;$) { my $href = shift; my $recalc = shift || 0; my $header = $href->{'header'}; my $prop = $href->{'properties'}; # Do something (modify, add, delete) with the current node given by the # hash ref $href # e.g.: if (exists $header->{Node-path}) { $header->{Node-path} =~ s/OLD/NEW/; $recalc = 1; } # The node content is accessible as scalar with ${$href->{content}} # Can be in every possible text or binary format. if ($recalc) { svn_recalc_prop_header(%$href); # call if you changed properties svn_recalc_textcontent_header(%$href); # call if you modified text content } } To filter a dumpfile: shell # svnadmin create /path/to/new/repository shell # svnadmin dump /path/to/repository | my_svndumpfilter - - | svnadmin load /path/to/new/repository
SVN::Dumpfilter reads a Subversion (http://subversion.tigris.org/) dumpfile. The file is parsed and a call-back subfunction is called with a hash-reference for every 'node'. This function can modify, add or delete headers, properties and the content of the node. After processing of the call-back function the node is re-assembled and stored in an output file.
The parse and re-assemble processes are done by dedicated subfunctions which can be also exported ('internal' tag) for special filters (e.g. merging filter which has to write the output file by its own).
The node hash looks like this for a normal node:
$href = { 'content' => \'(content)', # scalar ref 'properties_order' => [], # array ref (helps with verification, but not needed) 'properties' => {}, # hash ref 'header' => { # hash ref 'Content-length' => '922', 'Text-content-length' => 922, 'Node-action' => 'change', 'Node-kind' => 'file', 'Node-path' => 'trunk/filename.pl', 'Text-content-md5' => 'c7ed3072d412de68da477350f8e8056f' } };
and like this for a revision node:
$href = { 'properties_order' => [ 'svn:log', 'svn:author', 'svn:date' ], 'properties' => { 'svn:log' => 'Log message, ...', 'svn:date' => '2006-05-10T13:31:40.486172Z', 'svn:author' => 'martin' }, 'header' => { 'Content-length' => '151', 'Prop-content-length' => 151, 'Revision-number' => '58' } };
By default:
&Dumpfilter &svn_recalc_content_header &svn_recalc_textcontent_header &svn_recalc_prop_header
Tags:
'recalc'
svn_recalc_content_header svn_recalc_textcontent_header svn_recalc_prop_header
'filters'
dos2unix_filter null_filter null_recalc_filter
'internal'
svn_read_entry svn_print_entry svn_get_properties svn_props2str svn_header_sanitycheck
Authors Module Website: http://www.scharrer-online.de/svn/dumpfilter.shtml
Martin Scharrer, <martin@scharrer-online.de>; http://www.scharrer-online.de/
Copyright (C) 2006-2008 by Martin Scharrer
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.8 or, at your option, any later version of Perl 5 you may have available.
To install SVN::Dumpfilter, copy and paste the appropriate command in to your terminal.
cpanm
cpanm SVN::Dumpfilter
CPAN shell
perl -MCPAN -e shell install SVN::Dumpfilter
For more information on module installation, please visit the detailed CPAN module installation guide.