User:ImplSearchBot/Code: Difference between revisions

m
ImplSearchBot:0
m (ImplSearchBot:0)
m (ImplSearchBot:0)
 
(3 intermediate revisions by the same user not shown)
Line 16:
our @initialcache;
our $alllanguages;
our @logoutput;
 
my %options;
Line 23 ⟶ 24:
# into logical chunks.
#---------------------
 
# Called in a *lot* of places to check the machine for overload.
sub slumber
{
# Snooze.
while(&snooze) {};
}
 
# A reversed snooze buton
sub snooze
{
open my $loadavg, '<', '/proc/loadavg'
or die "Failed to check load average: $!";
my $loadstr = <$loadavg>;
close $loadavg;
 
# Wait one minute for every process in the wait queue.
my @avgs = split / +/, $loadstr, 3;
 
my $sleeptime = 0;
 
# Sleep at least one minute for each process in the wait queue.
$sleeptime = $avgs[0] * 60;
 
 
# If we're currently under notable load
if($sleeptime > 30)
{
print "Calculated sleeptime: $sleeptime\n";
print "Load averages: " . join(' ', @avgs) . " ... Sleeping $sleeptime seconds\n";
sleep 1$sleeptime;
return $sleeptime;
}
 
return 0;
}
 
# Builds a simple hash ref associating a page name with body.
Line 29 ⟶ 66:
sub build_posting
{
&slumber;
my $name = shift;
my $body = shift;
Line 38 ⟶ 76:
sub prep_unimp_posting
{
&slumber;
my $impldiff = shift;
my $language = shift;
Line 50 ⟶ 89:
$implpage =~ s/^Category:(.*)/$1\/$language/;
 
# my $escapedImplPage = $implpage;
 
# $escapedImplPage =~ s/ /_/g;
my $link;
# if( $tasknamelink eq= "{{unimpl task link|$baretaskname)|$language}}";
# $link = "[http://rosettacode.org/mw/index.php?action=edit&title=$escapedImplPage $implpage]";
# {
$link = "[http://rosettacode.org/mw/index.php?action=edit&title=$escapedImplPage $implpage]";
# }
# else
# {
# $link = "[[:$taskname|$baretaskname]]";
# }
# Add the task to the unimplemented list, if it's unimplemented, and if it's not in the omit list.
Line 80 ⟶ 113:
sub prep_omit_posting
{
&slumber;
my $implediff = shift;
my $language = shift;
Line 107 ⟶ 141:
sub prep_listing_posting
{
&slumber;
my $impldiff = shift;
my $language = shift;
Line 142 ⟶ 177:
sub prep_omit_cat_posting
{
&slumber;
my $implediff = shift;
my $language = shift;
Line 150 ⟶ 186:
sub get_listing_name
{
&slumber;
my $language = shift;
return "Tasks not implemented in $language";
Line 157 ⟶ 194:
sub get_omit_template_name
{
&slumber;
my $language = shift;
return "unimp_omit_body_$language";
Line 164 ⟶ 202:
sub get_unimpl_template_name
{
&slumber;
my $language = shift;
return "unimp_body_$language";
Line 171 ⟶ 210:
sub get_omit_cat_name
{
&slumber;
my $language = shift;
return "Category:$language/Omit";
Line 178 ⟶ 218:
sub process_language
{
&slumber;
my $implediff = shift;
my $language = shift;
Line 199 ⟶ 240:
 
sub wikitxt_pathname {
&slumber;
my $page_name = $_[0];
"test/" . sanitizenamefs($page_name) . ".wikitxt";
Line 206 ⟶ 248:
sub processimplediff
{
&slumber;
my $implediff = shift;
my %work;
Line 226 ⟶ 269:
sub geteditor
{
&slumber;
# If we're not posting, and we're only drawing from cache
# We don't actually need to pull from the wiki.
Line 262 ⟶ 306:
sub out
{
&slumber;
my $string = shift;
my $loglevel = shift;
chomp $string;
 
push @logoutput, ($string);
if($options{'verbosity'} >= $loglevel)
Line 285 ⟶ 332:
sub sanitizenamefs
{
&slumber;
my $pagename = shift;
$pagename =~ tr/:\//__/;
Line 293 ⟶ 341:
sub diffcat_simple
{
&slumber;
my $first = shift;
my $second = shift;
Line 311 ⟶ 360:
sub diffcat
{
&slumber;
my $first = shift;
my $second = shift;
Line 319 ⟶ 369:
 
sub slurp_file {
&slumber;
my $pathname = $_[0];
open(my $stream, "<", $pathname) or do {warn"Can't open '$pathname': $!\n";
Line 335 ⟶ 386:
sub postpage
{
&slumber;
my $pagename = shift;
my $pagedata = shift;
Line 383 ⟶ 435:
sub cachedata
{
&slumber;
my $dataname = shift;
my $data = shift;
Line 401 ⟶ 454:
print $outfile to_json($data);
close $outfile;
&out(scalar @$data . " members cached to $filename.\n", 5);
}
Line 407 ⟶ 460:
sub getcacheddata
{
&slumber;
my $dataname = shift;
my $filename = $options{'cachepath'} . &sanitizenamefs($dataname . ".json");
Line 432 ⟶ 486:
sub reportcatchanges
{
&slumber;
my $category = shift;
my $old = shift;
Line 457 ⟶ 512:
sub getcategory
{
&slumber;
my $categoryname = shift;
&out("Getting category contents for $categoryname...", 4);
Line 474 ⟶ 530:
$new = [$editor->get_pages_in_category($categoryname)];
++$categorypulls;
sleep 1;
}
Line 489 ⟶ 544:
sub getwork
{
&slumber;
my $categoryname = shift;
&out("Getting work for $categoryname.\n",4);
Line 522 ⟶ 578:
sub getloglevelfromdiff
{
&slumber;
my $base = shift;
my $first = shift;
Line 533 ⟶ 590:
sub getlangwork
{
&slumber;
my $language = shift;
&out("Getting lang work for $language\n", 4);
Line 565 ⟶ 623:
sub commitcache
{
&slumber;
# First, find out if we've added any files.
my $cachepath = $options{'cachepath'};
Line 599 ⟶ 658:
sub svn
{
&slumber;
return
if(exists $options{'nosvn'});
Line 616 ⟶ 676:
 
sub getopt {
&slumber;
#I don't care to pollute my global scope.
my $wiki = 'rosettacode.org';
Line 692 ⟶ 753:
sub main {
&slumber;
 
unless (@ARGV) { @ARGV = @_; }
Line 771 ⟶ 833:
 
&postpage("User:ImplSearchBot/Code", "<$tag perl>$botsource</$tag>", 0);
 
my $logdata = "<pre>" . join( "\n", @logoutput) . "</pre>";
 
&postpage("User:ImplSearchBot/Log", $logdata, 0);
 
&out("Updating cache\n", 4);