Warning, /sdk/kde-dev-scripts/svn-clean is written in an unsupported language. File is not indexed.
0001 #! /usr/bin/env perl 0002 0003 # 0004 # This script recursively (beginning with the current directory) 0005 # wipes out everything not registered in SVN. 0006 # 0007 # rewritten in perl by Oswald Buddenhagen <ossi@kde.org> 0008 # based on bash version by Thiago Macieira <thiago@kde.org> 0009 # inspired by cvs-clean, written by Oswald Buddenhagen <ossi@kde.org> 0010 # inspired by the "old" cvs-clean target from Makefile.common 0011 # 0012 # This file is free software in terms of the BSD licence. That means 0013 # that you can do anything with it except removing this license or 0014 # the above copyright notice. There is NO WARRANTY of any kind. 0015 # 0016 0017 # Warning: 0018 # This script processes the output from the SVN executable 0019 # Do not run it along with colorsvn 0020 0021 use File::Path; 0022 0023 my $version = "svn-clean v1.0"; 0024 my $heading = $version.": cleans up the Subversion working directory\n"; 0025 my $usage = $heading. 0026 "svn-clean [-h] [-n] [-q] [-i|-f] [dirname]\n\n". 0027 "Where:\n". 0028 " -h shows this help screen\n". 0029 " -n dry-run: doesn't actually erase the files, just show their names\n". 0030 " -i interactive: ask for confirmation before erasing the files\n". 0031 " -f force: doesn't ask for confirmation before erasing\n". 0032 " -q quiet: doesn't show output\n"; 0033 0034 0035 my $dry_run = 0; 0036 my $force = 0; 0037 my $quiet = 0; 0038 0039 sub check_confirm() 0040 { 0041 return if ($force); 0042 0043 open(TTY, "+< /dev/tty") or die "cannot open /dev/tty"; 0044 0045 print TTY "This will erase files and directories that aren't in Subversion\n". 0046 "Are you sure you want to continue? (y/N) "; 0047 0048 if (<TTY> =~ /^[Yy]/) { 0049 $force = 1; 0050 close TTY; 0051 return; 0052 } 0053 0054 # user cancelled 0055 exit 0; 0056 } 0057 0058 # Parse arguments 0059 my $rest = 0; 0060 my @files = (); 0061 foreach my $arg (@ARGV) { 0062 if ($rest) { 0063 push @files, $arg; 0064 } else { 0065 if ($arg eq '-h' || $arg eq '--help') { 0066 print $usage; 0067 exit (0); 0068 } elsif ($arg eq '-n' || $arg eq '--dry-run') { 0069 $dry_run = 1; 0070 $force = 1; 0071 } elsif ($arg eq '-f' || $arg eq '--force') { 0072 $force = 1; 0073 } elsif ($arg eq '-i' || $arg eq '--interactive') { 0074 $force = 0; 0075 } elsif ($arg eq '-q' || $arg eq '--quiet') { 0076 $quiet = 1; 0077 } elsif ($arg eq '--') { 0078 $rest = 1; 0079 } elsif ($arg =~ /^-/) { 0080 print STDERR "svn-clean: unknown argument '".$arg."'\n\n".$usage; 0081 exit (1); 0082 } else { 0083 push @files, $arg; 0084 } 0085 } 0086 } 0087 if (!@files) { 0088 push @files, '.'; 0089 } 0090 0091 # Unset TERM just so that no colours are output 0092 # in case $SVN points to colorsvn 0093 delete $ENV{'TERM'}; 0094 0095 #print($heading."\n") unless $quiet; 0096 0097 foreach my $dir (@files) { 0098 open SVN, "-|", qw(svn status --no-ignore), $dir; 0099 while (<SVN>) { 0100 /^[I?] +(.*)$/ or next; 0101 my $file = $1; 0102 check_confirm(); 0103 lstat $file; 0104 if (-d _) { 0105 print("D ".$file."\n") unless $quiet; 0106 rmtree($file, 0, 0) unless $dry_run; 0107 } else { 0108 print("F ".$file."\n") unless $quiet; 0109 unlink($file) unless $dry_run; 0110 } 0111 } 0112 close SVN; 0113 }