#!/usr/bin/perl # Cleans a directory so that it only contains files in the CVS repository. # Use with caution! sub cvsclean { my ($dir) = @_; my (%files); my (@subdirs); if (!-e "$dir/CVS/Entries") { return; } open ENTRIES, "$dir/CVS/Entries"; while () { if (/^\/([^\/]+)\//) { # print "File $dir/$1\n"; $files{$1} = 1; } elsif (/^D\/([^\/]+)\//) { # print "Dir $dir/$1\n"; $files{$1} = 1; push @subdirs, $1; } } close ENTRIES; opendir DIR, $dir; foreach $f (readdir DIR) { if ($f eq 'CVS' || $f eq '.' || $f eq '..') { # skip } elsif ($files{$f}) { # print "File $dir/$f in repo\n"; } else { print "Deleting $dir/$f\n"; if (-d "$dir/$f") { system "rm -rf $dir/$f"; } else { unlink "$dir/$f"; } } } closedir DIR; foreach $subdir (@subdirs) { cvsclean ("$dir/$subdir"); } } if (@ARGV) { foreach $dir (@ARGV) { cvsclean ($dir); } } else { cvsclean ("."); }