Acme-CPANAuthors-BackPAN-OneHundred
view release on metacpan or search on metacpan
examples/update100.pl view on Meta::CPAN
}
# read old file
my $inx = 0;
my $file = 'data/backpan100.csv';
if(my $fh = IO::File->new($file,'r')) {
while(<$fh>) {
s/\s+$//;
next if(not $_ or $_ =~ /^#/);
my ($pause,$cnt,$name) = split(/,/);
next unless($pause);
$inx++;
$old{$inx} = { count => $cnt, pause => $pause, name => $name };
$pause{$pause} = $cnt;
}
$fh->close;
}
#print "pause=" . Dumper(\%pause);
#print "old=" . Dumper(\%old);
# read new file
$inx = 0;
$file = 'backpan100.csv';
my $fh = IO::File->new($file,'r') or die "Cannot open file [$file]: $!\n";
while(<$fh>) {
s/\s+$//;
if($_ && $_ =~ /^# DATE: (.*)/) {
$tvars{WHEN} = $1;
}
next if(not $_ or $_ =~ /^#/);
my ($pause,$cnt,$name) = split(/,/);
next unless($pause);
$inx++;
$new{$inx} = { count => $cnt, pause => $pause, name => $name };
if($inx == 1) {
$tvars{TOPDOG} = $pause;
$tvars{TOPCAT} = $name;
}
# check whether anything has changed
if(!$pause{$pause}) {
push @{$changes{insert}}, $pause;
$changed = 1;
} elsif($pause{$pause} != $cnt) {
push @{$changes{update}}, $pause;
delete $pause{$pause};
$changed = 1;
} elsif($old{$inx} && ($old{$inx}{name} ne $name || $old{$inx}{pause} ne $pause)) {
delete $pause{$pause};
$changed = 1;
} else {
delete $pause{$pause};
}
$max = length $new{$inx}{pause} if($max < length $new{$inx}{pause});
}
$fh->close;
$tvars{COUNT} = scalar(keys %new);
#print "new=" . Dumper(\%new);
#print "pause=" . Dumper(\%pause);
# counts can go down as well as up
if(scalar(keys %pause)) {
$changed = 1;
push @{$changes{delete}}, $_
for(keys %pause);
}
#print "max=$max, changed=$changed\n";
# bail if nothing has changed
unless($changed) {
print "Nothing has changed, bailing\n";
exit 0;
}
$max = (int($max/4) + 1) * 4 if($max % 4);
$max+=2;
# create lists
for my $inx (sort {$new{$a}{pause} cmp $new{$b}{pause}} keys %new) {
my $pad = $max - length $new{$inx}{pause};
push @{$tvars{LIST1}}, sprintf " '%s'%s=> '%s',", $new{$inx}{pause}, (' ' x $pad), $new{$inx}{name};
}
my $cnt = 1;
for my $inx (sort {$new{$b}{count} <=> $new{$a}{count} || $new{$a}{pause} cmp $new{$b}{pause}} keys %new) {
my $pad = $max - length $new{$inx}{pause};
push @{$tvars{LIST2}}, sprintf " %2d. %3d %s%s%s", $cnt++, $new{$inx}{count}, $new{$inx}{pause}, (' ' x $pad), $new{$inx}{name};
}
# calculate copyright
$tvars{COPYRIGHT} = '2014';
my $year = DateTime->now->year;
$tvars{COPYRIGHT} .= "-$year" if($year > 2014);
# calculate version
$file = '../Changes';
my $changes = CPAN::Changes->load( $file );
my @releases = $changes->releases();
my $version = $releases[-1]->{version};
$version += 0.01;
$tvars{VERSION} = sprintf "%.2f", $version;
# update Changes file
my $release = CPAN::Changes::Release->new( version => $tvars{VERSION}, date => DateTime->now->ymd );
for my $group (qw(insert update delete)) {
next unless($changes{$group});
$release->add_changes(
{ group => $groups{$group} },
join(', ',@{$changes{$group}})
);
push @releases, $release;
}
$changes->releases( @releases );
$fh = IO::File->new($file,'w+') or die "Cannot open file [$file]: $!\n";
my $content = $changes->serialize;
my @content = split(/\n/,$content);
$content = '';
for my $line (@content) {
$line =~ s/^([\d.]+)\s+(.*?)$/$1 $2/;
$line =~ s/^\s+(.*?)/ $1/;
$line =~ s/^\s+(.*?)/ - $1/ unless($line =~ /^\s+[\[\-]/);
$content .= "$line\n";
}
print $fh $content;
$fh->close;
# update other files
my $parser = Template->new(\%config); # initialise parser
for my $template (@files) {
eval {
# parse to text
$parser->process($template,\%tvars,$template) or die $parser->error();
};
die "TT PARSER ERROR: eval=$@, error=" . $parser->error if($@);
}
# now store new data
system("cp data/backpan100.csv data/backpan100.old.csv ");
system("mv backpan100.csv data");
( run in 1.627 second using v1.01-cache-2.11-cpan-140bd7fdf52 )