Changeset 1414 for branches/locker-dev/locker/sbin/parallel-find.pl
- Timestamp:
- Jan 12, 2010, 11:55:27 PM (13 years ago)
- Location:
- branches/locker-dev/locker
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/locker-dev/locker
-
Property
svn:mergeinfo
set to
False
/trunk/locker merged eligible
-
Property
svn:mergeinfo
set to
False
-
branches/locker-dev/locker/sbin/parallel-find.pl
r730 r1414 2 2 3 3 # Script to help generate find the .scripts-version files 4 5 use LockFile::Simple qw(trylock unlock); 6 use File::stat; 4 7 5 8 use lib '/mit/scripts/sec-tools/perl'; … … 7 10 open(FILE, "</mit/scripts/sec-tools/store/scriptslist"); 8 11 my $dump = "/mit/scripts/sec-tools/store/versions"; 12 my $dumpbackup = "/mit/scripts/sec-tools/store/versions-backup"; 9 13 10 (! -e $dump) || die "Output directory exists: $dump"; 11 system("mkdir", $dump) && die; 14 # try to grab a lock on the version directory 15 trylock($dump) || die "Can't acquire lock; lockfile already exists at <$dump.lock>. Another parallel-find may be running. If you are SURE there is not, remove the lock file and retry."; 16 17 sub unlock_and_die ($) { 18 my $msg = shift; 19 unlock($dump); 20 die $msg; 21 } 22 23 # if the versions directory exists, move it to versions-backup 24 # (removing the backup directory if necessary). Then make a new copy. 25 if (-e $dump){ 26 if (-e $dumpbackup){ 27 system("rm -rf $dumpbackup") && unlock_and_die "Can't remove old backup directory $dumpbackup"; 28 } 29 system("mv", $dump, $dumpbackup) && unlock_and_die "Unable to back up current directory $dump"; 30 } 31 system("mkdir", $dump) && unlock_and_die "mkdir failed to create $dump"; 12 32 13 33 use Proc::Queue size => 40, debug => 0, trace => 0; … … 28 48 } 29 49 50 sub old_version ($) { 51 my $dirname = shift; 52 open my $h, "$dirname/.scripts-version"; 53 chomp (my $v = (<$h>)[-1]); 54 return $v; 55 } 56 30 57 sub version ($) { 31 58 my $dirname = shift; 32 open my $h, "$dirname/.scripts-version"; 33 return (<$h>)[-1]; 59 $uid = stat($dirname)->uid; 60 open my $h, "sudo -u#$uid git --git-dir=$dirname/.git describe --tags --always 2>/dev/null |"; 61 chomp($val = <$h>); 62 if (! $val) { 63 print "Failed to read value for $dirname\n" 64 } 65 return $val; 34 66 } 35 67 … … 38 70 my $homedir = shift; 39 71 40 open my $files, "find $homedir/web_scripts -xdev -name .scripts-version 2>/dev/null |";72 open my $files, "find $homedir/web_scripts -xdev -name .scripts-version -o -name .scripts 2>/dev/null |"; 41 73 open my $out, ">$dump/$user"; 42 74 while (my $f = <$files>) { 43 75 chomp $f; 44 $f =~ s!/\.scripts-version$!!; 76 my $new_style; 77 $new_style = ($f =~ s!/\.scripts$!!); 78 if (! $new_style) { 79 $f =~ s!/\.scripts-version$!!; 80 # Don't use .scripts-version of .scripts is around! 81 if (-d "$f/.scripts") { 82 next; 83 } 84 } 45 85 if (! updatable($f)) { 46 86 print STDERR "not updatable: $f"; 47 87 next; 48 88 } 49 $v = version($f);50 print $out "$f:$v ";89 $v = $new_style ? version($f) : old_version($f); 90 print $out "$f:$v\n"; 51 91 } 52 92 return 0; … … 57 97 my $f=fork; 58 98 if(defined ($f) and $f==0) { 59 if ($homedir !~ m|^/afs/athena| ) {60 print "ignoring non-athena-cell $user $homedir\n";99 if ($homedir !~ m|^/afs/athena| && $homedir !~ m|^/afs/sipb| && $homedir !~ m|^/afs/zone|) { 100 print "ignoring foreign-cell $user $homedir\n"; 61 101 exit(0); 62 102 } 63 103 print "$user\n"; 64 104 $ret = find($user, $homedir); 65 66 105 sleep rand 1; 106 exit($ret); 67 107 } 68 108 1 while waitpid(-1, WNOHANG)>0; # avoids memory leaks in Proc::Queue 69 109 } 110 111 unlock($dump); 112 1;
Note: See TracChangeset
for help on using the changeset viewer.