#!/usr/bin/perl # Clean up old workspaces # We want to sync #none/client delete to reduce db and local disk usage # remember p4 is server centric $ws=$ARGV[0]; if(!$ws) { print "Usage: wsclean \n"; exit(1); } $user=$ENV{USER}; $noclean=0; $reject=0; # look for a cds.p4client $cfile="$ws/cds.p4client"; open(WS,"<$cfile") || die "Could not read $cfile\n"; while() { if(/^#/) { next; } chop; (@data)=split; $client=$data[2]; # Check the syntax (@cdata)=split(':',$client); if( $cdata[2] eq "") { print "Reject non-user client $client\n"; $reject=1; next; } print "Checking client $client\n"; $cmd="p4 -c $client opened"; open(CMD,"$cmd 2>&1|") || die "Could not run $cmd\n"; while() { if(/change/) { print; print "Checkouts detected, no cleanup will take place!\n"; $noclean=1; $reject=1; } else { push(@clist,$client); } } } if($noclean eq 0 && $reject ne 1) { print "Cleaning data\n"; foreach $cl (@clist) { print "Emptying client $cl\n"; $cmd="p4 -c $cl sync \\#none > /dev/null"; print "$cmd\n"; system($cmd); $cmd="p4 client -d $cl"; system($cmd); } } if($reject ne 1) { print "Deleting directory $ws\n"; system("rm -rf $ws"); }