Initial revision
From-SVN: r102074
This commit is contained in:
Executable
+164
@@ -0,0 +1,164 @@
|
||||
#!/usr/bin/perl -w
|
||||
# Purpose is to move patches from upload directory to
|
||||
# public patches directory. Any file not matching the correct
|
||||
# pattern is deleted. Any patch file without a README and the
|
||||
# file was last modified more than 120 minutes ago is deleted.
|
||||
# Any README file without a patch file which was last modified
|
||||
# more than 120 minutes ago is deleted.
|
||||
#
|
||||
# notes to self: as long as this runs as root do not worry
|
||||
# about quota problems or disk space
|
||||
|
||||
use strict;
|
||||
|
||||
my ($upload_dir) = "/home/ftp/classpath/incoming";
|
||||
my ($public_dir) = "/home/ftp/classpath/pub/patches";
|
||||
my ($user) = "classpath";
|
||||
my ($group) = "classpath";
|
||||
my ($mode_dir) = "775";
|
||||
my ($mode_file) = "664";
|
||||
my (@patches) = ();
|
||||
|
||||
use vars qw($upload_dir $public_dir @patches $user $group
|
||||
$mode_dir $mode_file);
|
||||
|
||||
# main
|
||||
{
|
||||
@patches = &getPatches();
|
||||
&movePatches(@patches);
|
||||
}
|
||||
|
||||
#---------------------------------------------------------------
|
||||
# Purpose: To remove files not matching the correct pattern.
|
||||
# To remove README files without patches (last modified greater
|
||||
# than 2 hours). To remove patches without README files (last
|
||||
# modified greater than 2 hours).
|
||||
#---------------------------------------------------------------
|
||||
sub getPatches
|
||||
{
|
||||
my (@patches) = ();
|
||||
my (@entries) = ();
|
||||
my (%maybe) = ();
|
||||
my ($entry, $debug, $prefix, $junk, $file, $patch, $readme) = "";
|
||||
my ($dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size, $atime,
|
||||
$mtime, $ctime, $blksize, $blocks) = "";
|
||||
|
||||
$debug = 1;
|
||||
|
||||
opendir(INCOMING, "$upload_dir") || die "could not open $upload_dir\n";
|
||||
@entries = grep( !/^\.\S+/, readdir(INCOMING)); # no .*
|
||||
closedir(INCOMING);
|
||||
foreach $entry (sort @entries)
|
||||
{
|
||||
if (($entry eq ".") || ($entry eq "..")) { next; }
|
||||
if (-d "$upload_dir/$entry")
|
||||
{
|
||||
print "Directory: $upload_dir/$entry/\n";
|
||||
}
|
||||
elsif (-e "$upload_dir/$entry")
|
||||
{
|
||||
if ($entry eq ".message") { next; }
|
||||
if ($entry eq "README") { next; }
|
||||
if ($entry !~ /^\w+-\d\d\d\d\d\d-\d+\.patch\.(gz|README)$/)
|
||||
{
|
||||
print "REGEX FAILED: $entry\n";
|
||||
unlink("$upload_dir/$entry");
|
||||
}
|
||||
else
|
||||
{
|
||||
($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,
|
||||
$ctime,$blksize,$blocks) = stat("$upload_dir/$entry");
|
||||
if ($size > 512000)
|
||||
{
|
||||
print "LARGE PATCH: $entry\n";
|
||||
unlink("$upload_dir/$entry");
|
||||
}
|
||||
else
|
||||
{
|
||||
($prefix,$junk) = split(/(\.gz|\.README)/, $entry, 2);
|
||||
$maybe{$prefix} += 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foreach $entry (keys(%maybe))
|
||||
{
|
||||
if ($maybe{$entry} == 2)
|
||||
{
|
||||
$patch = "$entry.gz";
|
||||
$readme = "$entry.README";
|
||||
|
||||
($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,
|
||||
$ctime,$blksize,$blocks) = stat($patch);
|
||||
if (time-$mtime > 900)
|
||||
{
|
||||
($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,
|
||||
$ctime,$blksize,$blocks) = stat($readme);
|
||||
if (time-$mtime > 900)
|
||||
{
|
||||
$patches[$#patches+1] = $entry;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (-e "$upload_dir/$entry.gz")
|
||||
{
|
||||
unlink("$upload_dir/$entry.gz");
|
||||
print "STALE PATCH: $entry.gz\n";
|
||||
}
|
||||
elsif (-e "$upload_dir/$entry.README")
|
||||
{
|
||||
unlink("$upload_dir/$entry.README");
|
||||
print "STALE README: $entry.README\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
return (@patches);
|
||||
}
|
||||
|
||||
#---------------------------------------------------------------
|
||||
# Purpose: To move the patches to the proper directory and set
|
||||
# the permissions correctly.
|
||||
#---------------------------------------------------------------
|
||||
sub movePatches
|
||||
{
|
||||
my (@patches) = @_;
|
||||
my ($patch) = "";
|
||||
my ($fail) = 0;
|
||||
|
||||
if (!(-d "$public_dir"))
|
||||
{
|
||||
system("mkdir -p $public_dir");
|
||||
system("chown $user.$group $public_dir");
|
||||
system("chmod $mode_dir $public_dir");
|
||||
}
|
||||
foreach $patch (@patches)
|
||||
{
|
||||
if (-e "$public_dir/$patch.gz")
|
||||
{
|
||||
print "Patch exists: $public_dir/$patch.gz\n";
|
||||
$fail = 1;
|
||||
}
|
||||
if (-e "$public_dir/$patch.README")
|
||||
{
|
||||
print "README exists: $public_dir/$patch.README\n";
|
||||
$fail = 1;
|
||||
}
|
||||
if ($fail == 0)
|
||||
{
|
||||
system("mv $upload_dir/$patch.gz $public_dir/$patch.gz");
|
||||
system("mv $upload_dir/$patch.README $public_dir/$patch.README");
|
||||
system("chown $user.$group $public_dir/*");
|
||||
system("chmod $mode_file $public_dir/*");
|
||||
open(MAIL, "|mail -s \"Classpath: $patch uploaded\" core\@classpath.org") || die "could not open mail\n";
|
||||
print MAIL "GNU Classpath FTP Maintenance\n";
|
||||
print MAIL "\n";
|
||||
print MAIL "Added Files:\n";
|
||||
print MAIL "ftp://ftp.classpath.org/pub/patches/$patch.gz\n";
|
||||
print MAIL "ftp://ftp.classpath.org/pub/patches/$patch.README\n\n";
|
||||
close(MAIL);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user