f911ba985a
From-SVN: r102074
165 lines
5.0 KiB
Perl
Executable File
165 lines
5.0 KiB
Perl
Executable File
#!/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);
|
|
}
|
|
}
|
|
}
|