Return to Snippet

Revision: 20208
at November 9, 2009 18:06 by spreelanka


Initial Code
#!/usr/bin/perl
use strict;
my $svn_repo='local/path/to/repo';
my $f='full_repo_dump';
my $pattern='foldername/otherfoldername/offendingFileOrDirectory';
`svnadmin dump $svnrepo > $f`;

open I,'<'.$f;
open O,'>'.$f.'_cleaned';

my $c=0;
my $i=1;
while($_=<I>){
  while(/^Node-path: $pattern/){#this is what we want to remove
    $_=<I>;
    while(!/^Node-path/){
      $_=<I>;
      exit unless($_); #we are out of file to read, quittin time(this is likely bad form)
    }
  }
###just a workaround for large repo dumps and status bar type stuff
  if($c eq 0){
    $c=100001;
    print ++$i,"\n" ;
  }
  if($i%1000 eq 0){# also if your repo dump>2gb or so it will crash. this is not very precise, but it worked in my case
    close O;          #anyway, you get the point, close and open as append only to flush whatever file buffers perl's using
    open O,'>>'.$f.'_cleaned';
  }
  $c--;
###
  print O $_;
}

close I;
close O;
`svnadmin create freshly_cleaned_repo`;
`svnadmin load freshly_cleaned_repo < $f`;
#you should also `svnadmin dump $svnrepo -r0 > hey_whats_my_uuid`, look inside it for your uuid and 
# then `svnadmin setuuid freshly_cleaned_repo this-is-your-really-long-uuid-here`
# pulling and setting the uuid could be automated

Initial URL


Initial Description
I recently had to remove some files from a svn repo.
should work pretty much out of the box, just fill in blatantly exampleish text and read the comments

Initial Title
remove sensitive info from a subversion repository

Initial Tags
svn, perl

Initial Language
Perl